tango-app-ui-analyse-trax 3.7.12-qid-1 → 3.7.12-qid-2

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.
@@ -1,7 +1,7 @@
1
1
  import { Component } from "@angular/core";
2
2
  import dayjs from "dayjs";
3
3
  import "dayjs/locale/en";
4
- import { Subject, takeUntil } from "rxjs";
4
+ import { distinctUntilChanged, Subject, takeUntil } from "rxjs";
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "tango-app-ui-global";
7
7
  import * as i2 from "@angular/forms";
@@ -157,6 +157,7 @@ export class EyeTestComponent {
157
157
  default:
158
158
  this.getAllStores();
159
159
  }
160
+ this.onSubmit();
160
161
  }
161
162
  this.cd.detectChanges();
162
163
  }, 1000);
@@ -178,6 +179,7 @@ export class EyeTestComponent {
178
179
  default:
179
180
  this.getAllStores();
180
181
  }
182
+ this.onSubmit();
181
183
  }
182
184
  this.cd.detectChanges();
183
185
  }, 1000);
@@ -203,7 +205,6 @@ export class EyeTestComponent {
203
205
  loading1 = true;
204
206
  // clusters new api
205
207
  getAllGroups(event) {
206
- this.loading1 = true;
207
208
  let rmList = [];
208
209
  this.ClusterList = [];
209
210
  if (Array.isArray(this.eyeTestForm.value.RmList)) {
@@ -259,7 +260,6 @@ export class EyeTestComponent {
259
260
  this.storeList = res.data.storesData;
260
261
  this.eyeTestForm.get("storeList")?.setValue(this.storeList);
261
262
  this.loading1 = false;
262
- this.onSubmit();
263
263
  }
264
264
  else {
265
265
  this.storeList = [];
@@ -362,7 +362,7 @@ export class EyeTestComponent {
362
362
  });
363
363
  }
364
364
  ongroupSelect(event) {
365
- this.loading1 = true;
365
+ // this.loading1 = true;
366
366
  this.eyeTestForm.get("ClusterList")?.setValue(event);
367
367
  this.groups = event.map((el) => el.clusterName);
368
368
  this.traxService
@@ -465,6 +465,7 @@ export class EyeTestComponent {
465
465
  if (element?.clusterName === obj.clusterName) {
466
466
  this.eyeTestForm.get("ClusterList")?.setValue([element]);
467
467
  this.ongroupSelect([element]);
468
+ this.loading1 = true;
468
469
  foundCluster = true;
469
470
  }
470
471
  });
@@ -476,6 +477,7 @@ export class EyeTestComponent {
476
477
  if (element?.clusterName === obj.clusterName) {
477
478
  this.eyeTestForm.get("ClusterList")?.setValue([element]);
478
479
  this.ongroupSelect([element]);
480
+ this.loading1 = true;
479
481
  foundCluster = true;
480
482
  }
481
483
  });
@@ -486,6 +488,7 @@ export class EyeTestComponent {
486
488
  if (element?.email === this.rmEmail) {
487
489
  this.eyeTestForm.get("RmList")?.setValue([element]);
488
490
  this.onRmSelect([element]);
491
+ this.loading1 = true;
489
492
  foundRM = true;
490
493
  }
491
494
  });
@@ -495,6 +498,7 @@ export class EyeTestComponent {
495
498
  if (!foundRM && !foundCluster) {
496
499
  this.getAllStores();
497
500
  }
501
+ this.onSubmit();
498
502
  this.cd.detectChanges();
499
503
  }
500
504
  typeVal1(val, obj) {
@@ -520,17 +524,20 @@ export class EyeTestComponent {
520
524
  if ((this.users?.role === "superadmin" || this.users?.role === "admin") &&
521
525
  (val === "store" || val === "cluster")) {
522
526
  this.getAllGroups();
527
+ this.loading1 = true;
523
528
  foundCluster = true;
524
529
  }
525
530
  // ✅ RM (only for superadmin)
526
531
  if (this.users?.role === "superadmin" && val === "rm") {
527
532
  this.getAllRm();
533
+ this.loading1 = true;
528
534
  foundRM = true;
529
535
  }
530
536
  // ✅ Fallback
531
537
  if (!foundRM && !foundCluster) {
532
538
  this.getAllStores();
533
539
  }
540
+ this.onSubmit();
534
541
  this.cd.detectChanges();
535
542
  }
536
543
  // private resetAllClusters() {
@@ -552,8 +559,6 @@ export class EyeTestComponent {
552
559
  // this.getAllRm();
553
560
  // }
554
561
  buildRequestData(params) {
555
- let finalStores = [];
556
- let rmListValue = [];
557
562
  // Map role → keyType
558
563
  const roleKeyTypeMap = {
559
564
  superadmin: "rm",
@@ -563,56 +568,53 @@ export class EyeTestComponent {
563
568
  if (!this.keyType) {
564
569
  this.keyType = roleKeyTypeMap[this.users?.role] || "rm";
565
570
  }
566
- if (Array.isArray(this.eyeTestForm.value.storeList)) {
567
- this.eyeTestForm.value.storeList.forEach((store) => {
568
- finalStores.push(store.storeId);
569
- });
571
+ // Collect store IDs
572
+ const finalStores = Array.isArray(this.eyeTestForm.value.storeList)
573
+ ? this.eyeTestForm.value.storeList.map((store) => store.storeId)
574
+ : [];
575
+ // Collect RM emails
576
+ let finalRMList = [];
577
+ if (Array.isArray(this.eyeTestForm.value.RmList) && this.eyeTestForm.value.RmList.length) {
578
+ finalRMList = this.eyeTestForm.value.RmList.map((el) => el?.email);
570
579
  }
571
- if (Array.isArray(this.eyeTestForm.value.RmList)) {
572
- this.eyeTestForm.value.RmList.forEach((el) => {
573
- this.RmListData = rmListValue.push(el?.email);
574
- });
580
+ else if (this.rmEmail) {
581
+ finalRMList = [this.rmEmail];
575
582
  }
576
- if (this.RmListData.length === 0) {
577
- this.RmListData = [];
583
+ else if (this.users?.email) {
584
+ finalRMList = [this.users.email];
578
585
  }
579
- this.demoGrapics = this.eyeTestForm.value.auditType;
580
- // normalize auditType → always array
586
+ this.RmListData = finalRMList?.length ? finalRMList?.length : [];
587
+ // Handle auditType → normalize to array
588
+ const auditTypeValue = this.eyeTestForm.value.auditType;
581
589
  let auditTypes = [];
582
- if (this.demoGrapics === "all") {
590
+ if (auditTypeValue === "all") {
583
591
  auditTypes = ["adult", "kid"];
584
592
  }
585
- else if (Array.isArray(this.demoGrapics)) {
586
- auditTypes = this.demoGrapics;
593
+ else if (Array.isArray(auditTypeValue)) {
594
+ auditTypes = auditTypeValue;
587
595
  }
588
- else if (this.demoGrapics) {
589
- auditTypes = [this.demoGrapics];
596
+ else if (auditTypeValue) {
597
+ auditTypes = [auditTypeValue];
590
598
  }
591
- this.cd.detectChanges();
592
- this.cd.detectChanges();
593
599
  return {
594
600
  clientId: this.headerFilters?.client,
595
601
  fromDate: this.eyeTestForm.value.fromDate,
596
602
  toDate: this.eyeTestForm.value.toDate,
597
603
  type: this.eyeTestForm.value.type,
598
- ...(this.eyeTestForm.value.type !== "remote" && {
599
- demographics: auditTypes,
600
- }),
604
+ // demographics only if type !== remote
605
+ ...(this.eyeTestForm.value.type !== "remote" && { demographics: auditTypes }),
601
606
  cluster: this.groups,
602
607
  storeId: finalStores,
603
608
  limit: params?.limit ?? this.limit ?? 10,
604
609
  offset: params?.offset ?? this.offset ?? 1,
605
610
  keyType: this.keyType,
606
- complianceScore: Number(this.eyeTestForm.value.complianceScore),
607
- nearAddition: this.eyeTestForm.value.nearAddition,
608
- category: this.eyeTestForm.value.category,
609
- RMList: this.rmEmail
610
- ? [this.rmEmail]
611
- : rmListValue.length > 0
612
- ? rmListValue
613
- : [this.users?.email],
614
- //["suresh.r@thelenskart.com","k.vasanth@lenskart.in", "tamilselvan.kirubagaran@lenskart.in"],
615
- searchValue: this.searchValue,
611
+ complianceScore: Number(this.eyeTestForm.value.complianceScore || 0),
612
+ nearAddition: this.eyeTestForm.value.nearAddition || "",
613
+ ...(this.eyeTestForm.value.type !== "remote" && {
614
+ category: this.eyeTestForm.value.category,
615
+ }),
616
+ RMList: finalRMList,
617
+ searchValue: this.searchValue || "",
616
618
  isExport: params?.isExport ?? false,
617
619
  sortOrder: this.sortOrder ?? -1,
618
620
  sortBy: this.sortedColumn ?? "date",
@@ -645,34 +647,36 @@ export class EyeTestComponent {
645
647
  this.typeValue = this.eyeTestForm?.value?.type;
646
648
  this.loading = true;
647
649
  this.noData = false;
648
- const requestData = this.buildRequestData({ isExport: false });
649
- this.eyeService
650
- .getEyeTestlist(requestData)
651
- .pipe(takeUntil(this.destroy$))
652
- .subscribe({
653
- next: (res) => {
654
- if (res && res.code === 200) {
655
- this.eyeTestData = res?.data.result;
656
- this.totalItems = res.data?.count;
657
- this.setPaginationSizes();
658
- this.getCardData();
659
- this.loading = false;
660
- this.noData = false;
661
- }
662
- else {
663
- this.eyeTestData = [];
650
+ setTimeout(() => {
651
+ const requestData = this.buildRequestData({ isExport: false });
652
+ this.eyeService
653
+ .getEyeTestlist(requestData)
654
+ .pipe(takeUntil(this.destroy$), distinctUntilChanged())
655
+ .subscribe({
656
+ next: (res) => {
657
+ if (res && res.code === 200) {
658
+ this.eyeTestData = res?.data.result;
659
+ this.totalItems = res.data?.count;
660
+ this.setPaginationSizes();
661
+ this.getCardData();
662
+ this.loading = false;
663
+ this.noData = false;
664
+ }
665
+ else {
666
+ this.eyeTestData = [];
667
+ this.loading = false;
668
+ this.noData = true;
669
+ this.totalItems = 0;
670
+ }
671
+ this.cd.detectChanges();
672
+ },
673
+ error: () => {
664
674
  this.loading = false;
665
675
  this.noData = true;
666
- this.totalItems = 0;
667
- }
668
- this.cd.detectChanges();
669
- },
670
- error: () => {
671
- this.loading = false;
672
- this.noData = true;
673
- this.cd.detectChanges();
674
- },
675
- });
676
+ this.cd.detectChanges();
677
+ },
678
+ });
679
+ }, 1000);
676
680
  }
677
681
  onPageChange(pageOffset) {
678
682
  // this.limit = 10;
@@ -819,7 +823,9 @@ export class EyeTestComponent {
819
823
  RMList: rmListValue.length > 0 ? rmListValue : [this.users?.email],
820
824
  complianceScore: Number(complianceScore),
821
825
  nearAddition,
822
- category,
826
+ ...(this.eyeTestForm.value.type !== "remote" && {
827
+ category,
828
+ }),
823
829
  };
824
830
  if (demographics) {
825
831
  requestData.demographics = demographics;
@@ -866,10 +872,10 @@ export class EyeTestComponent {
866
872
  return roleClassMap[role] || "col-12 mb-4";
867
873
  }
868
874
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EyeTestComponent, deps: [{ token: i1.PageInfoService }, { token: i2.FormBuilder }, { token: i3.TraxService }, { token: i4.EyeTestAuditService }, { token: i5.Router }, { token: i0.ChangeDetectorRef }, { token: i1.GlobalStateService }, { token: i6.ToastService }, { token: i5.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
869
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EyeTestComponent, selector: "lib-eye-test", ngImport: i0, template: "<div class=\"card mb-2\">\r\n <div *ngIf=\"loading1\" 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>\r\n <form *ngIf=\"!loading1\" [formGroup]=\"eyeTestForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 mt-7 mb-3\">\r\n <div class=\"row px-3\">\r\n <!-- <div class=\"col-md-12\">\r\n <div class=\"row\"> -->\r\n <div class=\"col-3 mb-0\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 230px !important;\" type=\"text\"\r\n matInput ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\" [alwaysShowCalendars]=\"false\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"false\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedDateRange\" [ngModelOptions]=\"{standalone: true}\"\r\n (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\"\r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div [ngClass]=\"eyeTestForm.get('type')?.value ==='remote' ? 'col-2 mb-4' : 'col-2 mb-4'\" class=\"col-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"type\"\r\n (itemChange)=\"typeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <div *ngIf=\"eyeTestForm.get('type')?.value !=='remote'\" class=\"col-1 mb-4\">\r\n <lib-reactive-select formControlName=\"auditType\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"auditType\"\r\n (itemChange)=\"auditTypeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <!-- </div>\r\n </div> -->\r\n <div *ngIf=\"users?.role ==='superadmin'\" class=\"col-md-3\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('RmList')?.value?.length)\">\r\n Select RM\r\n </div>\r\n <lib-group-select [items]=\"RmList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'userName'\"\r\n [idField]=\"'userName'\" (selected)=\"onRmSelect($event)\" [selectedValues]=\"eyeTestForm.get('RmList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n \r\n </div>\r\n <div *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\" class=\"col-md-3\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('ClusterList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n <lib-group-select [items]=\"ClusterList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'clusterName'\"\r\n [idField]=\"'clusterName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"eyeTestForm.get('ClusterList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-3\">\r\n \r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"eyeTestForm.get('storeList')?.value\"></lib-stores-select>\r\n \r\n </div>\r\n </div>\r\n <div [ngClass]=\"eyeTestForm.get('type')?.value ==='remote' ? 'col-2' : 'col-2'\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"complianceScore\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"typePercentageArray\" (itemChange)=\"typePercentageChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div *ngIf=\"\" class=\"col-md-2\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"nearAddition\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"nearAdditionArray\" (itemChange)=\"nearAdditionChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div *ngIf=\"eyeTestForm.get('type')?.value !=='remote'\" class=\"col-md-2\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"category\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"categoryArray\" (itemChange)=\"categoryTypeChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div \r\n *ngIf=\"users?.role\" \r\n class=\"text-end\"\r\n [ngClass]=\"getApplyButtonClass(users?.role, eyeTestForm.get('type')?.value)\"\r\n>\r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-sm btn-primary py-3\">\r\n <span>Apply</span>\r\n </a>\r\n</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n <div *ngIf=\"showEyeTest\" class=\"ms-6 mb-3\">\r\n\r\n <h3 class=\"card-title dashed w-100 row\">\r\n <span class=\"col-10 title-text py-3\"><span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\r\n viewBox=\"0 0 32 32\" fill=\"none\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_235_24234)\">\r\n <path\r\n d=\"M16 13.3335V16.0002M16 18.6668H16.0067M22.6667 16.0002C22.6667 19.6821 19.6819 22.6668 16 22.6668C12.3181 22.6668 9.33337 19.6821 9.33337 16.0002C9.33337 12.3183 12.3181 9.3335 16 9.3335C19.6819 9.3335 22.6667 12.3183 22.6667 16.0002Z\"\r\n stroke=\"#D92D20\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_235_24234\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(8 8)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span><span class=\"dashed-desc\">Eye test video preview is available for 30 days. Audit data\r\n remains accessible, but videos will not be retained beyond this period.</span></span>\r\n <span class=\"col-2 pt-2 text-end cursor-pointer\" (click)=\"closeEyeTest()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <path d=\"M25 15L15 25M15 15L25 25\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </h3>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<!-- <div class=\"card my-3\">\r\n <div class=\"card-header border-0 py-1\">\r\n \r\n </div>\r\n</div> -->\r\n\r\n<div class=\"row\">\r\n <div *ngIf=\"users?.role ==='superadmin' && keyType ==='rm'\" class=\"col\">\r\n <div class=\"card p-2\">\r\n <div class=\"card-header ellipse1 min-h-55px py-1 px-3 d-flex justify-content-between align-items-center\">\r\n <h5 class=\"card-title my-0\">Regional Managers</h5>\r\n <span class=\"text-value\">{{RmListData ?? '--'}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card mt-5 p-2\">\r\n <div class=\"card-header ellipse1 min-h-55px py-1 px-3 d-flex justify-content-between align-items-center\">\r\n <h5 class=\"card-title my-0\">Clusters</h5>\r\n <span class=\"text-value\">{{groups?.length ?? '--'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"users?.role ==='superadmin' && keyType !=='rm' || users?.role ==='admin'\" class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Clusters</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ groups?.length ?? '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Total Tango AI Files</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.totalFiles ?? '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Trust Audit Completed</h5>\r\n </div>\r\n <div class=\"card-body py-3 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.completedFiles ?? '-' }}</span>\r\n\r\n </div>\r\n <div class=\"card-footer py-0 border-0 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-sub\">{{ (eyeTestCardData?.completedRatio ?? '-') + '%' }} <span\r\n class=\"test-sub\">Completed</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Tango Score</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.tangoScore ?? '-' }}</span>\r\n </div>\r\n <div class=\"card-footer py-0 border-0 d-flex justify-content-center align-items-center\">\r\n <span>\r\n <svg *ngIf=\"eyeTestCardData?.trend\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\" stroke-width=\"1.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg *ngIf=\"!eyeTestCardData?.trend\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_760_9776)\">\r\n <path d=\"M11.575 9L6.82495 4.25L4.32495 6.75L0.574951 3M11.575 9H8.57495M11.575 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_760_9776\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0.0749512)\" />\r\n </clipPath>\r\n </defs>\r\n </svg> \r\n <span class=\"text-sub ms-2\">{{ eyeTestCardData?.tangoScoreTrend !== null \r\n ? (getAbsValue(eyeTestCardData.tangoScoreTrend) | number:'1.0-0':'en-US') + '%' \r\n : '-' }}\r\n <span\r\n class=\"test-sub1\">vs previous week</span></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Trust Score</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ (eyeTestCardData?.trustScore && eyeTestCardData?.trustScore !== 'NA' \r\n ? eyeTestCardData.trustScore + '%' \r\n : 'NA') }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"card mt-3\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"users?.role === 'superadmin' && keyType ==='rm'\" class=\"title-text mb-2\">\r\n Audit Summary\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary\">{{ totalItems }} Total</span>\r\n </span>\r\n\r\n <!-- Admin + cluster present \u2192 RM Summary -->\r\n <div class=\"d-flex\">\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='cluster' && users?.role === 'superadmin'\" (click)=\"typeVal1('rm','')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n 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\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"users?.role === 'admin' && keyType ==='cluster' || users?.role === 'superadmin' && keyType ==='cluster'\" class=\"title-text my-4 mb-2\">\r\n RM Summary\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary text-capitalize\">{{ eyeTestData[0]?.RMName ? eyeTestData[0]?.RMName : '' }}</span>\r\n </span>\r\n </div>\r\n\r\n <!-- All other cases \u2192 Eye Test -->\r\n <div class=\"d-flex \">\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='store' && (users?.role === 'superadmin')\"\r\n (click)=\"typeVal1('cluster',this.rmEmail)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='store' && (users?.role === 'admin')\"\r\n (click)=\"typeVal1('cluster',this.groups)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"!(users?.role === 'superadmin' && keyType ==='rm') && !(users?.role === 'superadmin' && keyType ==='cluster') \r\n && !(users?.role === 'admin' && keyType ==='cluster')\" class=\"title-text my-4 mb-2\">\r\n Eye Test\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary\">{{ totalItems }} Total</span>\r\n </span>\r\n </div>\r\n <span *ngIf=\"users?.role ==='superadmin' && keyType ==='rm'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n <span *ngIf=\"users?.role ==='admin' && keyType ==='cluster'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n <span *ngIf=\"users?.role ==='user' && keyType ==='store'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input (change)=\"searchData()\" [(ngModel)]=\"searchValue\" type=\"text\" class=\"form-control ps-14 me-2\" autocomplete=\"off\"\r\n [placeholder]=\"\r\n keyType === 'rm'\r\n ? 'Search by RMName'\r\n : keyType === 'cluster'\r\n ? 'Search by Cluster'\r\n : 'Search'\r\n \" />\r\n\r\n\r\n <span class=\"cursor-pointer\" *ngIf=\"users?.role ==='superadmin'\" (click)=\"settingsView()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"45\" height=\"46\"\r\n viewBox=\"0 0 45 46\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_760_9988)\">\r\n <rect x=\"2.71973\" y=\"1.98047\" width=\"40.04\" height=\"40.04\" rx=\"7.28\" fill=\"white\" />\r\n <rect x=\"3.17473\" y=\"2.43547\" width=\"39.13\" height=\"39.13\" rx=\"6.825\" stroke=\"#D0D5DD\"\r\n stroke-width=\"0.91\" />\r\n <g clip-path=\"url(#clip0_760_9988)\">\r\n <path\r\n d=\"M22.7396 24.2749C23.9961 24.2749 25.0146 23.2563 25.0146 21.9999C25.0146 20.7434 23.9961 19.7249 22.7396 19.7249C21.4832 19.7249 20.4646 20.7434 20.4646 21.9999C20.4646 23.2563 21.4832 24.2749 22.7396 24.2749Z\"\r\n stroke=\"#344054\" stroke-width=\"1.5197\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M28.3513 24.2749C28.2503 24.5036 28.2202 24.7573 28.2648 25.0033C28.3094 25.2493 28.4267 25.4763 28.6015 25.655L28.647 25.7005C28.788 25.8414 28.8999 26.0087 28.9762 26.1928C29.0526 26.3769 29.0919 26.5743 29.0919 26.7736C29.0919 26.9729 29.0526 27.1703 28.9762 27.3544C28.8999 27.5385 28.788 27.7058 28.647 27.8466C28.5062 27.9876 28.3389 28.0995 28.1548 28.1758C27.9707 28.2522 27.7733 28.2914 27.574 28.2914C27.3747 28.2914 27.1773 28.2522 26.9932 28.1758C26.8091 28.0995 26.6418 27.9876 26.5009 27.8466L26.4554 27.8011C26.2767 27.6263 26.0497 27.509 25.8037 27.4644C25.5577 27.4198 25.304 27.4499 25.0753 27.5509C24.851 27.647 24.6597 27.8066 24.525 28.0101C24.3902 28.2135 24.3179 28.4519 24.3169 28.696V28.8249C24.3169 29.2271 24.1572 29.6129 23.8727 29.8973C23.5883 30.1817 23.2025 30.3415 22.8003 30.3415C22.398 30.3415 22.0123 30.1817 21.7278 29.8973C21.4434 29.6129 21.2836 29.2271 21.2836 28.8249V28.7566C21.2777 28.5056 21.1965 28.2622 21.0504 28.058C20.9044 27.8538 20.7003 27.6982 20.4646 27.6115C20.2359 27.5106 19.9822 27.4805 19.7362 27.5251C19.4902 27.5697 19.2632 27.687 19.0844 27.8618L19.0389 27.9073C18.8981 28.0483 18.7308 28.1602 18.5467 28.2365C18.3626 28.3128 18.1652 28.3521 17.9659 28.3521C17.7666 28.3521 17.5692 28.3128 17.3851 28.2365C17.201 28.1602 17.0337 28.0483 16.8929 27.9073C16.7519 27.7664 16.64 27.5992 16.5637 27.415C16.4873 27.2309 16.448 27.0336 16.448 26.8342C16.448 26.6349 16.4873 26.4376 16.5637 26.2535C16.64 26.0693 16.7519 25.9021 16.8929 25.7612L16.9384 25.7157C17.1132 25.537 17.2305 25.31 17.2751 25.064C17.3197 24.818 17.2896 24.5643 17.1886 24.3355C17.0925 24.1112 16.9329 23.92 16.7294 23.7852C16.526 23.6505 16.2876 23.5782 16.0435 23.5772H15.9146C15.5124 23.5772 15.1266 23.4174 14.8422 23.133C14.5577 22.8486 14.3979 22.4628 14.3979 22.0605C14.3979 21.6583 14.5577 21.2725 14.8422 20.9881C15.1266 20.7037 15.5124 20.5439 15.9146 20.5439H15.9829C16.2339 20.538 16.4773 20.4568 16.6815 20.3107C16.8857 20.1646 17.0413 19.9605 17.1279 19.7249C17.2289 19.4961 17.259 19.2424 17.2144 18.9964C17.1698 18.7504 17.0525 18.5234 16.8777 18.3447L16.8322 18.2992C16.6912 18.1583 16.5793 17.9911 16.503 17.807C16.4267 17.6228 16.3874 17.4255 16.3874 17.2262C16.3874 17.0268 16.4267 16.8295 16.503 16.6454C16.5793 16.4612 16.6912 16.294 16.8322 16.1531C16.9731 16.0121 17.1403 15.9002 17.3244 15.8239C17.5086 15.7476 17.7059 15.7083 17.9052 15.7083C18.1046 15.7083 18.3019 15.7476 18.486 15.8239C18.6702 15.9002 18.8374 16.0121 18.9783 16.1531L19.0238 16.1986C19.2025 16.3734 19.4295 16.4907 19.6755 16.5353C19.9215 16.5799 20.1752 16.5498 20.4039 16.4489H20.4646C20.6889 16.3527 20.8802 16.1931 21.0149 15.9897C21.1497 15.7862 21.222 15.5478 21.2229 15.3038V15.1749C21.2229 14.7726 21.3827 14.3869 21.6672 14.1024C21.9516 13.818 22.3374 13.6582 22.7396 13.6582C23.1419 13.6582 23.5276 13.818 23.8121 14.1024C24.0965 14.3869 24.2563 14.7726 24.2563 15.1749V15.2431C24.2573 15.4871 24.3296 15.7256 24.4643 15.929C24.599 16.1325 24.7903 16.2921 25.0146 16.3882C25.2433 16.4891 25.4971 16.5193 25.7431 16.4747C25.9891 16.4301 26.2161 16.3128 26.3948 16.138L26.4403 16.0925C26.5811 15.9514 26.7484 15.8396 26.9325 15.7632C27.1167 15.6869 27.314 15.6476 27.5133 15.6476C27.7126 15.6476 27.91 15.6869 28.0941 15.7632C28.2782 15.8396 28.4455 15.9514 28.5864 16.0925C28.7274 16.2333 28.8392 16.4006 28.9156 16.5847C28.9919 16.7688 29.0312 16.9662 29.0312 17.1655C29.0312 17.3648 28.9919 17.5622 28.9156 17.7463C28.8392 17.9304 28.7274 18.0977 28.5864 18.2385L28.5409 18.284C28.366 18.4628 28.2488 18.6898 28.2042 18.9358C28.1596 19.1818 28.1897 19.4355 28.2906 19.6642V19.7249C28.3867 19.9492 28.5464 20.1404 28.7498 20.2752C28.9533 20.4099 29.1917 20.4822 29.4357 20.4832H29.5646C29.9669 20.4832 30.3526 20.643 30.6371 20.9274C30.9215 21.2119 31.0813 21.5976 31.0813 21.9999C31.0813 22.4021 30.9215 22.7879 30.6371 23.0723C30.3526 23.3567 29.9669 23.5165 29.5646 23.5165H29.4964C29.2523 23.5175 29.0139 23.5898 28.8105 23.7246C28.607 23.8593 28.4474 24.0506 28.3513 24.2749Z\"\r\n stroke=\"#344054\" stroke-width=\"1.5197\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_760_9988\" x=\"0.719727\" y=\"0.980469\" width=\"44.04\" height=\"44.04\"\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_760_9988\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_760_9988\"\r\n result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_760_9988\">\r\n <rect width=\"18.2\" height=\"18.2\" fill=\"white\"\r\n transform=\"translate(13.6396 12.9004)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n\r\n <button *ngIf=\"!noData && !loading\" type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"20\" viewBox=\"0 0 19 20\" fill=\"none\">\r\n <path d=\"M7.53369 12.8441H15.0241L13.5568 14.3172L14.3587 15.1191L17.2024 12.2754L14.3587 9.43164L13.5568 10.2336L15.0241 11.7066H7.53369V12.8441Z\" fill=\"black\"/>\r\n <path d=\"M12.6526 8.8631V6.5881C12.653 6.51325 12.6387 6.43904 12.6104 6.36975C12.5821 6.30045 12.5404 6.23743 12.4877 6.18428L8.5064 2.20303C8.45326 2.15032 8.39023 2.10862 8.32094 2.08031C8.25164 2.05201 8.17744 2.03766 8.10259 2.0381H2.41509C2.1134 2.0381 1.82408 2.15794 1.61075 2.37126C1.39743 2.58458 1.27759 2.87391 1.27759 3.1756V16.8256C1.27759 17.1273 1.39743 17.4166 1.61075 17.6299C1.82408 17.8433 2.1134 17.9631 2.41509 17.9631H11.5151C11.8168 17.9631 12.1061 17.8433 12.3194 17.6299C12.5327 17.4166 12.6526 17.1273 12.6526 16.8256V15.6881H11.5151V16.8256H2.41509V3.1756H6.96509V6.5881C6.96509 6.88978 7.08493 7.17911 7.29826 7.39243C7.51158 7.60575 7.80091 7.7256 8.10259 7.7256H11.5151V8.8631H12.6526ZM8.10259 6.5881V3.40878L11.2819 6.5881H8.10259Z\" fill=\"black\"/>\r\n</svg><span class=\"ms-2\">Export</span> </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\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 <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata-table\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this eye test table</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!noData && !loading\" class=\"card-body\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"keyType ==='store'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('date')\"> Date <svg\r\n [ngClass]=\"sortedColumn === 'date' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'date' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th *ngIf=\"users?.role ==='superadmin'\" class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('RMName')\"> RM Name <svg\r\n [ngClass]=\"sortedColumn === 'RMName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'RMName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\" class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterName')\"> Cluster Name <svg\r\n [ngClass]=\"sortedColumn === 'clusterName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name <svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID <svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th *ngIf=\"this.typeValue ==='remote'\" class=\"text-start\">Engagement ID</th>\r\n <th *ngIf=\"this.typeValue !=='remote'\" class=\"text-start\">Optom ID</th>\r\n <th *ngIf=\"this.typeValue !=='remote'\" class=\"text-start\">Queue ID</th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('complianceScore')\">Tango Score <svg\r\n [ngClass]=\"sortedColumn === 'complianceScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'complianceScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n \r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('trustScore')\">Trust Score <svg\r\n [ngClass]=\"sortedColumn === 'trustScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'trustScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('coveredStepsAI')\">Steps Covered By AI <svg\r\n [ngClass]=\"sortedColumn === 'coveredStepsAI' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'coveredStepsAI' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n\r\n <th *ngIf=\"this.typeValue !=='remote'\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('visitorsType')\">Visitor Type <svg\r\n [ngClass]=\"sortedColumn === 'visitorsType' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'visitorsType' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n <th class=\"text-start\">Test Duration</th>\r\n <th class=\"text-start\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('comment')\">Eye Test Status <svg\r\n [ngClass]=\"sortedColumn === 'comment' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'comment' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('subComment')\">Comments <svg\r\n [ngClass]=\"sortedColumn === 'subComment' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'subComment' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('auditStatus')\">Audit Status <svg\r\n [ngClass]=\"sortedColumn === 'auditStatus' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'auditStatus' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\"><span class=\"cursor-pointer\" (click)=\"onSort('auditedBy')\">Audited By <svg\r\n [ngClass]=\"sortedColumn === 'auditedBy' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'auditedBy' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.date | date:'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"users?.role ==='superadmin'\">{{obj?.RMName}}</td>\r\n <td *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\">{{obj?.clusterName}}</td>\r\n <td>{{obj?.storeName}}</td>\r\n <td>{{obj?.storeId}}</td>\r\n <td *ngIf=\"this.typeValue ==='remote'\" class=\"engage-text\">{{obj?.engagementId}}</td>\r\n <td *ngIf=\"this.typeValue !=='remote'\">{{obj?.optumId ? obj?.optumId :''}}\r\n </td>\r\n <td *ngIf=\"this.typeValue !=='remote'\" class=\"engage-text\">{{obj?.queueId ?\r\n obj?.queueId:''}}</td>\r\n <td>\r\n {{ obj?.complianceScore ?? '--' }}\r\n</td>\r\n <td>{{obj?.trustScore ?? '--'}}</td>\r\n <td>{{obj?.coveredStepsAI ? obj?.coveredStepsAI:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"this.typeValue !=='remote'\">{{obj?.visitorsType ?\r\n obj?.visitorsType:'--'}}</td>\r\n <td>{{obj?.min ? obj?.min :'0'}} mins {{obj?.sec ?\r\n obj?.sec:'0'}} secs</td>\r\n <td *ngIf=\"this.typeValue !=='remote'\">\r\n <span \r\n class=\"badge\" \r\n [ngClass]=\"obj?.comment ? 'badge-light-danger' : 'badge-light-success'\">\r\n {{ obj?.comment ? 'Fake' : 'Genuine' }}\r\n </span>\r\n</td>\r\n <td>{{obj?.subComment ? obj?.subComment:'--'}}</td>\r\n <td><span class=\"badge badge-light-primary\"\r\n *ngIf=\"obj?.auditStatus ==='Yet-to-Audit'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-warning\"\r\n *ngIf=\"obj?.auditStatus ==='Re-Audited'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-success\"\r\n *ngIf=\"obj?.auditStatus ==='Audited'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-info\"\r\n *ngIf=\"obj?.auditStatus ==='In-Progress'\">{{obj?.auditStatus}}</span>\r\n </td>\r\n <td>{{obj?.auditedBy?obj?.auditedBy:\"-\"}}</td>\r\n <td class=\"cursor-pointer\" (click)=\"eyeTestView(obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"keyType ==='rm'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('RMName')\"> RM Name <svg\r\n [ngClass]=\"sortedColumn === 'RMName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'RMName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterCount')\"> Clusters Count <svg\r\n [ngClass]=\"sortedColumn === 'clusterCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('storesCount')\">Stores Count <svg\r\n [ngClass]=\"sortedColumn === 'storesCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storesCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('totalFiles')\">Total Tango AI Files <svg\r\n [ngClass]=\"sortedColumn === 'totalFiles' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'totalFiles' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('completedFiles')\">Trust Audit Completed <svg\r\n [ngClass]=\"sortedColumn === 'completedFiles' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'completedFiles' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('complianceScore')\">Tango Score <svg\r\n [ngClass]=\"sortedColumn === 'complianceScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'complianceScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('trustScore')\">Trust Score <svg\r\n [ngClass]=\"sortedColumn === 'trustScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'trustScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.RMName ? obj?.RMName:'--'}}</td>\r\n <td>{{obj?.clusterCount ? obj?.clusterCount:'--'}}</td>\r\n <td>{{obj?.storesCount ? obj?.storesCount:'--'}}</td>\r\n <td>{{obj?.totalFiles ?? '--'}}</td>\r\n <td>{{obj?.completedFiles ?? '--'}}</td>\r\n <td>{{obj.complianceScore ?? '--'}}\r\n \r\n</td>\r\n<td>\r\n {{ obj?.trustScore ?? '--' }}\r\n</td>\r\n <td class=\"cursor-pointer\" (click)=\"typeVal('cluster',obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"keyType ==='cluster'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n \r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterName')\"> Clusters Name <svg\r\n [ngClass]=\"sortedColumn === 'clusterName' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('storesCount')\">Stores Count <svg\r\n [ngClass]=\"sortedColumn === 'storesCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storesCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('totalFiles')\">Total Tango AI Files <svg\r\n [ngClass]=\"sortedColumn === 'totalFiles' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'totalFiles' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('completedFiles')\">Trust Audit Completed <svg\r\n [ngClass]=\"sortedColumn === 'completedFiles' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'completedFiles' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('complianceScore')\">Tango Score <svg\r\n [ngClass]=\"sortedColumn === 'complianceScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'complianceScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('trustScore')\">Trust Score <svg\r\n [ngClass]=\"sortedColumn === 'trustScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'trustScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.clusterName ? obj?.clusterName:'--'}}</td>\r\n <td>{{obj?.storesCount ? obj?.storesCount:'--'}}</td>\r\n <td>{{obj?.totalFiles ?? '--'}}</td>\r\n <td>{{obj?.completedFiles ?? '--'}}</td>\r\n <td>\r\n {{ obj?.complianceScore ?? '--' }}\r\n</td>\r\n<td>\r\n {{ obj?.trustScore ?? '--' }}\r\n</td>\r\n <td class=\"cursor-pointer\" (click)=\"typeVal('store',obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-footer\" *ngIf=\"!noData && !loading\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"offset\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n</div>", styles: [":host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}table th,table td{height:44px!important;padding:12px 24px!important;gap:12px;align-self:stretch}table th{border-bottom:1px solid var(--Gray-200, #EAECF0)!important;background:var(--Gray-50, #F9FAFB)!important;color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500!important;line-height:18px}table td{color:var(--Gray-900, #667085);font-size:14px!important;font-weight:500!important;line-height:20px}.bottom-border td{border-bottom:1px solid var(--Gray-200, #EAECF0)!important}.rotate{rotate:180deg;transition:1s}.engage-text{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;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}.dashed{border-radius:4px;border:1px dashed var(--Error-500, #F04438)!important;background:var(--Error-25, #FFFBFA)}.dashed-desc{color:var(--Error-600, #3F4254)!important;font-size:14px;font-weight:600;line-height:24px}.card-header,.header{color:var(--Gray-900, #101828);font-size:20px!important;font-style:normal;font-weight:700;line-height:30px}.sub-header{color:var(--Gray-700, #344054);font-size:14px!important;font-style:normal;font-weight:600;line-height:20px}.ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.text-value{color:var(--Black, #101828);font-size:24px;font-weight:600;line-height:32px}.text-sub{color:var(--Error-600, #667085)!important;font-size:16px;font-weight:600;line-height:18px}.test-sub1{color:var(--Gray-800, #1D2939);font-size:12px;font-weight:400;line-height:18px}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "component", type: i9.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "label", "data"], outputs: ["itemChange"] }, { kind: "component", type: i10.CustomSelectComponent, selector: "lib-stores-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "component", type: i11.GroupSelectComponent, selector: "lib-group-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
875
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EyeTestComponent, selector: "lib-eye-test", ngImport: i0, template: "<div class=\"card mb-2\">\r\n <div *ngIf=\"loading1\" 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>\r\n <form *ngIf=\"!loading1\" [formGroup]=\"eyeTestForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 mt-7 mb-3\">\r\n <div class=\"row px-3\">\r\n <!-- <div class=\"col-md-12\">\r\n <div class=\"row\"> -->\r\n <div class=\"col-3 mb-0\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 230px !important;\" type=\"text\"\r\n matInput ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\" [alwaysShowCalendars]=\"false\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"false\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedDateRange\" [ngModelOptions]=\"{standalone: true}\"\r\n (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\"\r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div [ngClass]=\"eyeTestForm.get('type')?.value ==='remote' ? 'col-2 mb-4' : 'col-2 mb-4'\" class=\"col-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"type\"\r\n (itemChange)=\"typeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <div *ngIf=\"eyeTestForm.get('type')?.value !=='remote'\" class=\"col-1 mb-4\">\r\n <lib-reactive-select formControlName=\"auditType\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"auditType\"\r\n (itemChange)=\"auditTypeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <!-- </div>\r\n </div> -->\r\n <div *ngIf=\"users?.role ==='superadmin'\" class=\"col-md-3\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('RmList')?.value?.length)\">\r\n Select RM\r\n </div>\r\n <lib-group-select [items]=\"RmList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'userName'\"\r\n [idField]=\"'userName'\" (selected)=\"onRmSelect($event)\" [selectedValues]=\"eyeTestForm.get('RmList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n \r\n </div>\r\n <div *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\" class=\"col-md-3\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('ClusterList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n <lib-group-select [items]=\"ClusterList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'clusterName'\"\r\n [idField]=\"'clusterName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"eyeTestForm.get('ClusterList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-3\">\r\n \r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"eyeTestForm.get('storeList')?.value\"></lib-stores-select>\r\n \r\n </div>\r\n </div>\r\n <div [ngClass]=\"eyeTestForm.get('type')?.value ==='remote' ? 'col-2' : 'col-2'\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"complianceScore\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"typePercentageArray\" (itemChange)=\"typePercentageChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div *ngIf=\"\" class=\"col-md-2\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"nearAddition\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"nearAdditionArray\" (itemChange)=\"nearAdditionChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div *ngIf=\"eyeTestForm.get('type')?.value !=='remote'\" class=\"col-md-2\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"category\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"categoryArray\" (itemChange)=\"categoryTypeChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div \r\n *ngIf=\"users?.role\" \r\n class=\"text-end\"\r\n [ngClass]=\"getApplyButtonClass(users?.role, eyeTestForm.get('type')?.value)\"\r\n>\r\n <a (click)=\"onSubmit();\" type=\"submit\" class=\"btn btn-sm btn-primary py-3\">\r\n <span>Apply</span>\r\n </a>\r\n</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n <div *ngIf=\"showEyeTest\" class=\"ms-6 mb-3\">\r\n\r\n <h3 class=\"card-title dashed w-100 row\">\r\n <span class=\"col-10 title-text py-3\"><span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\r\n viewBox=\"0 0 32 32\" fill=\"none\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_235_24234)\">\r\n <path\r\n d=\"M16 13.3335V16.0002M16 18.6668H16.0067M22.6667 16.0002C22.6667 19.6821 19.6819 22.6668 16 22.6668C12.3181 22.6668 9.33337 19.6821 9.33337 16.0002C9.33337 12.3183 12.3181 9.3335 16 9.3335C19.6819 9.3335 22.6667 12.3183 22.6667 16.0002Z\"\r\n stroke=\"#D92D20\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_235_24234\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(8 8)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span><span class=\"dashed-desc\">Eye test video preview is available for 30 days. Audit data\r\n remains accessible, but videos will not be retained beyond this period.</span></span>\r\n <span class=\"col-2 pt-2 text-end cursor-pointer\" (click)=\"closeEyeTest()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <path d=\"M25 15L15 25M15 15L25 25\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </h3>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<!-- <div class=\"card my-3\">\r\n <div class=\"card-header border-0 py-1\">\r\n \r\n </div>\r\n</div> -->\r\n\r\n<div class=\"row\">\r\n <div *ngIf=\"users?.role ==='superadmin' && keyType ==='rm'\" class=\"col\">\r\n <div class=\"card p-2\">\r\n <div class=\"card-header ellipse1 min-h-55px py-1 px-3 d-flex justify-content-between align-items-center\">\r\n <h5 class=\"card-title my-0\">Regional Managers</h5>\r\n <span class=\"text-value\">{{RmListData ?? '--'}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card mt-5 p-2\">\r\n <div class=\"card-header ellipse1 min-h-55px py-1 px-3 d-flex justify-content-between align-items-center\">\r\n <h5 class=\"card-title my-0\">Clusters</h5>\r\n <span class=\"text-value\">{{groups?.length ?? '--'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"users?.role ==='superadmin' && keyType !=='rm' || users?.role ==='admin'\" class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Clusters</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ groups?.length ?? '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Total Tango AI Files</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.totalFiles ?? '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Trust Audit Completed</h5>\r\n </div>\r\n <div class=\"card-body py-3 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.completedFiles ?? '-' }}</span>\r\n\r\n </div>\r\n <div class=\"card-footer py-0 border-0 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-sub\">{{ (eyeTestCardData?.completedRatio ?? '-') + '%' }} <span\r\n class=\"test-sub\">Completed</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Tango Score</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.tangoScore ?? '-' }}</span>\r\n </div>\r\n <div class=\"card-footer py-0 border-0 d-flex justify-content-center align-items-center\">\r\n <span>\r\n <svg *ngIf=\"eyeTestCardData?.trend\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\" stroke-width=\"1.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg *ngIf=\"!eyeTestCardData?.trend\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_760_9776)\">\r\n <path d=\"M11.575 9L6.82495 4.25L4.32495 6.75L0.574951 3M11.575 9H8.57495M11.575 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_760_9776\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0.0749512)\" />\r\n </clipPath>\r\n </defs>\r\n </svg> \r\n <span class=\"text-sub ms-2\">{{ eyeTestCardData?.tangoScoreTrend !== null \r\n ? (getAbsValue(eyeTestCardData.tangoScoreTrend) | number:'1.0-0':'en-US') + '%' \r\n : '-' }}\r\n <span\r\n class=\"test-sub1\">vs previous week</span></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Trust Score</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ (eyeTestCardData?.trustScore && eyeTestCardData?.trustScore !== 'NA' \r\n ? eyeTestCardData.trustScore + '%' \r\n : 'NA') }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"card mt-3\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"users?.role === 'superadmin' && keyType ==='rm'\" class=\"title-text mb-2\">\r\n Audit Summary\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary\">{{ totalItems }} Total</span>\r\n </span>\r\n\r\n <!-- Admin + cluster present \u2192 RM Summary -->\r\n <div class=\"d-flex\">\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='cluster' && users?.role === 'superadmin'\" (click)=\"typeVal1('rm','')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n 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\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"users?.role === 'admin' && keyType ==='cluster' || users?.role === 'superadmin' && keyType ==='cluster'\" class=\"title-text my-4 mb-2\">\r\n RM Summary\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary text-capitalize\">{{ eyeTestData[0]?.RMName ? eyeTestData[0]?.RMName : '' }}</span>\r\n </span>\r\n </div>\r\n\r\n <!-- All other cases \u2192 Eye Test -->\r\n <div class=\"d-flex \">\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='store' && (users?.role === 'superadmin')\"\r\n (click)=\"typeVal1('cluster',this.rmEmail)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='store' && (users?.role === 'admin')\"\r\n (click)=\"typeVal1('cluster',this.groups)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"!(users?.role === 'superadmin' && keyType ==='rm') && !(users?.role === 'superadmin' && keyType ==='cluster') \r\n && !(users?.role === 'admin' && keyType ==='cluster')\" class=\"title-text my-4 mb-2\">\r\n Eye Test\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary\">{{ totalItems }} Total</span>\r\n </span>\r\n </div>\r\n <span *ngIf=\"users?.role ==='superadmin' && keyType ==='rm'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n <span *ngIf=\"users?.role ==='admin' && keyType ==='cluster'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n <span *ngIf=\"users?.role ==='user' && keyType ==='store'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input (change)=\"searchData()\" [(ngModel)]=\"searchValue\" type=\"text\" class=\"form-control ps-14 me-2\" autocomplete=\"off\"\r\n [placeholder]=\"\r\n keyType === 'rm'\r\n ? 'Search by RMName'\r\n : keyType === 'cluster'\r\n ? 'Search by Cluster'\r\n : 'Search'\r\n \" />\r\n\r\n\r\n <span class=\"cursor-pointer\" *ngIf=\"users?.role ==='superadmin'\" (click)=\"settingsView()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"45\" height=\"46\"\r\n viewBox=\"0 0 45 46\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_760_9988)\">\r\n <rect x=\"2.71973\" y=\"1.98047\" width=\"40.04\" height=\"40.04\" rx=\"7.28\" fill=\"white\" />\r\n <rect x=\"3.17473\" y=\"2.43547\" width=\"39.13\" height=\"39.13\" rx=\"6.825\" stroke=\"#D0D5DD\"\r\n stroke-width=\"0.91\" />\r\n <g clip-path=\"url(#clip0_760_9988)\">\r\n <path\r\n d=\"M22.7396 24.2749C23.9961 24.2749 25.0146 23.2563 25.0146 21.9999C25.0146 20.7434 23.9961 19.7249 22.7396 19.7249C21.4832 19.7249 20.4646 20.7434 20.4646 21.9999C20.4646 23.2563 21.4832 24.2749 22.7396 24.2749Z\"\r\n stroke=\"#344054\" stroke-width=\"1.5197\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M28.3513 24.2749C28.2503 24.5036 28.2202 24.7573 28.2648 25.0033C28.3094 25.2493 28.4267 25.4763 28.6015 25.655L28.647 25.7005C28.788 25.8414 28.8999 26.0087 28.9762 26.1928C29.0526 26.3769 29.0919 26.5743 29.0919 26.7736C29.0919 26.9729 29.0526 27.1703 28.9762 27.3544C28.8999 27.5385 28.788 27.7058 28.647 27.8466C28.5062 27.9876 28.3389 28.0995 28.1548 28.1758C27.9707 28.2522 27.7733 28.2914 27.574 28.2914C27.3747 28.2914 27.1773 28.2522 26.9932 28.1758C26.8091 28.0995 26.6418 27.9876 26.5009 27.8466L26.4554 27.8011C26.2767 27.6263 26.0497 27.509 25.8037 27.4644C25.5577 27.4198 25.304 27.4499 25.0753 27.5509C24.851 27.647 24.6597 27.8066 24.525 28.0101C24.3902 28.2135 24.3179 28.4519 24.3169 28.696V28.8249C24.3169 29.2271 24.1572 29.6129 23.8727 29.8973C23.5883 30.1817 23.2025 30.3415 22.8003 30.3415C22.398 30.3415 22.0123 30.1817 21.7278 29.8973C21.4434 29.6129 21.2836 29.2271 21.2836 28.8249V28.7566C21.2777 28.5056 21.1965 28.2622 21.0504 28.058C20.9044 27.8538 20.7003 27.6982 20.4646 27.6115C20.2359 27.5106 19.9822 27.4805 19.7362 27.5251C19.4902 27.5697 19.2632 27.687 19.0844 27.8618L19.0389 27.9073C18.8981 28.0483 18.7308 28.1602 18.5467 28.2365C18.3626 28.3128 18.1652 28.3521 17.9659 28.3521C17.7666 28.3521 17.5692 28.3128 17.3851 28.2365C17.201 28.1602 17.0337 28.0483 16.8929 27.9073C16.7519 27.7664 16.64 27.5992 16.5637 27.415C16.4873 27.2309 16.448 27.0336 16.448 26.8342C16.448 26.6349 16.4873 26.4376 16.5637 26.2535C16.64 26.0693 16.7519 25.9021 16.8929 25.7612L16.9384 25.7157C17.1132 25.537 17.2305 25.31 17.2751 25.064C17.3197 24.818 17.2896 24.5643 17.1886 24.3355C17.0925 24.1112 16.9329 23.92 16.7294 23.7852C16.526 23.6505 16.2876 23.5782 16.0435 23.5772H15.9146C15.5124 23.5772 15.1266 23.4174 14.8422 23.133C14.5577 22.8486 14.3979 22.4628 14.3979 22.0605C14.3979 21.6583 14.5577 21.2725 14.8422 20.9881C15.1266 20.7037 15.5124 20.5439 15.9146 20.5439H15.9829C16.2339 20.538 16.4773 20.4568 16.6815 20.3107C16.8857 20.1646 17.0413 19.9605 17.1279 19.7249C17.2289 19.4961 17.259 19.2424 17.2144 18.9964C17.1698 18.7504 17.0525 18.5234 16.8777 18.3447L16.8322 18.2992C16.6912 18.1583 16.5793 17.9911 16.503 17.807C16.4267 17.6228 16.3874 17.4255 16.3874 17.2262C16.3874 17.0268 16.4267 16.8295 16.503 16.6454C16.5793 16.4612 16.6912 16.294 16.8322 16.1531C16.9731 16.0121 17.1403 15.9002 17.3244 15.8239C17.5086 15.7476 17.7059 15.7083 17.9052 15.7083C18.1046 15.7083 18.3019 15.7476 18.486 15.8239C18.6702 15.9002 18.8374 16.0121 18.9783 16.1531L19.0238 16.1986C19.2025 16.3734 19.4295 16.4907 19.6755 16.5353C19.9215 16.5799 20.1752 16.5498 20.4039 16.4489H20.4646C20.6889 16.3527 20.8802 16.1931 21.0149 15.9897C21.1497 15.7862 21.222 15.5478 21.2229 15.3038V15.1749C21.2229 14.7726 21.3827 14.3869 21.6672 14.1024C21.9516 13.818 22.3374 13.6582 22.7396 13.6582C23.1419 13.6582 23.5276 13.818 23.8121 14.1024C24.0965 14.3869 24.2563 14.7726 24.2563 15.1749V15.2431C24.2573 15.4871 24.3296 15.7256 24.4643 15.929C24.599 16.1325 24.7903 16.2921 25.0146 16.3882C25.2433 16.4891 25.4971 16.5193 25.7431 16.4747C25.9891 16.4301 26.2161 16.3128 26.3948 16.138L26.4403 16.0925C26.5811 15.9514 26.7484 15.8396 26.9325 15.7632C27.1167 15.6869 27.314 15.6476 27.5133 15.6476C27.7126 15.6476 27.91 15.6869 28.0941 15.7632C28.2782 15.8396 28.4455 15.9514 28.5864 16.0925C28.7274 16.2333 28.8392 16.4006 28.9156 16.5847C28.9919 16.7688 29.0312 16.9662 29.0312 17.1655C29.0312 17.3648 28.9919 17.5622 28.9156 17.7463C28.8392 17.9304 28.7274 18.0977 28.5864 18.2385L28.5409 18.284C28.366 18.4628 28.2488 18.6898 28.2042 18.9358C28.1596 19.1818 28.1897 19.4355 28.2906 19.6642V19.7249C28.3867 19.9492 28.5464 20.1404 28.7498 20.2752C28.9533 20.4099 29.1917 20.4822 29.4357 20.4832H29.5646C29.9669 20.4832 30.3526 20.643 30.6371 20.9274C30.9215 21.2119 31.0813 21.5976 31.0813 21.9999C31.0813 22.4021 30.9215 22.7879 30.6371 23.0723C30.3526 23.3567 29.9669 23.5165 29.5646 23.5165H29.4964C29.2523 23.5175 29.0139 23.5898 28.8105 23.7246C28.607 23.8593 28.4474 24.0506 28.3513 24.2749Z\"\r\n stroke=\"#344054\" stroke-width=\"1.5197\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_760_9988\" x=\"0.719727\" y=\"0.980469\" width=\"44.04\" height=\"44.04\"\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_760_9988\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_760_9988\"\r\n result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_760_9988\">\r\n <rect width=\"18.2\" height=\"18.2\" fill=\"white\"\r\n transform=\"translate(13.6396 12.9004)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n\r\n <button *ngIf=\"!noData && !loading\" type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"20\" viewBox=\"0 0 19 20\" fill=\"none\">\r\n <path d=\"M7.53369 12.8441H15.0241L13.5568 14.3172L14.3587 15.1191L17.2024 12.2754L14.3587 9.43164L13.5568 10.2336L15.0241 11.7066H7.53369V12.8441Z\" fill=\"black\"/>\r\n <path d=\"M12.6526 8.8631V6.5881C12.653 6.51325 12.6387 6.43904 12.6104 6.36975C12.5821 6.30045 12.5404 6.23743 12.4877 6.18428L8.5064 2.20303C8.45326 2.15032 8.39023 2.10862 8.32094 2.08031C8.25164 2.05201 8.17744 2.03766 8.10259 2.0381H2.41509C2.1134 2.0381 1.82408 2.15794 1.61075 2.37126C1.39743 2.58458 1.27759 2.87391 1.27759 3.1756V16.8256C1.27759 17.1273 1.39743 17.4166 1.61075 17.6299C1.82408 17.8433 2.1134 17.9631 2.41509 17.9631H11.5151C11.8168 17.9631 12.1061 17.8433 12.3194 17.6299C12.5327 17.4166 12.6526 17.1273 12.6526 16.8256V15.6881H11.5151V16.8256H2.41509V3.1756H6.96509V6.5881C6.96509 6.88978 7.08493 7.17911 7.29826 7.39243C7.51158 7.60575 7.80091 7.7256 8.10259 7.7256H11.5151V8.8631H12.6526ZM8.10259 6.5881V3.40878L11.2819 6.5881H8.10259Z\" fill=\"black\"/>\r\n</svg><span class=\"ms-2\">Export</span> </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\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 <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata-table\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this eye test table</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!noData && !loading\" class=\"card-body\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"keyType ==='store'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('date')\"> Date <svg\r\n [ngClass]=\"sortedColumn === 'date' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'date' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th *ngIf=\"users?.role ==='superadmin'\" class=\"text-start\">\r\n RM Name\r\n </th>\r\n <th *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\" class=\"text-start\">\r\n Cluster Name\r\n </th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name <svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID <svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th *ngIf=\"this.typeValue ==='remote'\" class=\"text-start\">Engagement ID</th>\r\n <th *ngIf=\"this.typeValue !=='remote'\" class=\"text-start\">Optom ID</th>\r\n <th *ngIf=\"this.typeValue !=='remote'\" class=\"text-start\">Queue ID</th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('ComplianceScore')\">Tango Score <svg\r\n [ngClass]=\"sortedColumn === 'ComplianceScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'ComplianceScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n \r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('trustScore')\">Trust Score <svg\r\n [ngClass]=\"sortedColumn === 'trustScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'trustScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('coveredStepsAI')\">Steps Covered By AI <svg\r\n [ngClass]=\"sortedColumn === 'coveredStepsAI' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'coveredStepsAI' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n\r\n <th *ngIf=\"this.typeValue !=='remote'\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('visitorsType')\">Visitor Type <svg\r\n [ngClass]=\"sortedColumn === 'visitorsType' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'visitorsType' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n <th class=\"text-start\">Test Duration</th>\r\n <th class=\"text-start\" *ngIf=\"this.typeValue !=='remote'\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('comment')\">Eye Test Status <svg\r\n [ngClass]=\"sortedColumn === 'comment' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'comment' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('subComment')\">Comments <svg\r\n [ngClass]=\"sortedColumn === 'subComment' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'subComment' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('auditStatus')\">Audit Status <svg\r\n [ngClass]=\"sortedColumn === 'auditStatus' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'auditStatus' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\">Audited By</th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.date | date:'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"users?.role === 'superadmin'\">\r\n <ng-container *ngIf=\"obj?.RMName\">\r\n <!-- Split and show the first value -->\r\n {{ obj.RMName.split(',')[0] }}\r\n\r\n <!-- Show +N badge if more values exist -->\r\n <span *ngIf=\"obj.RMName.split(',').length > 1\" class=\"badge badge-light-default ms-2\">\r\n +{{ obj.RMName.split(',').length - 1 }}\r\n </span>\r\n </ng-container>\r\n</td>\r\n\r\n <td *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\">\r\n <ng-container *ngIf=\"obj?.clusterName\">\r\n {{ obj.clusterName.split(',')[0] }}\r\n <span *ngIf=\"obj.clusterName.split(',').length > 1\" class=\"badge badge-light-default ms-2\">\r\n +{{ obj.clusterName.split(',').length - 1 }}\r\n </span>\r\n </ng-container>\r\n \r\n \r\n </td>\r\n <td>{{obj?.storeName}}</td>\r\n <td>{{obj?.storeId}}</td>\r\n <td *ngIf=\"this.typeValue ==='remote'\" class=\"engage-text\">{{obj?.engagementId}}</td>\r\n <td *ngIf=\"this.typeValue !=='remote'\">{{obj?.optumId ? obj?.optumId :''}}\r\n </td>\r\n <td *ngIf=\"this.typeValue !=='remote'\" class=\"engage-text\">{{obj?.queueId ?\r\n obj?.queueId:''}}</td>\r\n <td>\r\n {{ obj?.complianceScore ?? '--' }}\r\n</td>\r\n <td>{{obj?.trustScore ?? '--'}}</td>\r\n <td>{{obj?.coveredStepsAI ? obj?.coveredStepsAI:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"this.typeValue !=='remote'\">{{obj?.visitorsType ?\r\n obj?.visitorsType:'--'}}</td>\r\n <td>{{obj?.min ? obj?.min :'0'}} mins {{obj?.sec ?\r\n obj?.sec:'0'}} secs</td>\r\n <td *ngIf=\"this.typeValue !=='remote'\">\r\n <span \r\n class=\"badge\" \r\n [ngClass]=\"obj?.comment ? 'badge-light-danger' : 'badge-light-success'\">\r\n {{ obj?.comment ? 'Fake' : 'Genuine' }}\r\n </span>\r\n</td>\r\n <td>{{obj?.subComment ? obj?.subComment:'--'}}</td>\r\n <td><span class=\"badge badge-light-primary\"\r\n *ngIf=\"obj?.auditStatus ==='Yet-to-Audit'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-warning\"\r\n *ngIf=\"obj?.auditStatus ==='Re-Audited'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-success\"\r\n *ngIf=\"obj?.auditStatus ==='Audited'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-info\"\r\n *ngIf=\"obj?.auditStatus ==='In-Progress'\">{{obj?.auditStatus}}</span>\r\n </td>\r\n <td>{{obj?.auditedBy?obj?.auditedBy:\"-\"}}</td>\r\n <td class=\"cursor-pointer\" (click)=\"eyeTestView(obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"keyType ==='rm'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('RMName')\"> RM Name <svg\r\n [ngClass]=\"sortedColumn === 'RMName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'RMName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterCount')\"> Clusters Count <svg\r\n [ngClass]=\"sortedColumn === 'clusterCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('storesCount')\">Stores Count <svg\r\n [ngClass]=\"sortedColumn === 'storesCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storesCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n Total Tango AI Files\r\n </th>\r\n <th class=\"text-start\">\r\n Trust Audit Completed \r\n </th>\r\n <th class=\"text-start\">\r\n Tango Score \r\n </th>\r\n <th class=\"text-start\">\r\n Trust Score \r\n </th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.RMName ? obj?.RMName:'--'}}</td>\r\n <td>{{obj?.clusterCount ? obj?.clusterCount:'--'}}</td>\r\n <td>{{obj?.storesCount ? obj?.storesCount:'--'}}</td>\r\n <td>{{obj?.totalFiles ?? '--'}}</td>\r\n <td>{{obj?.completedFiles ?? '--'}}</td>\r\n <td>{{obj.complianceScore ?? '--'}}\r\n \r\n</td>\r\n<td>\r\n {{ obj?.trustScore ?? '--' }}\r\n</td>\r\n <td class=\"cursor-pointer\" (click)=\"typeVal('cluster',obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"keyType ==='cluster'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n \r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterName')\"> Clusters Name <svg\r\n [ngClass]=\"sortedColumn === 'clusterName' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('storesCount')\">Stores Count <svg\r\n [ngClass]=\"sortedColumn === 'storesCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storesCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n Total Tango AI Files\r\n </th>\r\n <th class=\"text-start\">\r\n Trust Audit Completed\r\n </th>\r\n <th class=\"text-start\">\r\n Tango Score\r\n </th>\r\n <th class=\"text-start\">\r\n Trust Score\r\n </th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.clusterName ? obj?.clusterName:'--'}}</td>\r\n <td>{{obj?.storesCount ? obj?.storesCount:'--'}}</td>\r\n <td>{{obj?.totalFiles ?? '--'}}</td>\r\n <td>{{obj?.completedFiles ?? '--'}}</td>\r\n <td>\r\n {{ obj?.complianceScore ?? '--' }}\r\n</td>\r\n<td>\r\n {{ obj?.trustScore ?? '--' }}\r\n</td>\r\n <td class=\"cursor-pointer\" (click)=\"typeVal('store',obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-footer\" *ngIf=\"!noData && !loading\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"offset\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n</div>", styles: [":host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}table th,table td{height:44px!important;padding:12px 24px!important;gap:12px;align-self:stretch}table th{border-bottom:1px solid var(--Gray-200, #EAECF0)!important;background:var(--Gray-50, #F9FAFB)!important;color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500!important;line-height:18px}table td{color:var(--Gray-900, #667085);font-size:14px!important;font-weight:500!important;line-height:20px}.bottom-border td{border-bottom:1px solid var(--Gray-200, #EAECF0)!important}.rotate{rotate:180deg;transition:1s}.engage-text{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;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}.dashed{border-radius:4px;border:1px dashed var(--Error-500, #F04438)!important;background:var(--Error-25, #FFFBFA)}.dashed-desc{color:var(--Error-600, #3F4254)!important;font-size:14px;font-weight:600;line-height:24px}.card-header,.header{color:var(--Gray-900, #101828);font-size:20px!important;font-style:normal;font-weight:700;line-height:30px}.sub-header{color:var(--Gray-700, #344054);font-size:14px!important;font-style:normal;font-weight:600;line-height:20px}.ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.text-value{color:var(--Black, #101828);font-size:24px;font-weight:600;line-height:32px}.text-sub{color:var(--Error-600, #667085)!important;font-size:16px;font-weight:600;line-height:18px}.test-sub1{color:var(--Gray-800, #1D2939);font-size:12px;font-weight:400;line-height:18px}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "component", type: i9.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "label", "data"], outputs: ["itemChange"] }, { kind: "component", type: i10.CustomSelectComponent, selector: "lib-stores-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "component", type: i11.GroupSelectComponent, selector: "lib-group-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
870
876
  }
871
877
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EyeTestComponent, decorators: [{
872
878
  type: Component,
873
- args: [{ selector: "lib-eye-test", template: "<div class=\"card mb-2\">\r\n <div *ngIf=\"loading1\" 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>\r\n <form *ngIf=\"!loading1\" [formGroup]=\"eyeTestForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 mt-7 mb-3\">\r\n <div class=\"row px-3\">\r\n <!-- <div class=\"col-md-12\">\r\n <div class=\"row\"> -->\r\n <div class=\"col-3 mb-0\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 230px !important;\" type=\"text\"\r\n matInput ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\" [alwaysShowCalendars]=\"false\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"false\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedDateRange\" [ngModelOptions]=\"{standalone: true}\"\r\n (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\"\r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div [ngClass]=\"eyeTestForm.get('type')?.value ==='remote' ? 'col-2 mb-4' : 'col-2 mb-4'\" class=\"col-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"type\"\r\n (itemChange)=\"typeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <div *ngIf=\"eyeTestForm.get('type')?.value !=='remote'\" class=\"col-1 mb-4\">\r\n <lib-reactive-select formControlName=\"auditType\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"auditType\"\r\n (itemChange)=\"auditTypeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <!-- </div>\r\n </div> -->\r\n <div *ngIf=\"users?.role ==='superadmin'\" class=\"col-md-3\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('RmList')?.value?.length)\">\r\n Select RM\r\n </div>\r\n <lib-group-select [items]=\"RmList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'userName'\"\r\n [idField]=\"'userName'\" (selected)=\"onRmSelect($event)\" [selectedValues]=\"eyeTestForm.get('RmList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n \r\n </div>\r\n <div *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\" class=\"col-md-3\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('ClusterList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n <lib-group-select [items]=\"ClusterList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'clusterName'\"\r\n [idField]=\"'clusterName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"eyeTestForm.get('ClusterList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-3\">\r\n \r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"eyeTestForm.get('storeList')?.value\"></lib-stores-select>\r\n \r\n </div>\r\n </div>\r\n <div [ngClass]=\"eyeTestForm.get('type')?.value ==='remote' ? 'col-2' : 'col-2'\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"complianceScore\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"typePercentageArray\" (itemChange)=\"typePercentageChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div *ngIf=\"\" class=\"col-md-2\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"nearAddition\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"nearAdditionArray\" (itemChange)=\"nearAdditionChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div *ngIf=\"eyeTestForm.get('type')?.value !=='remote'\" class=\"col-md-2\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"category\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"categoryArray\" (itemChange)=\"categoryTypeChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div \r\n *ngIf=\"users?.role\" \r\n class=\"text-end\"\r\n [ngClass]=\"getApplyButtonClass(users?.role, eyeTestForm.get('type')?.value)\"\r\n>\r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-sm btn-primary py-3\">\r\n <span>Apply</span>\r\n </a>\r\n</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n <div *ngIf=\"showEyeTest\" class=\"ms-6 mb-3\">\r\n\r\n <h3 class=\"card-title dashed w-100 row\">\r\n <span class=\"col-10 title-text py-3\"><span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\r\n viewBox=\"0 0 32 32\" fill=\"none\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_235_24234)\">\r\n <path\r\n d=\"M16 13.3335V16.0002M16 18.6668H16.0067M22.6667 16.0002C22.6667 19.6821 19.6819 22.6668 16 22.6668C12.3181 22.6668 9.33337 19.6821 9.33337 16.0002C9.33337 12.3183 12.3181 9.3335 16 9.3335C19.6819 9.3335 22.6667 12.3183 22.6667 16.0002Z\"\r\n stroke=\"#D92D20\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_235_24234\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(8 8)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span><span class=\"dashed-desc\">Eye test video preview is available for 30 days. Audit data\r\n remains accessible, but videos will not be retained beyond this period.</span></span>\r\n <span class=\"col-2 pt-2 text-end cursor-pointer\" (click)=\"closeEyeTest()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <path d=\"M25 15L15 25M15 15L25 25\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </h3>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<!-- <div class=\"card my-3\">\r\n <div class=\"card-header border-0 py-1\">\r\n \r\n </div>\r\n</div> -->\r\n\r\n<div class=\"row\">\r\n <div *ngIf=\"users?.role ==='superadmin' && keyType ==='rm'\" class=\"col\">\r\n <div class=\"card p-2\">\r\n <div class=\"card-header ellipse1 min-h-55px py-1 px-3 d-flex justify-content-between align-items-center\">\r\n <h5 class=\"card-title my-0\">Regional Managers</h5>\r\n <span class=\"text-value\">{{RmListData ?? '--'}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card mt-5 p-2\">\r\n <div class=\"card-header ellipse1 min-h-55px py-1 px-3 d-flex justify-content-between align-items-center\">\r\n <h5 class=\"card-title my-0\">Clusters</h5>\r\n <span class=\"text-value\">{{groups?.length ?? '--'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"users?.role ==='superadmin' && keyType !=='rm' || users?.role ==='admin'\" class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Clusters</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ groups?.length ?? '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Total Tango AI Files</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.totalFiles ?? '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Trust Audit Completed</h5>\r\n </div>\r\n <div class=\"card-body py-3 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.completedFiles ?? '-' }}</span>\r\n\r\n </div>\r\n <div class=\"card-footer py-0 border-0 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-sub\">{{ (eyeTestCardData?.completedRatio ?? '-') + '%' }} <span\r\n class=\"test-sub\">Completed</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Tango Score</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.tangoScore ?? '-' }}</span>\r\n </div>\r\n <div class=\"card-footer py-0 border-0 d-flex justify-content-center align-items-center\">\r\n <span>\r\n <svg *ngIf=\"eyeTestCardData?.trend\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\" stroke-width=\"1.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg *ngIf=\"!eyeTestCardData?.trend\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_760_9776)\">\r\n <path d=\"M11.575 9L6.82495 4.25L4.32495 6.75L0.574951 3M11.575 9H8.57495M11.575 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_760_9776\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0.0749512)\" />\r\n </clipPath>\r\n </defs>\r\n </svg> \r\n <span class=\"text-sub ms-2\">{{ eyeTestCardData?.tangoScoreTrend !== null \r\n ? (getAbsValue(eyeTestCardData.tangoScoreTrend) | number:'1.0-0':'en-US') + '%' \r\n : '-' }}\r\n <span\r\n class=\"test-sub1\">vs previous week</span></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Trust Score</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ (eyeTestCardData?.trustScore && eyeTestCardData?.trustScore !== 'NA' \r\n ? eyeTestCardData.trustScore + '%' \r\n : 'NA') }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"card mt-3\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"users?.role === 'superadmin' && keyType ==='rm'\" class=\"title-text mb-2\">\r\n Audit Summary\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary\">{{ totalItems }} Total</span>\r\n </span>\r\n\r\n <!-- Admin + cluster present \u2192 RM Summary -->\r\n <div class=\"d-flex\">\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='cluster' && users?.role === 'superadmin'\" (click)=\"typeVal1('rm','')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n 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\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"users?.role === 'admin' && keyType ==='cluster' || users?.role === 'superadmin' && keyType ==='cluster'\" class=\"title-text my-4 mb-2\">\r\n RM Summary\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary text-capitalize\">{{ eyeTestData[0]?.RMName ? eyeTestData[0]?.RMName : '' }}</span>\r\n </span>\r\n </div>\r\n\r\n <!-- All other cases \u2192 Eye Test -->\r\n <div class=\"d-flex \">\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='store' && (users?.role === 'superadmin')\"\r\n (click)=\"typeVal1('cluster',this.rmEmail)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='store' && (users?.role === 'admin')\"\r\n (click)=\"typeVal1('cluster',this.groups)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"!(users?.role === 'superadmin' && keyType ==='rm') && !(users?.role === 'superadmin' && keyType ==='cluster') \r\n && !(users?.role === 'admin' && keyType ==='cluster')\" class=\"title-text my-4 mb-2\">\r\n Eye Test\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary\">{{ totalItems }} Total</span>\r\n </span>\r\n </div>\r\n <span *ngIf=\"users?.role ==='superadmin' && keyType ==='rm'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n <span *ngIf=\"users?.role ==='admin' && keyType ==='cluster'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n <span *ngIf=\"users?.role ==='user' && keyType ==='store'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input (change)=\"searchData()\" [(ngModel)]=\"searchValue\" type=\"text\" class=\"form-control ps-14 me-2\" autocomplete=\"off\"\r\n [placeholder]=\"\r\n keyType === 'rm'\r\n ? 'Search by RMName'\r\n : keyType === 'cluster'\r\n ? 'Search by Cluster'\r\n : 'Search'\r\n \" />\r\n\r\n\r\n <span class=\"cursor-pointer\" *ngIf=\"users?.role ==='superadmin'\" (click)=\"settingsView()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"45\" height=\"46\"\r\n viewBox=\"0 0 45 46\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_760_9988)\">\r\n <rect x=\"2.71973\" y=\"1.98047\" width=\"40.04\" height=\"40.04\" rx=\"7.28\" fill=\"white\" />\r\n <rect x=\"3.17473\" y=\"2.43547\" width=\"39.13\" height=\"39.13\" rx=\"6.825\" stroke=\"#D0D5DD\"\r\n stroke-width=\"0.91\" />\r\n <g clip-path=\"url(#clip0_760_9988)\">\r\n <path\r\n d=\"M22.7396 24.2749C23.9961 24.2749 25.0146 23.2563 25.0146 21.9999C25.0146 20.7434 23.9961 19.7249 22.7396 19.7249C21.4832 19.7249 20.4646 20.7434 20.4646 21.9999C20.4646 23.2563 21.4832 24.2749 22.7396 24.2749Z\"\r\n stroke=\"#344054\" stroke-width=\"1.5197\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M28.3513 24.2749C28.2503 24.5036 28.2202 24.7573 28.2648 25.0033C28.3094 25.2493 28.4267 25.4763 28.6015 25.655L28.647 25.7005C28.788 25.8414 28.8999 26.0087 28.9762 26.1928C29.0526 26.3769 29.0919 26.5743 29.0919 26.7736C29.0919 26.9729 29.0526 27.1703 28.9762 27.3544C28.8999 27.5385 28.788 27.7058 28.647 27.8466C28.5062 27.9876 28.3389 28.0995 28.1548 28.1758C27.9707 28.2522 27.7733 28.2914 27.574 28.2914C27.3747 28.2914 27.1773 28.2522 26.9932 28.1758C26.8091 28.0995 26.6418 27.9876 26.5009 27.8466L26.4554 27.8011C26.2767 27.6263 26.0497 27.509 25.8037 27.4644C25.5577 27.4198 25.304 27.4499 25.0753 27.5509C24.851 27.647 24.6597 27.8066 24.525 28.0101C24.3902 28.2135 24.3179 28.4519 24.3169 28.696V28.8249C24.3169 29.2271 24.1572 29.6129 23.8727 29.8973C23.5883 30.1817 23.2025 30.3415 22.8003 30.3415C22.398 30.3415 22.0123 30.1817 21.7278 29.8973C21.4434 29.6129 21.2836 29.2271 21.2836 28.8249V28.7566C21.2777 28.5056 21.1965 28.2622 21.0504 28.058C20.9044 27.8538 20.7003 27.6982 20.4646 27.6115C20.2359 27.5106 19.9822 27.4805 19.7362 27.5251C19.4902 27.5697 19.2632 27.687 19.0844 27.8618L19.0389 27.9073C18.8981 28.0483 18.7308 28.1602 18.5467 28.2365C18.3626 28.3128 18.1652 28.3521 17.9659 28.3521C17.7666 28.3521 17.5692 28.3128 17.3851 28.2365C17.201 28.1602 17.0337 28.0483 16.8929 27.9073C16.7519 27.7664 16.64 27.5992 16.5637 27.415C16.4873 27.2309 16.448 27.0336 16.448 26.8342C16.448 26.6349 16.4873 26.4376 16.5637 26.2535C16.64 26.0693 16.7519 25.9021 16.8929 25.7612L16.9384 25.7157C17.1132 25.537 17.2305 25.31 17.2751 25.064C17.3197 24.818 17.2896 24.5643 17.1886 24.3355C17.0925 24.1112 16.9329 23.92 16.7294 23.7852C16.526 23.6505 16.2876 23.5782 16.0435 23.5772H15.9146C15.5124 23.5772 15.1266 23.4174 14.8422 23.133C14.5577 22.8486 14.3979 22.4628 14.3979 22.0605C14.3979 21.6583 14.5577 21.2725 14.8422 20.9881C15.1266 20.7037 15.5124 20.5439 15.9146 20.5439H15.9829C16.2339 20.538 16.4773 20.4568 16.6815 20.3107C16.8857 20.1646 17.0413 19.9605 17.1279 19.7249C17.2289 19.4961 17.259 19.2424 17.2144 18.9964C17.1698 18.7504 17.0525 18.5234 16.8777 18.3447L16.8322 18.2992C16.6912 18.1583 16.5793 17.9911 16.503 17.807C16.4267 17.6228 16.3874 17.4255 16.3874 17.2262C16.3874 17.0268 16.4267 16.8295 16.503 16.6454C16.5793 16.4612 16.6912 16.294 16.8322 16.1531C16.9731 16.0121 17.1403 15.9002 17.3244 15.8239C17.5086 15.7476 17.7059 15.7083 17.9052 15.7083C18.1046 15.7083 18.3019 15.7476 18.486 15.8239C18.6702 15.9002 18.8374 16.0121 18.9783 16.1531L19.0238 16.1986C19.2025 16.3734 19.4295 16.4907 19.6755 16.5353C19.9215 16.5799 20.1752 16.5498 20.4039 16.4489H20.4646C20.6889 16.3527 20.8802 16.1931 21.0149 15.9897C21.1497 15.7862 21.222 15.5478 21.2229 15.3038V15.1749C21.2229 14.7726 21.3827 14.3869 21.6672 14.1024C21.9516 13.818 22.3374 13.6582 22.7396 13.6582C23.1419 13.6582 23.5276 13.818 23.8121 14.1024C24.0965 14.3869 24.2563 14.7726 24.2563 15.1749V15.2431C24.2573 15.4871 24.3296 15.7256 24.4643 15.929C24.599 16.1325 24.7903 16.2921 25.0146 16.3882C25.2433 16.4891 25.4971 16.5193 25.7431 16.4747C25.9891 16.4301 26.2161 16.3128 26.3948 16.138L26.4403 16.0925C26.5811 15.9514 26.7484 15.8396 26.9325 15.7632C27.1167 15.6869 27.314 15.6476 27.5133 15.6476C27.7126 15.6476 27.91 15.6869 28.0941 15.7632C28.2782 15.8396 28.4455 15.9514 28.5864 16.0925C28.7274 16.2333 28.8392 16.4006 28.9156 16.5847C28.9919 16.7688 29.0312 16.9662 29.0312 17.1655C29.0312 17.3648 28.9919 17.5622 28.9156 17.7463C28.8392 17.9304 28.7274 18.0977 28.5864 18.2385L28.5409 18.284C28.366 18.4628 28.2488 18.6898 28.2042 18.9358C28.1596 19.1818 28.1897 19.4355 28.2906 19.6642V19.7249C28.3867 19.9492 28.5464 20.1404 28.7498 20.2752C28.9533 20.4099 29.1917 20.4822 29.4357 20.4832H29.5646C29.9669 20.4832 30.3526 20.643 30.6371 20.9274C30.9215 21.2119 31.0813 21.5976 31.0813 21.9999C31.0813 22.4021 30.9215 22.7879 30.6371 23.0723C30.3526 23.3567 29.9669 23.5165 29.5646 23.5165H29.4964C29.2523 23.5175 29.0139 23.5898 28.8105 23.7246C28.607 23.8593 28.4474 24.0506 28.3513 24.2749Z\"\r\n stroke=\"#344054\" stroke-width=\"1.5197\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_760_9988\" x=\"0.719727\" y=\"0.980469\" width=\"44.04\" height=\"44.04\"\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_760_9988\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_760_9988\"\r\n result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_760_9988\">\r\n <rect width=\"18.2\" height=\"18.2\" fill=\"white\"\r\n transform=\"translate(13.6396 12.9004)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n\r\n <button *ngIf=\"!noData && !loading\" type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"20\" viewBox=\"0 0 19 20\" fill=\"none\">\r\n <path d=\"M7.53369 12.8441H15.0241L13.5568 14.3172L14.3587 15.1191L17.2024 12.2754L14.3587 9.43164L13.5568 10.2336L15.0241 11.7066H7.53369V12.8441Z\" fill=\"black\"/>\r\n <path d=\"M12.6526 8.8631V6.5881C12.653 6.51325 12.6387 6.43904 12.6104 6.36975C12.5821 6.30045 12.5404 6.23743 12.4877 6.18428L8.5064 2.20303C8.45326 2.15032 8.39023 2.10862 8.32094 2.08031C8.25164 2.05201 8.17744 2.03766 8.10259 2.0381H2.41509C2.1134 2.0381 1.82408 2.15794 1.61075 2.37126C1.39743 2.58458 1.27759 2.87391 1.27759 3.1756V16.8256C1.27759 17.1273 1.39743 17.4166 1.61075 17.6299C1.82408 17.8433 2.1134 17.9631 2.41509 17.9631H11.5151C11.8168 17.9631 12.1061 17.8433 12.3194 17.6299C12.5327 17.4166 12.6526 17.1273 12.6526 16.8256V15.6881H11.5151V16.8256H2.41509V3.1756H6.96509V6.5881C6.96509 6.88978 7.08493 7.17911 7.29826 7.39243C7.51158 7.60575 7.80091 7.7256 8.10259 7.7256H11.5151V8.8631H12.6526ZM8.10259 6.5881V3.40878L11.2819 6.5881H8.10259Z\" fill=\"black\"/>\r\n</svg><span class=\"ms-2\">Export</span> </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\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 <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata-table\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this eye test table</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!noData && !loading\" class=\"card-body\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"keyType ==='store'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('date')\"> Date <svg\r\n [ngClass]=\"sortedColumn === 'date' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'date' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th *ngIf=\"users?.role ==='superadmin'\" class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('RMName')\"> RM Name <svg\r\n [ngClass]=\"sortedColumn === 'RMName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'RMName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\" class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterName')\"> Cluster Name <svg\r\n [ngClass]=\"sortedColumn === 'clusterName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name <svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID <svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th *ngIf=\"this.typeValue ==='remote'\" class=\"text-start\">Engagement ID</th>\r\n <th *ngIf=\"this.typeValue !=='remote'\" class=\"text-start\">Optom ID</th>\r\n <th *ngIf=\"this.typeValue !=='remote'\" class=\"text-start\">Queue ID</th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('complianceScore')\">Tango Score <svg\r\n [ngClass]=\"sortedColumn === 'complianceScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'complianceScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n \r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('trustScore')\">Trust Score <svg\r\n [ngClass]=\"sortedColumn === 'trustScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'trustScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('coveredStepsAI')\">Steps Covered By AI <svg\r\n [ngClass]=\"sortedColumn === 'coveredStepsAI' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'coveredStepsAI' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n\r\n <th *ngIf=\"this.typeValue !=='remote'\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('visitorsType')\">Visitor Type <svg\r\n [ngClass]=\"sortedColumn === 'visitorsType' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'visitorsType' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n <th class=\"text-start\">Test Duration</th>\r\n <th class=\"text-start\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('comment')\">Eye Test Status <svg\r\n [ngClass]=\"sortedColumn === 'comment' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'comment' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('subComment')\">Comments <svg\r\n [ngClass]=\"sortedColumn === 'subComment' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'subComment' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('auditStatus')\">Audit Status <svg\r\n [ngClass]=\"sortedColumn === 'auditStatus' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'auditStatus' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\"><span class=\"cursor-pointer\" (click)=\"onSort('auditedBy')\">Audited By <svg\r\n [ngClass]=\"sortedColumn === 'auditedBy' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'auditedBy' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.date | date:'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"users?.role ==='superadmin'\">{{obj?.RMName}}</td>\r\n <td *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\">{{obj?.clusterName}}</td>\r\n <td>{{obj?.storeName}}</td>\r\n <td>{{obj?.storeId}}</td>\r\n <td *ngIf=\"this.typeValue ==='remote'\" class=\"engage-text\">{{obj?.engagementId}}</td>\r\n <td *ngIf=\"this.typeValue !=='remote'\">{{obj?.optumId ? obj?.optumId :''}}\r\n </td>\r\n <td *ngIf=\"this.typeValue !=='remote'\" class=\"engage-text\">{{obj?.queueId ?\r\n obj?.queueId:''}}</td>\r\n <td>\r\n {{ obj?.complianceScore ?? '--' }}\r\n</td>\r\n <td>{{obj?.trustScore ?? '--'}}</td>\r\n <td>{{obj?.coveredStepsAI ? obj?.coveredStepsAI:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"this.typeValue !=='remote'\">{{obj?.visitorsType ?\r\n obj?.visitorsType:'--'}}</td>\r\n <td>{{obj?.min ? obj?.min :'0'}} mins {{obj?.sec ?\r\n obj?.sec:'0'}} secs</td>\r\n <td *ngIf=\"this.typeValue !=='remote'\">\r\n <span \r\n class=\"badge\" \r\n [ngClass]=\"obj?.comment ? 'badge-light-danger' : 'badge-light-success'\">\r\n {{ obj?.comment ? 'Fake' : 'Genuine' }}\r\n </span>\r\n</td>\r\n <td>{{obj?.subComment ? obj?.subComment:'--'}}</td>\r\n <td><span class=\"badge badge-light-primary\"\r\n *ngIf=\"obj?.auditStatus ==='Yet-to-Audit'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-warning\"\r\n *ngIf=\"obj?.auditStatus ==='Re-Audited'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-success\"\r\n *ngIf=\"obj?.auditStatus ==='Audited'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-info\"\r\n *ngIf=\"obj?.auditStatus ==='In-Progress'\">{{obj?.auditStatus}}</span>\r\n </td>\r\n <td>{{obj?.auditedBy?obj?.auditedBy:\"-\"}}</td>\r\n <td class=\"cursor-pointer\" (click)=\"eyeTestView(obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"keyType ==='rm'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('RMName')\"> RM Name <svg\r\n [ngClass]=\"sortedColumn === 'RMName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'RMName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterCount')\"> Clusters Count <svg\r\n [ngClass]=\"sortedColumn === 'clusterCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('storesCount')\">Stores Count <svg\r\n [ngClass]=\"sortedColumn === 'storesCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storesCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('totalFiles')\">Total Tango AI Files <svg\r\n [ngClass]=\"sortedColumn === 'totalFiles' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'totalFiles' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('completedFiles')\">Trust Audit Completed <svg\r\n [ngClass]=\"sortedColumn === 'completedFiles' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'completedFiles' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('complianceScore')\">Tango Score <svg\r\n [ngClass]=\"sortedColumn === 'complianceScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'complianceScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('trustScore')\">Trust Score <svg\r\n [ngClass]=\"sortedColumn === 'trustScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'trustScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.RMName ? obj?.RMName:'--'}}</td>\r\n <td>{{obj?.clusterCount ? obj?.clusterCount:'--'}}</td>\r\n <td>{{obj?.storesCount ? obj?.storesCount:'--'}}</td>\r\n <td>{{obj?.totalFiles ?? '--'}}</td>\r\n <td>{{obj?.completedFiles ?? '--'}}</td>\r\n <td>{{obj.complianceScore ?? '--'}}\r\n \r\n</td>\r\n<td>\r\n {{ obj?.trustScore ?? '--' }}\r\n</td>\r\n <td class=\"cursor-pointer\" (click)=\"typeVal('cluster',obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"keyType ==='cluster'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n \r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterName')\"> Clusters Name <svg\r\n [ngClass]=\"sortedColumn === 'clusterName' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('storesCount')\">Stores Count <svg\r\n [ngClass]=\"sortedColumn === 'storesCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storesCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('totalFiles')\">Total Tango AI Files <svg\r\n [ngClass]=\"sortedColumn === 'totalFiles' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'totalFiles' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('completedFiles')\">Trust Audit Completed <svg\r\n [ngClass]=\"sortedColumn === 'completedFiles' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'completedFiles' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('complianceScore')\">Tango Score <svg\r\n [ngClass]=\"sortedColumn === 'complianceScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'complianceScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('trustScore')\">Trust Score <svg\r\n [ngClass]=\"sortedColumn === 'trustScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'trustScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.clusterName ? obj?.clusterName:'--'}}</td>\r\n <td>{{obj?.storesCount ? obj?.storesCount:'--'}}</td>\r\n <td>{{obj?.totalFiles ?? '--'}}</td>\r\n <td>{{obj?.completedFiles ?? '--'}}</td>\r\n <td>\r\n {{ obj?.complianceScore ?? '--' }}\r\n</td>\r\n<td>\r\n {{ obj?.trustScore ?? '--' }}\r\n</td>\r\n <td class=\"cursor-pointer\" (click)=\"typeVal('store',obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-footer\" *ngIf=\"!noData && !loading\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"offset\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n</div>", styles: [":host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}table th,table td{height:44px!important;padding:12px 24px!important;gap:12px;align-self:stretch}table th{border-bottom:1px solid var(--Gray-200, #EAECF0)!important;background:var(--Gray-50, #F9FAFB)!important;color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500!important;line-height:18px}table td{color:var(--Gray-900, #667085);font-size:14px!important;font-weight:500!important;line-height:20px}.bottom-border td{border-bottom:1px solid var(--Gray-200, #EAECF0)!important}.rotate{rotate:180deg;transition:1s}.engage-text{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;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}.dashed{border-radius:4px;border:1px dashed var(--Error-500, #F04438)!important;background:var(--Error-25, #FFFBFA)}.dashed-desc{color:var(--Error-600, #3F4254)!important;font-size:14px;font-weight:600;line-height:24px}.card-header,.header{color:var(--Gray-900, #101828);font-size:20px!important;font-style:normal;font-weight:700;line-height:30px}.sub-header{color:var(--Gray-700, #344054);font-size:14px!important;font-style:normal;font-weight:600;line-height:20px}.ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.text-value{color:var(--Black, #101828);font-size:24px;font-weight:600;line-height:32px}.text-sub{color:var(--Error-600, #667085)!important;font-size:16px;font-weight:600;line-height:18px}.test-sub1{color:var(--Gray-800, #1D2939);font-size:12px;font-weight:400;line-height:18px}\n"] }]
879
+ args: [{ selector: "lib-eye-test", template: "<div class=\"card mb-2\">\r\n <div *ngIf=\"loading1\" 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>\r\n <form *ngIf=\"!loading1\" [formGroup]=\"eyeTestForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 mt-7 mb-3\">\r\n <div class=\"row px-3\">\r\n <!-- <div class=\"col-md-12\">\r\n <div class=\"row\"> -->\r\n <div class=\"col-3 mb-0\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 230px !important;\" type=\"text\"\r\n matInput ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\" [alwaysShowCalendars]=\"false\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"false\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedDateRange\" [ngModelOptions]=\"{standalone: true}\"\r\n (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\"\r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div [ngClass]=\"eyeTestForm.get('type')?.value ==='remote' ? 'col-2 mb-4' : 'col-2 mb-4'\" class=\"col-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"type\"\r\n (itemChange)=\"typeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <div *ngIf=\"eyeTestForm.get('type')?.value !=='remote'\" class=\"col-1 mb-4\">\r\n <lib-reactive-select formControlName=\"auditType\" [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"auditType\"\r\n (itemChange)=\"auditTypeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <!-- </div>\r\n </div> -->\r\n <div *ngIf=\"users?.role ==='superadmin'\" class=\"col-md-3\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('RmList')?.value?.length)\">\r\n Select RM\r\n </div>\r\n <lib-group-select [items]=\"RmList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'userName'\"\r\n [idField]=\"'userName'\" (selected)=\"onRmSelect($event)\" [selectedValues]=\"eyeTestForm.get('RmList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n \r\n </div>\r\n <div *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\" class=\"col-md-3\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('ClusterList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n <lib-group-select [items]=\"ClusterList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'clusterName'\"\r\n [idField]=\"'clusterName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"eyeTestForm.get('ClusterList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-3\">\r\n \r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(eyeTestForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"eyeTestForm.get('storeList')?.value\"></lib-stores-select>\r\n \r\n </div>\r\n </div>\r\n <div [ngClass]=\"eyeTestForm.get('type')?.value ==='remote' ? 'col-2' : 'col-2'\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"complianceScore\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"typePercentageArray\" (itemChange)=\"typePercentageChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div *ngIf=\"\" class=\"col-md-2\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"nearAddition\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"nearAdditionArray\" (itemChange)=\"nearAdditionChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div *ngIf=\"eyeTestForm.get('type')?.value !=='remote'\" class=\"col-md-2\">\r\n <div class=\"mb-4\">\r\n <lib-reactive-select formControlName=\"category\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"categoryArray\" (itemChange)=\"categoryTypeChange($event)\"></lib-reactive-select>\r\n </div>\r\n </div>\r\n <div \r\n *ngIf=\"users?.role\" \r\n class=\"text-end\"\r\n [ngClass]=\"getApplyButtonClass(users?.role, eyeTestForm.get('type')?.value)\"\r\n>\r\n <a (click)=\"onSubmit();\" type=\"submit\" class=\"btn btn-sm btn-primary py-3\">\r\n <span>Apply</span>\r\n </a>\r\n</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n <div *ngIf=\"showEyeTest\" class=\"ms-6 mb-3\">\r\n\r\n <h3 class=\"card-title dashed w-100 row\">\r\n <span class=\"col-10 title-text py-3\"><span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\r\n viewBox=\"0 0 32 32\" fill=\"none\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_235_24234)\">\r\n <path\r\n d=\"M16 13.3335V16.0002M16 18.6668H16.0067M22.6667 16.0002C22.6667 19.6821 19.6819 22.6668 16 22.6668C12.3181 22.6668 9.33337 19.6821 9.33337 16.0002C9.33337 12.3183 12.3181 9.3335 16 9.3335C19.6819 9.3335 22.6667 12.3183 22.6667 16.0002Z\"\r\n stroke=\"#D92D20\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_235_24234\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(8 8)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span><span class=\"dashed-desc\">Eye test video preview is available for 30 days. Audit data\r\n remains accessible, but videos will not be retained beyond this period.</span></span>\r\n <span class=\"col-2 pt-2 text-end cursor-pointer\" (click)=\"closeEyeTest()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <path d=\"M25 15L15 25M15 15L25 25\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </h3>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<!-- <div class=\"card my-3\">\r\n <div class=\"card-header border-0 py-1\">\r\n \r\n </div>\r\n</div> -->\r\n\r\n<div class=\"row\">\r\n <div *ngIf=\"users?.role ==='superadmin' && keyType ==='rm'\" class=\"col\">\r\n <div class=\"card p-2\">\r\n <div class=\"card-header ellipse1 min-h-55px py-1 px-3 d-flex justify-content-between align-items-center\">\r\n <h5 class=\"card-title my-0\">Regional Managers</h5>\r\n <span class=\"text-value\">{{RmListData ?? '--'}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card mt-5 p-2\">\r\n <div class=\"card-header ellipse1 min-h-55px py-1 px-3 d-flex justify-content-between align-items-center\">\r\n <h5 class=\"card-title my-0\">Clusters</h5>\r\n <span class=\"text-value\">{{groups?.length ?? '--'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"users?.role ==='superadmin' && keyType !=='rm' || users?.role ==='admin'\" class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Clusters</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ groups?.length ?? '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Total Tango AI Files</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.totalFiles ?? '-' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Trust Audit Completed</h5>\r\n </div>\r\n <div class=\"card-body py-3 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.completedFiles ?? '-' }}</span>\r\n\r\n </div>\r\n <div class=\"card-footer py-0 border-0 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-sub\">{{ (eyeTestCardData?.completedRatio ?? '-') + '%' }} <span\r\n class=\"test-sub\">Completed</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Tango Score</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ eyeTestCardData?.tangoScore ?? '-' }}</span>\r\n </div>\r\n <div class=\"card-footer py-0 border-0 d-flex justify-content-center align-items-center\">\r\n <span>\r\n <svg *ngIf=\"eyeTestCardData?.trend\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\" stroke-width=\"1.5\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg *ngIf=\"!eyeTestCardData?.trend\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_760_9776)\">\r\n <path d=\"M11.575 9L6.82495 4.25L4.32495 6.75L0.574951 3M11.575 9H8.57495M11.575 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_760_9776\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0.0749512)\" />\r\n </clipPath>\r\n </defs>\r\n </svg> \r\n <span class=\"text-sub ms-2\">{{ eyeTestCardData?.tangoScoreTrend !== null \r\n ? (getAbsValue(eyeTestCardData.tangoScoreTrend) | number:'1.0-0':'en-US') + '%' \r\n : '-' }}\r\n <span\r\n class=\"test-sub1\">vs previous week</span></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"card h-100 p-2\">\r\n <div class=\"card-header ellipse1 min-h-45px py-1 px-3 d-flex justify-content-center align-items-center\">\r\n <h5 class=\"card-title\">Trust Score</h5>\r\n </div>\r\n <div class=\"card-body py-7 d-flex justify-content-center align-items-center\">\r\n <span class=\"text-value\">{{ (eyeTestCardData?.trustScore && eyeTestCardData?.trustScore !== 'NA' \r\n ? eyeTestCardData.trustScore + '%' \r\n : 'NA') }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"card mt-3\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"users?.role === 'superadmin' && keyType ==='rm'\" class=\"title-text mb-2\">\r\n Audit Summary\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary\">{{ totalItems }} Total</span>\r\n </span>\r\n\r\n <!-- Admin + cluster present \u2192 RM Summary -->\r\n <div class=\"d-flex\">\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='cluster' && users?.role === 'superadmin'\" (click)=\"typeVal1('rm','')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n 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\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"users?.role === 'admin' && keyType ==='cluster' || users?.role === 'superadmin' && keyType ==='cluster'\" class=\"title-text my-4 mb-2\">\r\n RM Summary\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary text-capitalize\">{{ eyeTestData[0]?.RMName ? eyeTestData[0]?.RMName : '' }}</span>\r\n </span>\r\n </div>\r\n\r\n <!-- All other cases \u2192 Eye Test -->\r\n <div class=\"d-flex \">\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='store' && (users?.role === 'superadmin')\"\r\n (click)=\"typeVal1('cluster',this.rmEmail)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"me-2 cursor-pointer\" *ngIf=\"keyType ==='store' && (users?.role === 'admin')\"\r\n (click)=\"typeVal1('cluster',this.groups)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_745_12128)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8334 21.0003H16.1667M16.1667 21.0003L22.0001 26.8337M16.1667 21.0003L22.0001 15.167\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_745_12128\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_745_12128\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_745_12128\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"!(users?.role === 'superadmin' && keyType ==='rm') && !(users?.role === 'superadmin' && keyType ==='cluster') \r\n && !(users?.role === 'admin' && keyType ==='cluster')\" class=\"title-text my-4 mb-2\">\r\n Eye Test\r\n <span *ngIf=\"!loading\" class=\"badge badge-light-primary\">{{ totalItems }} Total</span>\r\n </span>\r\n </div>\r\n <span *ngIf=\"users?.role ==='superadmin' && keyType ==='rm'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n <span *ngIf=\"users?.role ==='admin' && keyType ==='cluster'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n <span *ngIf=\"users?.role ==='user' && keyType ==='store'\" class=\"text-sub my-2\">Based on {{ headDate | date: 'MMM d' }} - {{\r\n headDateEnd | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input (change)=\"searchData()\" [(ngModel)]=\"searchValue\" type=\"text\" class=\"form-control ps-14 me-2\" autocomplete=\"off\"\r\n [placeholder]=\"\r\n keyType === 'rm'\r\n ? 'Search by RMName'\r\n : keyType === 'cluster'\r\n ? 'Search by Cluster'\r\n : 'Search'\r\n \" />\r\n\r\n\r\n <span class=\"cursor-pointer\" *ngIf=\"users?.role ==='superadmin'\" (click)=\"settingsView()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"45\" height=\"46\"\r\n viewBox=\"0 0 45 46\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_760_9988)\">\r\n <rect x=\"2.71973\" y=\"1.98047\" width=\"40.04\" height=\"40.04\" rx=\"7.28\" fill=\"white\" />\r\n <rect x=\"3.17473\" y=\"2.43547\" width=\"39.13\" height=\"39.13\" rx=\"6.825\" stroke=\"#D0D5DD\"\r\n stroke-width=\"0.91\" />\r\n <g clip-path=\"url(#clip0_760_9988)\">\r\n <path\r\n d=\"M22.7396 24.2749C23.9961 24.2749 25.0146 23.2563 25.0146 21.9999C25.0146 20.7434 23.9961 19.7249 22.7396 19.7249C21.4832 19.7249 20.4646 20.7434 20.4646 21.9999C20.4646 23.2563 21.4832 24.2749 22.7396 24.2749Z\"\r\n stroke=\"#344054\" stroke-width=\"1.5197\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M28.3513 24.2749C28.2503 24.5036 28.2202 24.7573 28.2648 25.0033C28.3094 25.2493 28.4267 25.4763 28.6015 25.655L28.647 25.7005C28.788 25.8414 28.8999 26.0087 28.9762 26.1928C29.0526 26.3769 29.0919 26.5743 29.0919 26.7736C29.0919 26.9729 29.0526 27.1703 28.9762 27.3544C28.8999 27.5385 28.788 27.7058 28.647 27.8466C28.5062 27.9876 28.3389 28.0995 28.1548 28.1758C27.9707 28.2522 27.7733 28.2914 27.574 28.2914C27.3747 28.2914 27.1773 28.2522 26.9932 28.1758C26.8091 28.0995 26.6418 27.9876 26.5009 27.8466L26.4554 27.8011C26.2767 27.6263 26.0497 27.509 25.8037 27.4644C25.5577 27.4198 25.304 27.4499 25.0753 27.5509C24.851 27.647 24.6597 27.8066 24.525 28.0101C24.3902 28.2135 24.3179 28.4519 24.3169 28.696V28.8249C24.3169 29.2271 24.1572 29.6129 23.8727 29.8973C23.5883 30.1817 23.2025 30.3415 22.8003 30.3415C22.398 30.3415 22.0123 30.1817 21.7278 29.8973C21.4434 29.6129 21.2836 29.2271 21.2836 28.8249V28.7566C21.2777 28.5056 21.1965 28.2622 21.0504 28.058C20.9044 27.8538 20.7003 27.6982 20.4646 27.6115C20.2359 27.5106 19.9822 27.4805 19.7362 27.5251C19.4902 27.5697 19.2632 27.687 19.0844 27.8618L19.0389 27.9073C18.8981 28.0483 18.7308 28.1602 18.5467 28.2365C18.3626 28.3128 18.1652 28.3521 17.9659 28.3521C17.7666 28.3521 17.5692 28.3128 17.3851 28.2365C17.201 28.1602 17.0337 28.0483 16.8929 27.9073C16.7519 27.7664 16.64 27.5992 16.5637 27.415C16.4873 27.2309 16.448 27.0336 16.448 26.8342C16.448 26.6349 16.4873 26.4376 16.5637 26.2535C16.64 26.0693 16.7519 25.9021 16.8929 25.7612L16.9384 25.7157C17.1132 25.537 17.2305 25.31 17.2751 25.064C17.3197 24.818 17.2896 24.5643 17.1886 24.3355C17.0925 24.1112 16.9329 23.92 16.7294 23.7852C16.526 23.6505 16.2876 23.5782 16.0435 23.5772H15.9146C15.5124 23.5772 15.1266 23.4174 14.8422 23.133C14.5577 22.8486 14.3979 22.4628 14.3979 22.0605C14.3979 21.6583 14.5577 21.2725 14.8422 20.9881C15.1266 20.7037 15.5124 20.5439 15.9146 20.5439H15.9829C16.2339 20.538 16.4773 20.4568 16.6815 20.3107C16.8857 20.1646 17.0413 19.9605 17.1279 19.7249C17.2289 19.4961 17.259 19.2424 17.2144 18.9964C17.1698 18.7504 17.0525 18.5234 16.8777 18.3447L16.8322 18.2992C16.6912 18.1583 16.5793 17.9911 16.503 17.807C16.4267 17.6228 16.3874 17.4255 16.3874 17.2262C16.3874 17.0268 16.4267 16.8295 16.503 16.6454C16.5793 16.4612 16.6912 16.294 16.8322 16.1531C16.9731 16.0121 17.1403 15.9002 17.3244 15.8239C17.5086 15.7476 17.7059 15.7083 17.9052 15.7083C18.1046 15.7083 18.3019 15.7476 18.486 15.8239C18.6702 15.9002 18.8374 16.0121 18.9783 16.1531L19.0238 16.1986C19.2025 16.3734 19.4295 16.4907 19.6755 16.5353C19.9215 16.5799 20.1752 16.5498 20.4039 16.4489H20.4646C20.6889 16.3527 20.8802 16.1931 21.0149 15.9897C21.1497 15.7862 21.222 15.5478 21.2229 15.3038V15.1749C21.2229 14.7726 21.3827 14.3869 21.6672 14.1024C21.9516 13.818 22.3374 13.6582 22.7396 13.6582C23.1419 13.6582 23.5276 13.818 23.8121 14.1024C24.0965 14.3869 24.2563 14.7726 24.2563 15.1749V15.2431C24.2573 15.4871 24.3296 15.7256 24.4643 15.929C24.599 16.1325 24.7903 16.2921 25.0146 16.3882C25.2433 16.4891 25.4971 16.5193 25.7431 16.4747C25.9891 16.4301 26.2161 16.3128 26.3948 16.138L26.4403 16.0925C26.5811 15.9514 26.7484 15.8396 26.9325 15.7632C27.1167 15.6869 27.314 15.6476 27.5133 15.6476C27.7126 15.6476 27.91 15.6869 28.0941 15.7632C28.2782 15.8396 28.4455 15.9514 28.5864 16.0925C28.7274 16.2333 28.8392 16.4006 28.9156 16.5847C28.9919 16.7688 29.0312 16.9662 29.0312 17.1655C29.0312 17.3648 28.9919 17.5622 28.9156 17.7463C28.8392 17.9304 28.7274 18.0977 28.5864 18.2385L28.5409 18.284C28.366 18.4628 28.2488 18.6898 28.2042 18.9358C28.1596 19.1818 28.1897 19.4355 28.2906 19.6642V19.7249C28.3867 19.9492 28.5464 20.1404 28.7498 20.2752C28.9533 20.4099 29.1917 20.4822 29.4357 20.4832H29.5646C29.9669 20.4832 30.3526 20.643 30.6371 20.9274C30.9215 21.2119 31.0813 21.5976 31.0813 21.9999C31.0813 22.4021 30.9215 22.7879 30.6371 23.0723C30.3526 23.3567 29.9669 23.5165 29.5646 23.5165H29.4964C29.2523 23.5175 29.0139 23.5898 28.8105 23.7246C28.607 23.8593 28.4474 24.0506 28.3513 24.2749Z\"\r\n stroke=\"#344054\" stroke-width=\"1.5197\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_760_9988\" x=\"0.719727\" y=\"0.980469\" width=\"44.04\" height=\"44.04\"\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_760_9988\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_760_9988\"\r\n result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_760_9988\">\r\n <rect width=\"18.2\" height=\"18.2\" fill=\"white\"\r\n transform=\"translate(13.6396 12.9004)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n\r\n <button *ngIf=\"!noData && !loading\" type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"20\" viewBox=\"0 0 19 20\" fill=\"none\">\r\n <path d=\"M7.53369 12.8441H15.0241L13.5568 14.3172L14.3587 15.1191L17.2024 12.2754L14.3587 9.43164L13.5568 10.2336L15.0241 11.7066H7.53369V12.8441Z\" fill=\"black\"/>\r\n <path d=\"M12.6526 8.8631V6.5881C12.653 6.51325 12.6387 6.43904 12.6104 6.36975C12.5821 6.30045 12.5404 6.23743 12.4877 6.18428L8.5064 2.20303C8.45326 2.15032 8.39023 2.10862 8.32094 2.08031C8.25164 2.05201 8.17744 2.03766 8.10259 2.0381H2.41509C2.1134 2.0381 1.82408 2.15794 1.61075 2.37126C1.39743 2.58458 1.27759 2.87391 1.27759 3.1756V16.8256C1.27759 17.1273 1.39743 17.4166 1.61075 17.6299C1.82408 17.8433 2.1134 17.9631 2.41509 17.9631H11.5151C11.8168 17.9631 12.1061 17.8433 12.3194 17.6299C12.5327 17.4166 12.6526 17.1273 12.6526 16.8256V15.6881H11.5151V16.8256H2.41509V3.1756H6.96509V6.5881C6.96509 6.88978 7.08493 7.17911 7.29826 7.39243C7.51158 7.60575 7.80091 7.7256 8.10259 7.7256H11.5151V8.8631H12.6526ZM8.10259 6.5881V3.40878L11.2819 6.5881H8.10259Z\" fill=\"black\"/>\r\n</svg><span class=\"ms-2\">Export</span> </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\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 <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata-table\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this eye test table</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!noData && !loading\" class=\"card-body\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"keyType ==='store'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('date')\"> Date <svg\r\n [ngClass]=\"sortedColumn === 'date' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'date' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th *ngIf=\"users?.role ==='superadmin'\" class=\"text-start\">\r\n RM Name\r\n </th>\r\n <th *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\" class=\"text-start\">\r\n Cluster Name\r\n </th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name <svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID <svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th *ngIf=\"this.typeValue ==='remote'\" class=\"text-start\">Engagement ID</th>\r\n <th *ngIf=\"this.typeValue !=='remote'\" class=\"text-start\">Optom ID</th>\r\n <th *ngIf=\"this.typeValue !=='remote'\" class=\"text-start\">Queue ID</th>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('ComplianceScore')\">Tango Score <svg\r\n [ngClass]=\"sortedColumn === 'ComplianceScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'ComplianceScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n \r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('trustScore')\">Trust Score <svg\r\n [ngClass]=\"sortedColumn === 'trustScore' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'trustScore' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('coveredStepsAI')\">Steps Covered By AI <svg\r\n [ngClass]=\"sortedColumn === 'coveredStepsAI' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'coveredStepsAI' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n\r\n <th *ngIf=\"this.typeValue !=='remote'\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('visitorsType')\">Visitor Type <svg\r\n [ngClass]=\"sortedColumn === 'visitorsType' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'visitorsType' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> </th>\r\n <th class=\"text-start\">Test Duration</th>\r\n <th class=\"text-start\" *ngIf=\"this.typeValue !=='remote'\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('comment')\">Eye Test Status <svg\r\n [ngClass]=\"sortedColumn === 'comment' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'comment' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\"><span class=\"cursor-pointer\"\r\n (click)=\"onSort('subComment')\">Comments <svg\r\n [ngClass]=\"sortedColumn === 'subComment' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'subComment' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('auditStatus')\">Audit Status <svg\r\n [ngClass]=\"sortedColumn === 'auditStatus' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'auditStatus' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th class=\"text-start\">Audited By</th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.date | date:'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"users?.role === 'superadmin'\">\r\n <ng-container *ngIf=\"obj?.RMName\">\r\n <!-- Split and show the first value -->\r\n {{ obj.RMName.split(',')[0] }}\r\n\r\n <!-- Show +N badge if more values exist -->\r\n <span *ngIf=\"obj.RMName.split(',').length > 1\" class=\"badge badge-light-default ms-2\">\r\n +{{ obj.RMName.split(',').length - 1 }}\r\n </span>\r\n </ng-container>\r\n</td>\r\n\r\n <td *ngIf=\"users?.role ==='superadmin' || users?.role ==='admin'\">\r\n <ng-container *ngIf=\"obj?.clusterName\">\r\n {{ obj.clusterName.split(',')[0] }}\r\n <span *ngIf=\"obj.clusterName.split(',').length > 1\" class=\"badge badge-light-default ms-2\">\r\n +{{ obj.clusterName.split(',').length - 1 }}\r\n </span>\r\n </ng-container>\r\n \r\n \r\n </td>\r\n <td>{{obj?.storeName}}</td>\r\n <td>{{obj?.storeId}}</td>\r\n <td *ngIf=\"this.typeValue ==='remote'\" class=\"engage-text\">{{obj?.engagementId}}</td>\r\n <td *ngIf=\"this.typeValue !=='remote'\">{{obj?.optumId ? obj?.optumId :''}}\r\n </td>\r\n <td *ngIf=\"this.typeValue !=='remote'\" class=\"engage-text\">{{obj?.queueId ?\r\n obj?.queueId:''}}</td>\r\n <td>\r\n {{ obj?.complianceScore ?? '--' }}\r\n</td>\r\n <td>{{obj?.trustScore ?? '--'}}</td>\r\n <td>{{obj?.coveredStepsAI ? obj?.coveredStepsAI:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"this.typeValue !=='remote'\">{{obj?.visitorsType ?\r\n obj?.visitorsType:'--'}}</td>\r\n <td>{{obj?.min ? obj?.min :'0'}} mins {{obj?.sec ?\r\n obj?.sec:'0'}} secs</td>\r\n <td *ngIf=\"this.typeValue !=='remote'\">\r\n <span \r\n class=\"badge\" \r\n [ngClass]=\"obj?.comment ? 'badge-light-danger' : 'badge-light-success'\">\r\n {{ obj?.comment ? 'Fake' : 'Genuine' }}\r\n </span>\r\n</td>\r\n <td>{{obj?.subComment ? obj?.subComment:'--'}}</td>\r\n <td><span class=\"badge badge-light-primary\"\r\n *ngIf=\"obj?.auditStatus ==='Yet-to-Audit'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-warning\"\r\n *ngIf=\"obj?.auditStatus ==='Re-Audited'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-success\"\r\n *ngIf=\"obj?.auditStatus ==='Audited'\">{{obj?.auditStatus}}</span>\r\n <span class=\"badge badge-light-info\"\r\n *ngIf=\"obj?.auditStatus ==='In-Progress'\">{{obj?.auditStatus}}</span>\r\n </td>\r\n <td>{{obj?.auditedBy?obj?.auditedBy:\"-\"}}</td>\r\n <td class=\"cursor-pointer\" (click)=\"eyeTestView(obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"keyType ==='rm'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('RMName')\"> RM Name <svg\r\n [ngClass]=\"sortedColumn === 'RMName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'RMName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterCount')\"> Clusters Count <svg\r\n [ngClass]=\"sortedColumn === 'clusterCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('storesCount')\">Stores Count <svg\r\n [ngClass]=\"sortedColumn === 'storesCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storesCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n Total Tango AI Files\r\n </th>\r\n <th class=\"text-start\">\r\n Trust Audit Completed \r\n </th>\r\n <th class=\"text-start\">\r\n Tango Score \r\n </th>\r\n <th class=\"text-start\">\r\n Trust Score \r\n </th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.RMName ? obj?.RMName:'--'}}</td>\r\n <td>{{obj?.clusterCount ? obj?.clusterCount:'--'}}</td>\r\n <td>{{obj?.storesCount ? obj?.storesCount:'--'}}</td>\r\n <td>{{obj?.totalFiles ?? '--'}}</td>\r\n <td>{{obj?.completedFiles ?? '--'}}</td>\r\n <td>{{obj.complianceScore ?? '--'}}\r\n \r\n</td>\r\n<td>\r\n {{ obj?.trustScore ?? '--' }}\r\n</td>\r\n <td class=\"cursor-pointer\" (click)=\"typeVal('cluster',obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"keyType ==='cluster'\" class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n \r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('clusterName')\"> Clusters Name <svg\r\n [ngClass]=\"sortedColumn === 'clusterName' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clusterName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n\r\n <th class=\"text-start\">\r\n <span class=\"cursor-pointer\" (click)=\"onSort('storesCount')\">Stores Count <svg\r\n [ngClass]=\"sortedColumn === 'storesCount' && sortOrder === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storesCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"text-start\">\r\n Total Tango AI Files\r\n </th>\r\n <th class=\"text-start\">\r\n Trust Audit Completed\r\n </th>\r\n <th class=\"text-start\">\r\n Tango Score\r\n </th>\r\n <th class=\"text-start\">\r\n Trust Score\r\n </th>\r\n <th class=\"text-start\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of eyeTestData; let i=index;\">\r\n <td>{{obj?.clusterName ? obj?.clusterName:'--'}}</td>\r\n <td>{{obj?.storesCount ? obj?.storesCount:'--'}}</td>\r\n <td>{{obj?.totalFiles ?? '--'}}</td>\r\n <td>{{obj?.completedFiles ?? '--'}}</td>\r\n <td>\r\n {{ obj?.complianceScore ?? '--' }}\r\n</td>\r\n<td>\r\n {{ obj?.trustScore ?? '--' }}\r\n</td>\r\n <td class=\"cursor-pointer\" (click)=\"typeVal('store',obj)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\r\n <path\r\n d=\"M0.833496 8.00016C0.833496 8.00016 4.16683 1.3335 10.0002 1.3335C15.8335 1.3335 19.1668 8.00016 19.1668 8.00016C19.1668 8.00016 15.8335 14.6668 10.0002 14.6668C4.16683 14.6668 0.833496 8.00016 0.833496 8.00016Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0002 10.5002C11.3809 10.5002 12.5002 9.38087 12.5002 8.00016C12.5002 6.61945 11.3809 5.50016 10.0002 5.50016C8.61945 5.50016 7.50016 6.61945 7.50016 8.00016C7.50016 9.38087 8.61945 10.5002 10.0002 10.5002Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-footer\" *ngIf=\"!noData && !loading\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"offset\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n</div>", styles: [":host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}table th,table td{height:44px!important;padding:12px 24px!important;gap:12px;align-self:stretch}table th{border-bottom:1px solid var(--Gray-200, #EAECF0)!important;background:var(--Gray-50, #F9FAFB)!important;color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500!important;line-height:18px}table td{color:var(--Gray-900, #667085);font-size:14px!important;font-weight:500!important;line-height:20px}.bottom-border td{border-bottom:1px solid var(--Gray-200, #EAECF0)!important}.rotate{rotate:180deg;transition:1s}.engage-text{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;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}.dashed{border-radius:4px;border:1px dashed var(--Error-500, #F04438)!important;background:var(--Error-25, #FFFBFA)}.dashed-desc{color:var(--Error-600, #3F4254)!important;font-size:14px;font-weight:600;line-height:24px}.card-header,.header{color:var(--Gray-900, #101828);font-size:20px!important;font-style:normal;font-weight:700;line-height:30px}.sub-header{color:var(--Gray-700, #344054);font-size:14px!important;font-style:normal;font-weight:600;line-height:20px}.ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.text-value{color:var(--Black, #101828);font-size:24px;font-weight:600;line-height:32px}.text-sub{color:var(--Error-600, #667085)!important;font-size:16px;font-weight:600;line-height:18px}.test-sub1{color:var(--Gray-800, #1D2939);font-size:12px;font-weight:400;line-height:18px}\n"] }]
874
880
  }], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.FormBuilder }, { type: i3.TraxService }, { type: i4.EyeTestAuditService }, { type: i5.Router }, { type: i0.ChangeDetectorRef }, { type: i1.GlobalStateService }, { type: i6.ToastService }, { type: i5.ActivatedRoute }] });
875
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXllLXRlc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9leWUtdGVzdC1hdWRpdC9leWUtdGVzdC9leWUtdGVzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2V5ZS10ZXN0LWF1ZGl0L2V5ZS10ZXN0L2V5ZS10ZXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUdoRixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxpQkFBaUIsQ0FBQztBQUd6QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7OztBQVMxQyxNQUFNLE9BQU8sZ0JBQWdCO0lBaURqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBQ0E7SUF4RFYsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLFdBQVcsQ0FBWTtJQUN2QixpQkFBaUIsR0FBUSxFQUFFLENBQUM7SUFDNUIsWUFBWSxDQUFNO0lBQ2xCLFlBQVksQ0FBTTtJQUNsQixhQUFhLEdBQVEsRUFBRSxDQUFDO0lBQ3hCLFdBQVcsR0FBUSxFQUFFLENBQUM7SUFDdEIsTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUNqQixVQUFVLENBQU07SUFDUixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNqQyxNQUFNLEdBQVEsRUFBRSxDQUFDO0lBQ2pCLFNBQVMsR0FBVSxFQUFFLENBQUM7SUFDdEIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDZixXQUFX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RUFBRSxJQUFJLEVBQUUsT0FBTztnQkFDdEIsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXO2FBQzNCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO1lBQ3BELFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDbkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVksRUFBRSxJQUFZO1FBQzVDLE1BQU0sWUFBWSxHQUFRO1lBQ3hCLFVBQVUsRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFDM0QsS0FBSyxFQUFFLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsWUFBWTtZQUN2RCxJQUFJLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxhQUFhO1NBQ3ZELENBQUM7UUFFRixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUM7SUFDN0MsQ0FBQzt3R0FoOEJVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLG9EQ2hCN0IsMCtsRUFxMUJNOzs0RkRyMEJPLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IFwiZGF5anMvbG9jYWxlL2VuXCI7XHJcbmltcG9ydCB1dGMgZnJvbSBcImRheWpzL3BsdWdpbi91dGNcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBUcmF4U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy90cmF4LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXllVGVzdEF1ZGl0U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9leWUtdGVzdC1hdWRpdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1leWUtdGVzdFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXllLXRlc3QuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL2V5ZS10ZXN0LmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFeWVUZXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGRheWpzID0gZGF5anM7XHJcbiAgZXllVGVzdEZvcm06IEZvcm1Hcm91cDtcclxuICBzZWxlY3RlZERhdGVSYW5nZTogYW55ID0ge307XHJcbiAgc2VsZWN0ZWREYXRlOiBhbnk7XHJcbiAgaXNDdXN0b21EYXRlOiBhbnk7XHJcbiAgaGVhZGVyRmlsdGVyczogYW55ID0gW107XHJcbiAgQ2x1c3Rlckxpc3Q6IGFueSA9IFtdO1xyXG4gIHN0b3JlczogYW55ID0gW107XHJcbiAgY2xpZW50RGF0YTogYW55O1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdyb3VwczogYW55ID0gW107XHJcbiAgc3RvcmVMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIG5vRGF0YSA9IGZhbHNlO1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG4gIGV5ZVRlc3REYXRhOiBhbnk7XHJcbiAgdHlwZVZhbHVlOiBhbnk7XHJcbiAgdHlwZTogYW55ID0gW1xyXG4gICAgeyB2YWx1ZTogXCJwaHlzaWNhbFwiLCBsYWJlbDogXCJFeWUgVGVzdCBDb21wbGlhbmNlXCIgfSxcclxuICAgIHsgdmFsdWU6IFwicmVtb3RlXCIsIGxhYmVsOiBcIlJlbW90ZSBUZXN0IENvbXBsaWFuY2VcIiB9LFxyXG4gIF07XHJcbiAgYXVkaXRUeXBlOiBhbnkgPSBbXHJcbiAgICB7IGxhYmVsOiBcIkFsbFwiLCB2YWx1ZTogXCJhbGxcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJBZHVsdFwiLCB2YWx1ZTogXCJhZHVsdFwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIktpZFwiLCB2YWx1ZTogXCJraWRcIiB9LFxyXG4gIF07XHJcbiAgdHlwZVBlcmNlbnRhZ2VBcnJheTogYW55ID0gW1xyXG4gICAgeyBsYWJlbDogXCJBbGxcIiwgdmFsdWU6IG51bGwgfSxcclxuICAgIHsgbGFiZWw6IFwiTGVzcyB0aGFuIDUwJVwiLCB2YWx1ZTogXCI1MFwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIkxlc3MgdGhhbiA0MCVcIiwgdmFsdWU6IFwiNDBcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJMZXNzIHRoYW4gMzAlXCIsIHZhbHVlOiBcIjMwXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiTGVzcyB0aGFuIDIwJVwiLCB2YWx1ZTogXCIyMFwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIkxlc3MgdGhhbiAxMCVcIiwgdmFsdWU6IFwiMTBcIiB9LFxyXG4gIF07XHJcblxyXG4gIG5lYXJBZGRpdGlvbkFycmF5OiBhbnkgPSBbXHJcbiAgICB7IGxhYmVsOiBcIldpdGggTmVhciBBZGRpdGlvblwiLCB2YWx1ZTogXCJ3aXRoXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiV2l0aG91dCBOZWFyIEFkZGl0aW9uXCIsIHZhbHVlOiBcIndpdGhvdXRcIiB9LFxyXG4gIF07XHJcblxyXG4gIGNhdGVnb3J5QXJyYXk6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgbGFiZWw6IFwiR2VudWluZSBFeWUgVGVzdFwiLFxyXG4gICAgICB2YWx1ZTogXCJnZW51aW5lXCIsXHJcbiAgICB9LFxyXG4gICAgeyBsYWJlbDogXCJGYWtlIEV5ZSBUZXN0XCIsIHZhbHVlOiBcImZha2VcIiB9LFxyXG4gIF07XHJcbiAgc2hvd0V5ZVRlc3QgPSB0cnVlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHRyYXhTZXJ2aWNlOiBUcmF4U2VydmljZSxcclxuICAgIHByaXZhdGUgZXllU2VydmljZTogRXllVGVzdEF1ZGl0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0czogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICApIHtcclxuICAgIHRoaXMudHlwZVZhbHVlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChcInR5cGVWYWx1ZVwiKTtcclxuICB9XHJcbiAgaGVhZERhdGU6IGFueTtcclxuICBoZWFkRGF0ZUVuZDogYW55O1xyXG4gIHVzZXJzOiBhbnk7XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIGNsb3NlRXllVGVzdCgpIHtcclxuICAgIHRoaXMuc2hvd0V5ZVRlc3QgPSBmYWxzZTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGxldCB1c2VyaW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJcIik7XHJcbiAgICB0aGlzLnVzZXJzID0gdXNlcmluZm87XHJcbiAgICBpZiAoIXRoaXMudHlwZVZhbHVlKSB7XHJcbiAgICAgIHRoaXMudHlwZVZhbHVlID0gXCJwaHlzaWNhbFwiO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgY29uc3QgaXNWYWxpZERhdGUgPSBtID4gdGhpcy5kYXlqcygpO1xyXG4gICAgICByZXR1cm4gaXNWYWxpZERhdGUgPyBcImludmFsaWQtZGF0ZVwiIDogZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgc3RhcnREYXRlOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgXCJkYXlcIikuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSxcclxuICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5XCIpLmZvcm1hdChcIkRELU1NLVlZWVlcIiksXHJcbiAgICB9O1xyXG4gICAgbGV0IGhlYWRlckZpbHRlcnMgPSBKU09OLnBhcnNlKFxyXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwie31cIlxyXG4gICAgKTtcclxuICAgIGlmIChoZWFkZXJGaWx0ZXJzPy5kYXRlPy5zdGFydERhdGUgJiYgaGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlID0ge1xyXG4gICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXlqcyhcclxuICAgICAgICAgIGhlYWRlckZpbHRlcnMuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgICAgICBcIllZWVktTU0tRERcIlxyXG4gICAgICAgICkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSxcclxuICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKGhlYWRlckZpbHRlcnMuZGF0ZS5lbmREYXRlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KFxyXG4gICAgICAgICAgXCJERC1NTS1ZWVlZXCJcclxuICAgICAgICApLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcGFyYW1zICYmXHJcbiAgICAgICAgcGFyYW1zW1wiZnJvbURhdGVcIl0gJiZcclxuICAgICAgICBwYXJhbXNbXCJ0b0RhdGVcIl0gJiZcclxuICAgICAgICBwYXJhbXNbXCJ0eXBlVmFsdWVcIl1cclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy50eXBlVmFsdWUgPSBwYXJhbXNbXCJ0eXBlVmFsdWVcIl0gPyBwYXJhbXNbXCJ0eXBlVmFsdWVcIl0gOiBcInBoeXNpY2FsXCI7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlID0gdGhpcy5kYXlqcyhcclxuICAgICAgICAgIHBhcmFtc1tcImZyb21EYXRlXCJdLFxyXG4gICAgICAgICAgXCJZWVlZLU1NLUREXCJcclxuICAgICAgICApLmZvcm1hdChcIkRELU1NLVlZWVlcIik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlID0gdGhpcy5kYXlqcyhcclxuICAgICAgICAgIHBhcmFtc1tcInRvRGF0ZVwiXSxcclxuICAgICAgICAgIFwiWVlZWS1NTS1ERFwiXHJcbiAgICAgICAgKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvdHJheC9hdWRpdFwiXSwge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgZnJvbURhdGU6IHRoaXMuZGF5anMoXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUsXHJcbiAgICAgICAgICAgICAgXCJERC1NTS1ZWVlZXCJcclxuICAgICAgICAgICAgKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpLFxyXG4gICAgICAgICAgICB0b0RhdGU6IHRoaXMuZGF5anMoXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlLFxyXG4gICAgICAgICAgICAgIFwiREQtTU0tWVlZWVwiXHJcbiAgICAgICAgICAgICkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSxcclxuICAgICAgICAgICAgdHlwZVZhbHVlOiB0aGlzLnR5cGVWYWx1ZSA/IHRoaXMudHlwZVZhbHVlIDogXCJwaHlzaWNhbFwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgZGF0ZVRpbWUgPSB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZTtcclxuICAgIHRoaXMuaGVhZERhdGUgPSB0aGlzLmRheWpzKGRhdGVUaW1lLCBcIkRELU1NLVlZWVlcIikuZm9ybWF0KFwiTU1NLCBERFwiKTtcclxuICAgIHRoaXMuaGVhZERhdGVFbmQgPSB0aGlzLmRheWpzKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUsXHJcbiAgICAgIFwiREQtTU0tWVlZWVwiXHJcbiAgICApLmZvcm1hdChcIk1NTSBERCwgWVlZWVwiKTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJUeXBlXCIpPy5zZXRWYWx1ZSh0aGlzLnR5cGVWYWx1ZSk7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gbGV0IGRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJcIilcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnMgPSBkYXRhO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50KSB7XHJcbiAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnVzZXJzPy5yb2xlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwic3VwZXJhZG1pblwiOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFJtKCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImFkbWluXCI6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsR3JvdXBzKCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInVzZXJcIjpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxTdG9yZXMoKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJzICYmIHRoaXMudXNlcnM/LmNsaWVudElkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCA9IHRoaXMudXNlcnMuY2xpZW50SWQ7XHJcbiAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnVzZXJzPy5yb2xlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwic3VwZXJhZG1pblwiOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFJtKCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImFkbWluXCI6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsR3JvdXBzKCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInVzZXJcIjpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxTdG9yZXMoKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0QWJzVmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgPyBNYXRoLmFicyh2YWx1ZSkgOiAwO1xyXG4gIH1cclxuICAvLyBjbHVzdGVycyBvbGQgYXBpIHJlbW92ZWRcclxuICAvLyBnZXRBbGxHcm91cHMoKSB7XHJcbiAgLy8gICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNsdXN0ZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50LCBncm91cDogW10sIGNpdHk6IFtdIH0pLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gIC8vICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAvLyAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gIC8vICAgICAgICAgdGhpcy5DbHVzdGVyTGlzdCA9IHJlcy5kYXRhLmdyb3VwRGF0YVxyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gW11cclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG4gIGxvYWRpbmcxID0gdHJ1ZTtcclxuICAvLyBjbHVzdGVycyBuZXcgYXBpXHJcbiAgZ2V0QWxsR3JvdXBzKGV2ZW50PzogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcxID0gdHJ1ZTtcclxuICAgIGxldCBybUxpc3Q6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5DbHVzdGVyTGlzdCA9IFtdO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5SbUxpc3QpKSB7XHJcbiAgICAgIHRoaXMuZXllVGVzdEZvcm0udmFsdWUuUm1MaXN0LmZvckVhY2goKGVsOiBhbnkpID0+IHtcclxuICAgICAgICBybUxpc3QucHVzaChlbD8uZW1haWwpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGV2ZW50Py5tYXAoKGVsOiBhbnkpID0+IGVsPy5lbWFpbCkgfHwgW3RoaXMudXNlcnM/LmVtYWlsXTtcclxuICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50ID8gdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCA6IFwiXCIsXHJcbiAgICAgIHJtTGlzdDogcm1MaXN0Lmxlbmd0aCA+IDAgPyBybUxpc3QgOiBbdGhpcy51c2Vycz8uZW1haWxdLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZXllU2VydmljZS5nZXRDbHVzdGVycyhvYmopLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5DbHVzdGVyTGlzdCA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJDbHVzdGVyTGlzdFwiKT8uc2V0VmFsdWUodGhpcy5DbHVzdGVyTGlzdCk7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwcyA9IHRoaXMuQ2x1c3Rlckxpc3QubWFwKChlbDogYW55KSA9PiBlbC5jbHVzdGVyTmFtZSk7XHJcbiAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcxID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoXCJDbHVzdGVyIGZldGNoIGZhaWxlZDpcIiwgZXJyKTtcclxuICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gW107XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGNsaWVudERldGFpbHMoKSB7XHJcbiAgLy8gICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNsaWVudCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50IH0pLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLmNsaWVudERhdGEgPSByZXMuZGF0YS5yZXN1bHRcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuICBnZXRBbGxTdG9yZXMoKSB7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlXHJcbiAgICAgIC5nZXRTdG9yZXNsaXN0KHtcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQsXHJcbiAgICAgICAgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLFxyXG4gICAgICAgIGNpdHk6IFtdLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJzdG9yZUxpc3RcIik/LnNldFZhbHVlKHRoaXMuc3RvcmVMaXN0KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nMSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm9uU3VibWl0KCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gW107XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB0eXBlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiVHlwZVwiKT8uc2V0VmFsdWUoZXZlbnQpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS90cmF4L2F1ZGl0XCJdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgZnJvbURhdGU6IHRoaXMuZGF5anMoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSxcclxuICAgICAgICAgIFwiREQtTU0tWVlZWVwiXHJcbiAgICAgICAgKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpLFxyXG4gICAgICAgIHRvRGF0ZTogdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXHJcbiAgICAgICAgICBcIllZWVktTU0tRERcIlxyXG4gICAgICAgICksXHJcbiAgICAgICAgdHlwZVZhbHVlOiBldmVudCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIGF1ZGl0VHlwZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcImF1ZGl0VHlwZVwiKT8uc2V0VmFsdWUoZXZlbnQpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB0eXBlUGVyY2VudGFnZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcImNvbXBsaWFuY2VTY29yZVwiKT8uc2V0VmFsdWUoZXZlbnQpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIG5lYXJBZGRpdGlvbkNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIm5lYXJBZGRpdGlvblwiKT8uc2V0VmFsdWUoZXZlbnQpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIGNhdGVnb3J5VHlwZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcImNhdGVnb3J5XCIpPy5zZXRWYWx1ZShldmVudCk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgZGF0ZWNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuc3RhcnREYXRlICYmIGV2ZW50LmVuZERhdGUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlKS5pc1ZhbGlkKCkgJiZcclxuICAgICAgICB0aGlzLmRheWpzKGV2ZW50LmVuZERhdGUpLmlzVmFsaWQoKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSA9IHRoaXMuZGF5anMoXHJcbiAgICAgICAgICBldmVudC5zdGFydERhdGUsXHJcbiAgICAgICAgICBcIkRELU1NLVlZWVlcIlxyXG4gICAgICAgICkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUgPSB0aGlzLmRheWpzKFxyXG4gICAgICAgICAgZXZlbnQuZW5kRGF0ZSxcclxuICAgICAgICAgIFwiREQtTU0tWVlZWVwiXHJcbiAgICAgICAgKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmV5ZVRlc3RGb3JtXHJcbiAgICAgICAgICAuZ2V0KFwiZnJvbURhdGVcIilcclxuICAgICAgICAgID8uc2V0VmFsdWUodGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlICYmXHJcbiAgICAgICAgICB0aGlzLmRheWpzKHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlKS5pc1ZhbGlkKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaGVhZERhdGUgPSB0aGlzLmRheWpzKHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlKS5mb3JtYXQoXHJcbiAgICAgICAgICAgIFwiTU1NLCBERFwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV5ZVRlc3RGb3JtXHJcbiAgICAgICAgICAuZ2V0KFwidG9EYXRlXCIpXHJcbiAgICAgICAgICA/LnNldFZhbHVlKHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlICYmXHJcbiAgICAgICAgICB0aGlzLmRheWpzKHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSkuaXNWYWxpZCgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmhlYWREYXRlRW5kID0gdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUpLmZvcm1hdChcclxuICAgICAgICAgICAgXCJNTU0gREQsIFlZWVlcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS90cmF4L2F1ZGl0XCJdLCB7XHJcbiAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICBmcm9tRGF0ZTogdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUsXHJcbiAgICAgICAgICAgIHRvRGF0ZTogdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlLFxyXG4gICAgICAgICAgICB0eXBlVmFsdWU6IHRoaXMudHlwZVZhbHVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdGFydERhdGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlKS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9XHJcbiAgICAgICAgICBtID4gdGhpcy5kYXlqcygpIHx8IG0gPiB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZS5hZGQoNjAsIFwiZGF5c1wiKSk7XHJcbiAgICAgICAgcmV0dXJuIGlzVmFsaWREYXRlID8gXCJpbnZhbGlkLWRhdGVcIiA6IGZhbHNlO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRWYWxpZGF0aW9uKCkge1xyXG4gICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGRhdGUgaXMgYmVmb3JlIHllc3RlcmRheVxyXG4gICAgICByZXR1cm4gbS5pc0FmdGVyKHRoaXMuZGF5anMoKSwgXCJkYXlcIikgPyBcImludmFsaWQtZGF0ZVwiIDogZmFsc2U7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRUeXBlOiBhbnk7XHJcbiAgY3JlYXRlRm9ybSgpIHtcclxuICAgIGNvbnN0IGlzUmVtb3RlID0gdGhpcy5zZWxlY3RlZFR5cGUgPT09IFwicGh5c2ljYWxcIjsgLy8gb3IgaG93ZXZlciB5b3UncmUgZGV0ZXJtaW5pbmcgaXRcclxuXHJcbiAgICB0aGlzLmV5ZVRlc3RGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGZyb21EYXRlOiBbXHJcbiAgICAgICAgdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSwgXCJERC1NTS1ZWVlZXCIpLmZvcm1hdChcclxuICAgICAgICAgIFwiWVlZWS1NTS1ERFwiXHJcbiAgICAgICAgKSxcclxuICAgICAgXSxcclxuICAgICAgdG9EYXRlOiBbXHJcbiAgICAgICAgdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXHJcbiAgICAgICAgICBcIllZWVktTU0tRERcIlxyXG4gICAgICAgICksXHJcbiAgICAgIF0sXHJcbiAgICAgIHR5cGU6IHRoaXMudHlwZVZhbHVlLFxyXG4gICAgICBjb21wbGlhbmNlU2NvcmU6IFtudWxsXSxcclxuICAgICAgLi4uKGlzUmVtb3RlID8ge30gOiB7IGNhdGVnb3J5OiBbXCJnZW51aW5lXCJdIH0pLFxyXG4gICAgICBuZWFyQWRkaXRpb246IFtcIlwiXSxcclxuICAgICAgQ2x1c3Rlckxpc3Q6IFt0aGlzLmdyb3Vwc10sXHJcbiAgICAgIHN0b3JlTGlzdDogW3RoaXMuc3RvcmVzXSxcclxuICAgICAgUm1MaXN0OiBbdGhpcy5SbUxpc3RdLFxyXG4gICAgICAuLi4oaXNSZW1vdGUgPyB7fSA6IHsgYXVkaXRUeXBlOiBcImFsbFwiIH0pLCAvLyBDb25kaXRpb25hbGx5IGFkZCBhdWRpdFR5cGVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25ncm91cFNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcxID0gdHJ1ZTtcclxuICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiQ2x1c3Rlckxpc3RcIik/LnNldFZhbHVlKGV2ZW50KTtcclxuICAgIHRoaXMuZ3JvdXBzID0gZXZlbnQubWFwKChlbDogYW55KSA9PiBlbC5jbHVzdGVyTmFtZSk7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlXHJcbiAgICAgIC5nZXRTdG9yZXNsaXN0KHtcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgICBjbHVzdGVyczogdGhpcy5ncm91cHMsXHJcbiAgICAgICAgY2l0eTogW10sXHJcbiAgICAgIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhO1xyXG4gICAgICAgICAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcInN0b3JlTGlzdFwiKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcxID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMub25TdWJtaXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgb25TdG9yZVNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcInN0b3JlTGlzdFwiKT8uc2V0VmFsdWUoZXZlbnQpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIHNlYXJjaFZhbHVlOiBhbnkgPSBcIlwiO1xyXG4gIHNlYXJjaERhdGEoKSB7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZTtcclxuICAgIHRoaXMub25TdWJtaXQoKTtcclxuICB9XHJcblxyXG4gIHBhZ2luYXRpb25TaXplczogYW55W10gPSBbXTtcclxuICBwYWdlU2l6ZSA9IDEwO1xyXG4gIHNldFBhZ2luYXRpb25TaXplcygpIHtcclxuICAgIGlmICh0aGlzLnRvdGFsSXRlbXMgPiAxMCkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc107IC8vIEp1c3Qgb25lIG9wdGlvbiBpZiBsZXNzIHRoYW4gMTBcclxuICAgIH1cclxuICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2luYXRpb25TaXplc1swXTtcclxuICB9XHJcbiAgUm1MaXN0RGF0YTogYW55ID0gW107XHJcbiAga2V5VHlwZTogYW55O1xyXG4gIHJtRW1haWw6IGFueTtcclxuICAvLyB0eXBlVmFsKHZhbDogYW55LCBvYmo/OiBhbnkpIHtcclxuICAvLyAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgLy8gICB0aGlzLnNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAvLyAgIHRoaXMubGltaXQgPSAxMDtcclxuICAvLyAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAvLyAgIHRoaXMucGFnZVNpemUgPSAxMDtcclxuICAvLyAgIHRoaXMua2V5VHlwZSA9IHZhbDtcclxuICAvLyAgIHRoaXMucm1FbWFpbCA9IG9iaj8uUk1FbWFpbCA/IG9iaj8uUk1FbWFpbCA6IG9iajtcclxuICAvLyAgIC8vIPCflI0gZmluZCB0aGUgUk0gb2JqZWN0IGluIHlvdXIgUm1MaXN0IGFycmF5XHJcbiAgLy8gICAgaWYgKHRoaXMudXNlcnM/LnJvbGUgPT09IFwic3VwZXJhZG1pblwiICYmIHRoaXMuUm1MaXN0Py5sZW5ndGgpIHtcclxuICAvLyAgIHRoaXMuUm1MaXN0Py5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAvLyAgICAgaWYgKGVsZW1lbnQ/LmVtYWlsID09PSB0aGlzLnJtRW1haWwpIHtcclxuICAvLyAgICAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIlJtTGlzdFwiKT8uc2V0VmFsdWUoW2VsZW1lbnRdKTtcclxuICAvLyAgICAgICB0aGlzLm9uUm1TZWxlY3QoW2VsZW1lbnRdKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG4gIC8vICAgdGhpcy5ncm91cHMgPSBvYmo/LmNsdXN0ZXJOYW1lID8gW29iaj8uY2x1c3Rlck5hbWVdIDogdGhpcy5ncm91cHM7XHJcbiAgLy8gICAgaWYgKFxyXG4gIC8vICAgICB0aGlzLnVzZXJzPy5yb2xlID09PSBcImFkbWluXCIgJiZcclxuICAvLyAgICAgdGhpcy5DbHVzdGVyTGlzdD8ubGVuZ3RoICYmXHJcbiAgLy8gICAgIG9iaj8uY2x1c3Rlck5hbWVcclxuICAvLyAgICkge1xyXG4gIC8vICAgdGhpcy5DbHVzdGVyTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAvLyAgICAgaWYgKGVsZW1lbnQ/LmNsdXN0ZXJOYW1lID09PSB0aGlzLmdyb3Vwcykge1xyXG4gIC8vICAgICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiQ2x1c3Rlckxpc3RcIik/LnNldFZhbHVlKFtlbGVtZW50XSk7XHJcbiAgLy8gICAgICAgdGhpcy5vbmdyb3VwU2VsZWN0KFtlbGVtZW50XSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuICAvLyAgIHRoaXMuc29ydGVkQ29sdW1uID0gXCJkYXRlXCI7XHJcbiAgLy8gICBpZiAodGhpcy5ybUVtYWlsID09PSBcIlwiKSB0aGlzLm9uU3VibWl0KCk7XHJcbiAgLy8gfVxyXG4gIGRlbW9HcmFwaWNzOmFueTtcclxuICB0eXBlVmFsKHZhbDogYW55LCBvYmo/OiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKHZhbCwgb2JqKTtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMucGFnZVNpemUgPSAxMDtcclxuICAgIHRoaXMua2V5VHlwZSA9IHZhbDtcclxuICAgIHRoaXMuc29ydGVkQ29sdW1uID0gXCJkYXRlXCI7XHJcbnRoaXMuZGVtb0dyYXBpY3MgPSB0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLmF1ZGl0VHlwZTtcclxuaWYgKHRoaXMuZGVtb0dyYXBpY3MgPT09IFwiYWxsXCIpIHtcclxuICB0aGlzLmRlbW9HcmFwaWNzID0gW1wiYWR1bHRcIiwgXCJraWRcIl07XHJcbn1cclxuICAgIGlmICh0aGlzLnVzZXJzPy5yb2xlID09PSBcInN1cGVyYWRtaW5cIiAmJiB0aGlzLlJtTGlzdD8ubGVuZ3RoKVxyXG4gICAgICB0aGlzLnJtRW1haWwgPSBvYmo/LlJNRW1haWwgPyBvYmo/LlJNRW1haWwgOiBvYmo7XHJcbiAgICBcclxuICAgIHRoaXMuZ3JvdXBzID0gb2JqPy5jbHVzdGVyTmFtZSA/IFtvYmo/LmNsdXN0ZXJOYW1lXSA6IHRoaXMuZ3JvdXBzO1xyXG4gICAgXHJcbiAgICBsZXQgZm91bmRSTSA9IGZhbHNlO1xyXG4gICAgbGV0IGZvdW5kQ2x1c3RlciA9IGZhbHNlO1xyXG4gICAgaWYoKHRoaXMudXNlcnM/LnJvbGUgPT09IFwic3VwZXJhZG1pblwiIHx8IHRoaXMudXNlcnM/LnJvbGUgPT09IFwiYWRtaW5cIikgJiYgdmFsID09PVwic3RvcmVcIiAmJlxyXG4gICAgICAgIHRoaXMuQ2x1c3Rlckxpc3Q/Lmxlbmd0aCAmJlxyXG4gICAgICAgIG9iaj8uY2x1c3Rlck5hbWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5DbHVzdGVyTGlzdC5mb3JFYWNoKFxyXG4gICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBpZihlbGVtZW50Py5jbHVzdGVyTmFtZSA9PT0gb2JqLmNsdXN0ZXJOYW1lKXtcclxuICAgICAgICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiQ2x1c3Rlckxpc3RcIik/LnNldFZhbHVlKFtlbGVtZW50XSk7XHJcbiAgICAgICAgICB0aGlzLm9uZ3JvdXBTZWxlY3QoW2VsZW1lbnRdKTtcclxuICAgICAgICAgIGZvdW5kQ2x1c3RlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIGlmKCh0aGlzLnVzZXJzPy5yb2xlID09PSBcInN1cGVyYWRtaW5cIiB8fCB0aGlzLnVzZXJzPy5yb2xlID09PSBcImFkbWluXCIpICYmIHZhbCA9PT1cImNsdXN0ZXJcIiAmJlxyXG4gICAgICAgIHRoaXMuQ2x1c3Rlckxpc3Q/Lmxlbmd0aCAmJlxyXG4gICAgICAgIG9iaj8uY2x1c3Rlck5hbWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5DbHVzdGVyTGlzdC5mb3JFYWNoKFxyXG4gICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBpZihlbGVtZW50Py5jbHVzdGVyTmFtZSA9PT0gb2JqLmNsdXN0ZXJOYW1lKXtcclxuICAgICAgICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiQ2x1c3Rlckxpc3RcIik/LnNldFZhbHVlKFtlbGVtZW50XSk7XHJcbiAgICAgICAgICB0aGlzLm9uZ3JvdXBTZWxlY3QoW2VsZW1lbnRdKTtcclxuICAgICAgICAgIGZvdW5kQ2x1c3RlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSBSTSBzZWxlY3Rpb24gKG9ubHkgZm9yIHN1cGVyYWRtaW4pXHJcbiAgICBpZiAodGhpcy51c2Vycz8ucm9sZSA9PT0gXCJzdXBlcmFkbWluXCIgJiYgdmFsID09PVwiY2x1c3RlclwiICYmIHRoaXMuUm1MaXN0Py5sZW5ndGgpIHtcclxuICAgICB0aGlzLlJtTGlzdC5mb3JFYWNoKFxyXG4gICAgICAgIChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmKGVsZW1lbnQ/LmVtYWlsID09PSB0aGlzLnJtRW1haWwpIHtcclxuICAgICAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIlJtTGlzdFwiKT8uc2V0VmFsdWUoW2VsZW1lbnRdKTtcclxuICAgICAgICB0aGlzLm9uUm1TZWxlY3QoW2VsZW1lbnRdKTtcclxuICAgICAgICBmb3VuZFJNID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvLyDinIUgQ2x1c3RlciBzZWxlY3Rpb24gKG9ubHkgZm9yIGFkbWluKVxyXG5cclxuICAgIC8vIOKchSBTdWJtaXQgZmFsbGJhY2tcclxuICAgIGlmICghZm91bmRSTSAmJiAhZm91bmRDbHVzdGVyKSB7XHJcbiAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG50eXBlVmFsMSh2YWw6IGFueSwgb2JqPzogYW55KSB7XHJcbiAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICB0aGlzLnNlYXJjaFZhbHVlID0gXCJcIjtcclxuICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gIHRoaXMucGFnZVNpemUgPSAxMDtcclxuICB0aGlzLmtleVR5cGUgPSB2YWw7XHJcbiAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBcImRhdGVcIjtcclxuXHJcbiAgaWYgKHRoaXMudXNlcnM/LnJvbGUgPT09IFwic3VwZXJhZG1pblwiICYmIHRoaXMuUm1MaXN0Py5sZW5ndGgpIHtcclxuICAgIHRoaXMucm1FbWFpbCA9IG9iaj8uUk1FbWFpbCA/IG9iaj8uUk1FbWFpbCA6IG9iajtcclxuICB9XHJcblxyXG4gIC8vIHRoaXMuZ3JvdXBzID0gb2JqPy5jbHVzdGVyTmFtZSA/IFtvYmo/LmNsdXN0ZXJOYW1lXSA6IHRoaXMuZ3JvdXBzO1xyXG5cclxuICB0aGlzLmRlbW9HcmFwaWNzID0gdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5hdWRpdFR5cGU7XHJcbiAgaWYgKHRoaXMuZGVtb0dyYXBpY3MgPT09IFwiYWxsXCIpIHtcclxuICAgIHRoaXMuZGVtb0dyYXBpY3MgPSBbXCJhZHVsdFwiLCBcImtpZFwiXTtcclxuICB9XHJcbiAgdGhpcy5leWVUZXN0RGF0YSA9IFtdO1xyXG4gIGxldCBmb3VuZFJNID0gZmFsc2U7XHJcbiAgbGV0IGZvdW5kQ2x1c3RlciA9IGZhbHNlO1xyXG5cclxuICAvLyDinIUgQ2x1c3RlciAvIFN0b3JlXHJcbiAgaWYgKCh0aGlzLnVzZXJzPy5yb2xlID09PSBcInN1cGVyYWRtaW5cIiB8fCB0aGlzLnVzZXJzPy5yb2xlID09PSBcImFkbWluXCIpICYmXHJcbiAgICAgICh2YWwgPT09IFwic3RvcmVcIiB8fCB2YWwgPT09IFwiY2x1c3RlclwiKSkge1xyXG4gICAgIHRoaXMuZ2V0QWxsR3JvdXBzKCk7XHJcbiAgICBmb3VuZENsdXN0ZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8g4pyFIFJNIChvbmx5IGZvciBzdXBlcmFkbWluKVxyXG4gIGlmICh0aGlzLnVzZXJzPy5yb2xlID09PSBcInN1cGVyYWRtaW5cIiAmJiB2YWwgPT09IFwicm1cIikge1xyXG4gICB0aGlzLmdldEFsbFJtKCk7XHJcbiAgICBmb3VuZFJNID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOKchSBGYWxsYmFja1xyXG4gIGlmICghZm91bmRSTSAmJiAhZm91bmRDbHVzdGVyKSB7XHJcbiAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gIH1cclxuICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxufVxyXG4vLyBwcml2YXRlIHJlc2V0QWxsQ2x1c3RlcnMoKSB7XHJcbi8vICAgaWYgKHRoaXMuQ2x1c3Rlckxpc3Q/Lmxlbmd0aCkge1xyXG4vLyAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJDbHVzdGVyTGlzdFwiKT8uc2V0VmFsdWUodGhpcy5DbHVzdGVyTGlzdCk7XHJcbi8vICAgICB0aGlzLm9uZ3JvdXBTZWxlY3QodGhpcy5DbHVzdGVyTGlzdCk7XHJcbi8vICAgfSBlbHNlIHtcclxuLy8gICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiQ2x1c3Rlckxpc3RcIik/LnNldFZhbHVlKFtdKTtcclxuLy8gICB9XHJcbi8vICAgdGhpcy5nZXRBbGxHcm91cHMoKTtcclxuLy8gfVxyXG5cclxuLy8gcHJpdmF0ZSByZXNldEFsbFJtcygpIHtcclxuLy8gICBpZiAodGhpcy5SbUxpc3Q/Lmxlbmd0aCkge1xyXG4vLyAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJSbUxpc3RcIik/LnNldFZhbHVlKHRoaXMuUm1MaXN0KTtcclxuLy8gICAgIHRoaXMub25SbVNlbGVjdCh0aGlzLlJtTGlzdCk7XHJcbi8vICAgfSBlbHNlIHtcclxuLy8gICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiUm1MaXN0XCIpPy5zZXRWYWx1ZShbXSk7XHJcbi8vICAgfVxyXG4vLyAgIHRoaXMuZ2V0QWxsUm0oKTtcclxuLy8gfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFJlcXVlc3REYXRhKHBhcmFtcz86IHtcclxuICAgIGlzRXhwb3J0PzogYm9vbGVhbjtcclxuICAgIGxpbWl0PzogbnVtYmVyO1xyXG4gICAgb2Zmc2V0PzogbnVtYmVyO1xyXG4gIH0pOiBhbnkge1xyXG4gICAgbGV0IGZpbmFsU3RvcmVzOiBhbnkgPSBbXTtcclxuICAgIGxldCBybUxpc3RWYWx1ZTogYW55ID0gW107XHJcblxyXG4gICAgLy8gTWFwIHJvbGUg4oaSIGtleVR5cGVcclxuICAgIGNvbnN0IHJvbGVLZXlUeXBlTWFwOiBhbnkgPSB7XHJcbiAgICAgIHN1cGVyYWRtaW46IFwicm1cIixcclxuICAgICAgYWRtaW46IFwiY2x1c3RlclwiLFxyXG4gICAgICB1c2VyOiBcInN0b3JlXCIsXHJcbiAgICB9O1xyXG4gICAgaWYgKCF0aGlzLmtleVR5cGUpIHtcclxuICAgICAgdGhpcy5rZXlUeXBlID0gcm9sZUtleVR5cGVNYXBbdGhpcy51c2Vycz8ucm9sZV0gfHwgXCJybVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZXllVGVzdEZvcm0udmFsdWUuc3RvcmVMaXN0KSkge1xyXG4gICAgICB0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLnN0b3JlTGlzdC5mb3JFYWNoKChzdG9yZTogYW55KSA9PiB7XHJcbiAgICAgICAgZmluYWxTdG9yZXMucHVzaChzdG9yZS5zdG9yZUlkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLlJtTGlzdCkpIHtcclxuICAgICAgdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5SbUxpc3QuZm9yRWFjaCgoZWw6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuUm1MaXN0RGF0YSA9IHJtTGlzdFZhbHVlLnB1c2goZWw/LmVtYWlsKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SbUxpc3REYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLlJtTGlzdERhdGEgPSBbXTtcclxuICAgIH1cclxudGhpcy5kZW1vR3JhcGljcyA9IHRoaXMuZXllVGVzdEZvcm0udmFsdWUuYXVkaXRUeXBlO1xyXG5cclxuLy8gbm9ybWFsaXplIGF1ZGl0VHlwZSDihpIgYWx3YXlzIGFycmF5XHJcbmxldCBhdWRpdFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuaWYgKHRoaXMuZGVtb0dyYXBpY3MgPT09IFwiYWxsXCIpIHtcclxuICBhdWRpdFR5cGVzID0gW1wiYWR1bHRcIiwgXCJraWRcIl07XHJcbn0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRlbW9HcmFwaWNzKSkge1xyXG4gIGF1ZGl0VHlwZXMgPSB0aGlzLmRlbW9HcmFwaWNzO1xyXG59IGVsc2UgaWYgKHRoaXMuZGVtb0dyYXBpY3MpIHtcclxuICBhdWRpdFR5cGVzID0gW3RoaXMuZGVtb0dyYXBpY3NdO1xyXG59XHJcblxyXG50aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnM/LmNsaWVudCxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuZXllVGVzdEZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIHR5cGU6IHRoaXMuZXllVGVzdEZvcm0udmFsdWUudHlwZSxcclxuICAgLi4uKHRoaXMuZXllVGVzdEZvcm0udmFsdWUudHlwZSAhPT0gXCJyZW1vdGVcIiAmJiB7XHJcbiAgICBkZW1vZ3JhcGhpY3M6IGF1ZGl0VHlwZXMsXHJcbiAgfSksXHJcbiAgICAgIGNsdXN0ZXI6IHRoaXMuZ3JvdXBzLFxyXG4gICAgICBzdG9yZUlkOiBmaW5hbFN0b3JlcywgLy9bXCIxMS0xMFwiLFwiMTEtOTk1XCIsXCIxMS05OTZcIixcIjExLTEwMDBcIixcIjExLTEwXCIsXCIxMS0xNTYzXCIsXCIxMS0xMDAzXCIsXCIxMS05OTNcIixcIjExLTk4N1wiLFwiMTEtMTAxNVwiXSxcclxuICAgICAgbGltaXQ6IHBhcmFtcz8ubGltaXQgPz8gdGhpcy5saW1pdCA/PyAxMCxcclxuICAgICAgb2Zmc2V0OiBwYXJhbXM/Lm9mZnNldCA/PyB0aGlzLm9mZnNldCA/PyAxLFxyXG4gICAgICBrZXlUeXBlOiB0aGlzLmtleVR5cGUsXHJcbiAgICAgIGNvbXBsaWFuY2VTY29yZTogTnVtYmVyKHRoaXMuZXllVGVzdEZvcm0udmFsdWUuY29tcGxpYW5jZVNjb3JlKSxcclxuICAgICAgbmVhckFkZGl0aW9uOiB0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLm5lYXJBZGRpdGlvbixcclxuICAgICAgY2F0ZWdvcnk6IHRoaXMuZXllVGVzdEZvcm0udmFsdWUuY2F0ZWdvcnksXHJcbiAgICAgIFJNTGlzdDogdGhpcy5ybUVtYWlsXHJcbiAgICAgICAgPyBbdGhpcy5ybUVtYWlsXVxyXG4gICAgICAgIDogcm1MaXN0VmFsdWUubGVuZ3RoID4gMFxyXG4gICAgICAgID8gcm1MaXN0VmFsdWVcclxuICAgICAgICA6IFt0aGlzLnVzZXJzPy5lbWFpbF0sXHJcbiAgICAgIC8vW1wic3VyZXNoLnJAdGhlbGVuc2thcnQuY29tXCIsXCJrLnZhc2FudGhAbGVuc2thcnQuaW5cIiwgXCJ0YW1pbHNlbHZhbi5raXJ1YmFnYXJhbkBsZW5za2FydC5pblwiXSxcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgIGlzRXhwb3J0OiBwYXJhbXM/LmlzRXhwb3J0ID8/IGZhbHNlLFxyXG4gICAgICBzb3J0T3JkZXI6IHRoaXMuc29ydE9yZGVyID8/IC0xLFxyXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydGVkQ29sdW1uID8/IFwiZGF0ZVwiLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFhMU1goKSB7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHRoaXMuYnVpbGRSZXF1ZXN0RGF0YSh7XHJcbiAgICAgIGlzRXhwb3J0OiB0cnVlLFxyXG4gICAgICBsaW1pdDogMTAwMDAsXHJcbiAgICAgIG9mZnNldDogMSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZXllU2VydmljZVxyXG4gICAgICAuZ2V0RXllVGVzdFRhYmxlRXhwb3J0KHJlcXVlc3REYXRhKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5leWVTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShcclxuICAgICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgICBgJHt0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLnR5cGV9IEV5ZSBUZXN0IFRhYmxlIGBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3IgPyBlcnI/LmVycm9yPy5lcnJvciA6IGVycj8uZXJyb3I/Lm1lc3NhZ2VcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b3RhbEl0ZW1zOiBhbnkgPSAwO1xyXG4gIG9mZnNldCA9IDE7XHJcbiAgbGltaXQgPSAxMDtcclxuICBvblN1Ym1pdCgpIHtcclxuICAgIHRoaXMuZXllVGVzdERhdGE9W107XHJcbiAgICB0aGlzLnR5cGVWYWx1ZSA9IHRoaXMuZXllVGVzdEZvcm0/LnZhbHVlPy50eXBlO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHRoaXMuYnVpbGRSZXF1ZXN0RGF0YSh7IGlzRXhwb3J0OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuZXllU2VydmljZVxyXG4gICAgICAuZ2V0RXllVGVzdGxpc3QocmVxdWVzdERhdGEpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5leWVUZXN0RGF0YSA9IHJlcz8uZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uU2l6ZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDYXJkRGF0YSgpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXllVGVzdERhdGEgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogbnVtYmVyKSB7XHJcbiAgICAvLyB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICAvLyB0aGlzLnBhZ2VTaXplID0gMTA7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMub2Zmc2V0ID0gTnVtYmVyKHBhZ2VPZmZzZXQpO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0gdGhpcy5idWlsZFJlcXVlc3REYXRhKHtcclxuICAgICAgaXNFeHBvcnQ6IGZhbHNlLFxyXG4gICAgICBsaW1pdDogdGhpcy5saW1pdCxcclxuICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgIH0pO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVxdWVzdERhdGEpXHJcbi8vIHJldHVyblxyXG4gICAgdGhpcy5leWVTZXJ2aWNlXHJcbiAgICAgIC5nZXRFeWVUZXN0bGlzdChyZXF1ZXN0RGF0YSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmV5ZVRlc3REYXRhID0gcmVzPy5kYXRhLnJlc3VsdDtcclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzLmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXllVGVzdERhdGEgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZXllVGVzdERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gTnVtYmVyKHBhZ2VTaXplKTtcclxuICAgIHRoaXMubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0gdGhpcy5idWlsZFJlcXVlc3REYXRhKHtcclxuICAgICAgaXNFeHBvcnQ6IGZhbHNlLFxyXG4gICAgICBsaW1pdDogdGhpcy5saW1pdCxcclxuICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZXllU2VydmljZVxyXG4gICAgICAuZ2V0RXllVGVzdGxpc3QocmVxdWVzdERhdGEpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5leWVUZXN0RGF0YSA9IHJlcz8uZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmV5ZVRlc3REYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmV5ZVRlc3REYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzb3J0ZWRDb2x1bW46IGFueTtcclxuICBzb3J0T3JkZXI6IGFueTtcclxuICBvblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnNvcnRlZENvbHVtbiA9PT0gY29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gdGhpcy5zb3J0T3JkZXIgPT09IDEgPyAtMSA6IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnRlZENvbHVtbiA9IGNvbHVtbiA/IGNvbHVtbiA6IFwic3RvcmVOYW1lXCI7XHJcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gMTtcclxuICAgIH1cclxuICAgIHRoaXMub25TdWJtaXQoKTtcclxuICB9XHJcblxyXG4gIC8vIG5ldyBhcGkgaW50YWdyYXRlZFxyXG5cclxuICBSbUxpc3Q6IGFueSA9IFtdO1xyXG5cclxuICBnZXRBbGxSbSgpIHtcclxuICAgIHRoaXMuZXllU2VydmljZVxyXG4gICAgICAuZ2V0Um1MaXN0KHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUm1MaXN0ID0gcmVzPy5kYXRhPy5yZXN1bHQ7IC8vZm9yIG9iamVjdCBiYXNlZCB0aGlzIHdpbGwgY2hhbmdlZFxyXG4gICAgICAgICAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIlJtTGlzdFwiKT8uc2V0VmFsdWUodGhpcy5SbUxpc3QpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5SbUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJSbUxpc3RcIik/LnNldFZhbHVlKFtdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZ2V0QWxsR3JvdXBzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIG9uUm1TZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJSbUxpc3RcIik/LnNldFZhbHVlKGV2ZW50KTtcclxuICAgIHRoaXMuZ2V0QWxsR3JvdXBzKGV2ZW50KTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBleWVUZXN0Q2FyZERhdGE6IGFueSA9IFtdO1xyXG4gIGdldENhcmREYXRhKCkge1xyXG4gICAgbGV0IGZpbmFsU3RvcmVzOiBhbnkgPSBbXTtcclxuICAgIGxldCBybUxpc3RWYWx1ZTogYW55ID0gW107XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGZyb21EYXRlLFxyXG4gICAgICB0b0RhdGUsXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIGF1ZGl0VHlwZSxcclxuICAgICAgc3RvcmVMaXN0LFxyXG4gICAgICBSbUxpc3QsXHJcbiAgICAgIGNvbXBsaWFuY2VTY29yZSxcclxuICAgICAgbmVhckFkZGl0aW9uLFxyXG4gICAgICBjYXRlZ29yeSxcclxuICAgIH0gPSB0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5zdG9yZUxpc3QpKSB7XHJcbiAgICAgIHRoaXMuZXllVGVzdEZvcm0udmFsdWUuc3RvcmVMaXN0LmZvckVhY2goKHN0b3JlOiBhbnkpID0+IHtcclxuICAgICAgICBmaW5hbFN0b3Jlcy5wdXNoKHN0b3JlLnN0b3JlSWQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZXllVGVzdEZvcm0udmFsdWUuUm1MaXN0KSkge1xyXG4gICAgICB0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLlJtTGlzdC5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgcm1MaXN0VmFsdWUucHVzaChlbD8uZW1haWwpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlbW9ncmFwaGljcyA9XHJcbiAgICAgIHR5cGUgIT09IFwicmVtb3RlXCJcclxuICAgICAgICA/IGF1ZGl0VHlwZSA9PT0gXCJhbGxcIlxyXG4gICAgICAgICAgPyBbXCJhZHVsdFwiLCBcImtpZFwiXVxyXG4gICAgICAgICAgOiBBcnJheS5pc0FycmF5KGF1ZGl0VHlwZSlcclxuICAgICAgICAgID8gYXVkaXRUeXBlXHJcbiAgICAgICAgICA6IFthdWRpdFR5cGVdXHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdERhdGE6IGFueSA9IHtcclxuICAgICAgZnJvbURhdGUsXHJcbiAgICAgIHRvRGF0ZSxcclxuICAgICAgdHlwZSxcclxuICAgICAgc3RvcmVJZDogZmluYWxTdG9yZXMsXHJcbiAgICAgIFJNTGlzdDogcm1MaXN0VmFsdWUubGVuZ3RoID4gMCA/IHJtTGlzdFZhbHVlIDogW3RoaXMudXNlcnM/LmVtYWlsXSxcclxuICAgICAgY29tcGxpYW5jZVNjb3JlOiBOdW1iZXIoY29tcGxpYW5jZVNjb3JlKSxcclxuICAgICAgbmVhckFkZGl0aW9uLFxyXG4gICAgICBjYXRlZ29yeSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGRlbW9ncmFwaGljcykge1xyXG4gICAgICByZXF1ZXN0RGF0YS5kZW1vZ3JhcGhpY3MgPSBkZW1vZ3JhcGhpY3M7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV5ZVNlcnZpY2VcclxuICAgICAgLmdldENhcmQocmVxdWVzdERhdGEpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmV5ZVRlc3RDYXJkRGF0YSA9IHJlcz8uY29kZSA9PT0gMjAwID8gcmVzPy5kYXRhPy5yZXN1bHQgOiB7fTtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZXllVGVzdENhcmREYXRhID0ge307XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgZXllVGVzdFZpZXcoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmV5ZVNlcnZpY2Uuc2V0QXVkaXREYXRhKGRhdGEpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS90cmF4L2F1ZGl0L3N0YXJ0XCJdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgdHlwZTogdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS50eXBlLFxyXG4gICAgICAgIHN0b3JlSWQ6IGRhdGE/LnN0b3JlSWQsXHJcbiAgICAgICAgX2lkOiBkYXRhLl9pZCxcclxuICAgICAgICBleWVUeXBlOiBkYXRhPy5jb21tZW50ID8gXCJmYWtlXCIgOiBcImdlbnVpbmVcIixcclxuICAgICAgICBSTUVtYWlsOiBkYXRhPy5STUVtYWlsLFxyXG4gICAgICAgIGNsdXN0ZXI6IGRhdGE/LmNsdXN0ZXJOYW1lLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXR0aW5nc1ZpZXcoKSB7XHJcbiAgICB0aGlzLmV5ZVNlcnZpY2Uuc2V0QXVkaXREYXRhKHRoaXMuaGVhZGVyRmlsdGVycyk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3RyYXgvYXVkaXQvc2V0dGluZ3NcIl0sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHsgdHlwZTogdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS50eXBlIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFwcGx5QnV0dG9uQ2xhc3Mocm9sZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgcm9sZUNsYXNzTWFwOiBhbnkgPSB7XHJcbiAgICAgIHN1cGVyYWRtaW46IHR5cGUgPT09IFwicmVtb3RlXCIgPyBcImNvbC03IG1iLTRcIiA6IFwiY29sLTUgbWItNFwiLFxyXG4gICAgICBhZG1pbjogdHlwZSA9PT0gXCJyZW1vdGVcIiA/IFwiY29sLTEwIG1iLTRcIiA6IFwiY29sLTggbWItNFwiLFxyXG4gICAgICB1c2VyOiB0eXBlID09PSBcInJlbW90ZVwiID8gXCJjb2wtMiBtYi00XCIgOiBcImNvbC0xMCBtYi00XCIsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiByb2xlQ2xhc3NNYXBbcm9sZV0gfHwgXCJjb2wtMTIgbWItNFwiO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yXCI+XHJcbiAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmcxXCIgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8Zm9ybSAqbmdJZj1cIiFsb2FkaW5nMVwiIFtmb3JtR3JvdXBdPVwiZXllVGVzdEZvcm1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbXQtNyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRvcDogMjAlO1wiIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0IHotMlwiIHN0eWxlPVwibWluLXdpZHRoOiAyMzBweCAhaW1wb3J0YW50O1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBuZ3hEYXRlcmFuZ2VwaWNrZXJNZCBbZHJvcHNdPVwiJ2Rvd24nXCIgW29wZW5zXT1cIidyaWdodCdcIiBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2VdPVwidHJ1ZVwiIFtzaG93Q2FuY2VsXT1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVJhbmdlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVzVXBkYXRlZCk9XCJkYXRlY2hhbmdlKCRldmVudClcIiAoY2xpY2spPVwicmVzZXRWYWxpZGF0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydERhdGVDaGFuZ2VkKT1cIm9uU3RhcnREYXRlQ2hhbmdlKCRldmVudClcIiBbaXNDdXN0b21EYXRlXT1cImlzQ3VzdG9tRGF0ZVwiIFthdXRvQXBwbHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRhdGVyYW5nZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleWVUZXN0Rm9ybS5nZXQoJ3R5cGUnKT8udmFsdWUgPT09J3JlbW90ZScgPyAnY29sLTIgbWItNCcgOiAnY29sLTIgbWItNCdcIiBjbGFzcz1cImNvbC0yIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJ0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtQ2hhbmdlKT1cInR5cGVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZXllVGVzdEZvcm0uZ2V0KCd0eXBlJyk/LnZhbHVlICE9PSdyZW1vdGUnXCIgY2xhc3M9XCJjb2wtMSBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImF1ZGl0VHlwZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJhdWRpdFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1DaGFuZ2UpPVwiYXVkaXRUeXBlQ2hhbmdlKCRldmVudClcIj48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0nc3VwZXJhZG1pbidcIiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZXllVGVzdEZvcm0uZ2V0KCdSbUxpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgUk1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1ncm91cC1zZWxlY3QgW2l0ZW1zXT1cIlJtTGlzdFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIFttdWx0aV09XCJ0cnVlXCIgW3NlYXJjaEZpZWxkXT1cIid1c2VyTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIid1c2VyTmFtZSdcIiAoc2VsZWN0ZWQpPVwib25SbVNlbGVjdCgkZXZlbnQpXCIgW3NlbGVjdGVkVmFsdWVzXT1cImV5ZVRlc3RGb3JtLmdldCgnUm1MaXN0Jyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1ncm91cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09J3N1cGVyYWRtaW4nIHx8IHVzZXJzPy5yb2xlID09PSdhZG1pbidcIiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZXllVGVzdEZvcm0uZ2V0KCdDbHVzdGVyTGlzdCcpPy52YWx1ZT8ubGVuZ3RoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBjbHVzdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZ3JvdXAtc2VsZWN0IFtpdGVtc109XCJDbHVzdGVyTGlzdFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIFttdWx0aV09XCJ0cnVlXCIgW3NlYXJjaEZpZWxkXT1cIidjbHVzdGVyTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidjbHVzdGVyTmFtZSdcIiAoc2VsZWN0ZWQpPVwib25ncm91cFNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiZXllVGVzdEZvcm0uZ2V0KCdDbHVzdGVyTGlzdCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItZ3JvdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZXllVGVzdEZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgU3RvcmVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmVzLXNlbGVjdCBbaXRlbXNdPVwic3RvcmVMaXN0XCIgW2Rpc2FibGVkXT1cImZhbHNlXCIgW211bHRpXT1cInRydWVcIiBbc2VhcmNoRmllbGRdPVwiJ3N0b3JlTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidzdG9yZUlkJ1wiIChzZWxlY3RlZCk9XCJvblN0b3JlU2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJleWVUZXN0Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy52YWx1ZVwiPjwvbGliLXN0b3Jlcy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleWVUZXN0Rm9ybS5nZXQoJ3R5cGUnKT8udmFsdWUgPT09J3JlbW90ZScgPyAnY29sLTInIDogJ2NvbC0yJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGxpYW5jZVNjb3JlXCIgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwidHlwZVBlcmNlbnRhZ2VBcnJheVwiIChpdGVtQ2hhbmdlKT1cInR5cGVQZXJjZW50YWdlQ2hhbmdlKCRldmVudClcIj48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcIiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJuZWFyQWRkaXRpb25cIiBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJuZWFyQWRkaXRpb25BcnJheVwiIChpdGVtQ2hhbmdlKT1cIm5lYXJBZGRpdGlvbkNoYW5nZSgkZXZlbnQpXCI+PC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZXllVGVzdEZvcm0uZ2V0KCd0eXBlJyk/LnZhbHVlICE9PSdyZW1vdGUnXCIgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY2F0ZWdvcnlcIiBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJjYXRlZ29yeUFycmF5XCIgKGl0ZW1DaGFuZ2UpPVwiY2F0ZWdvcnlUeXBlQ2hhbmdlKCRldmVudClcIj48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICpuZ0lmPVwidXNlcnM/LnJvbGVcIiBcclxuICBjbGFzcz1cInRleHQtZW5kXCJcclxuICBbbmdDbGFzc109XCJnZXRBcHBseUJ1dHRvbkNsYXNzKHVzZXJzPy5yb2xlLCBleWVUZXN0Rm9ybS5nZXQoJ3R5cGUnKT8udmFsdWUpXCJcclxuPlxyXG4gIDxhIChjbGljayk9XCJvblN1Ym1pdCgpXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBweS0zXCI+XHJcbiAgICA8c3Bhbj5BcHBseTwvc3Bhbj5cclxuICA8L2E+XHJcbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZm9ybT5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93RXllVGVzdFwiIGNsYXNzPVwibXMtNiBtYi0zXCI+XHJcblxyXG4gICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgZGFzaGVkIHctMTAwICByb3dcIj5cclxuICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2wtMTAgdGl0bGUtdGV4dCBweS0zXCI+PHNwYW4gY2xhc3M9XCJteC0yXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCJcclxuICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAzMiAzMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHJ4PVwiMTZcIiBmaWxsPVwiI0ZFRTRFMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjM1XzI0MjM0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2IDEzLjMzMzVWMTYuMDAwMk0xNiAxOC42NjY4SDE2LjAwNjdNMjIuNjY2NyAxNi4wMDAyQzIyLjY2NjcgMTkuNjgyMSAxOS42ODE5IDIyLjY2NjggMTYgMjIuNjY2OEMxMi4zMTgxIDIyLjY2NjggOS4zMzMzNyAxOS42ODIxIDkuMzMzMzcgMTYuMDAwMkM5LjMzMzM3IDEyLjMxODMgMTIuMzE4MSA5LjMzMzUgMTYgOS4zMzM1QzE5LjY4MTkgOS4zMzM1IDIyLjY2NjcgMTIuMzE4MyAyMi42NjY3IDE2LjAwMDJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIzNV8yNDIzNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg4IDgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PHNwYW4gY2xhc3M9XCJkYXNoZWQtZGVzY1wiPkV5ZSB0ZXN0IHZpZGVvIHByZXZpZXcgaXMgYXZhaWxhYmxlIGZvciAzMCBkYXlzLiBBdWRpdCBkYXRhXHJcbiAgICAgICAgICAgICAgICAgcmVtYWlucyBhY2Nlc3NpYmxlLCBidXQgdmlkZW9zIHdpbGwgbm90IGJlIHJldGFpbmVkIGJleW9uZCB0aGlzIHBlcmlvZC48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sLTIgcHQtMiB0ZXh0LWVuZCBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbG9zZUV5ZVRlc3QoKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk0yNSAxNUwxNSAyNU0xNSAxNUwyNSAyNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgPC9oMz5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuPCEtLSA8ZGl2IGNsYXNzPVwiY2FyZCBteS0zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHktMVwiPlxyXG4gXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+IC0tPlxyXG5cclxuPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiAqbmdJZj1cInVzZXJzPy5yb2xlID09PSdzdXBlcmFkbWluJyAmJiBrZXlUeXBlID09PSdybSdcIiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIHAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZWxsaXBzZTEgbWluLWgtNTVweCBweS0xIHB4LTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZSBteS0wXCI+UmVnaW9uYWwgTWFuYWdlcnM8L2g1PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXZhbHVlXCI+e3tSbUxpc3REYXRhID8/ICctLSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG10LTUgcC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBlbGxpcHNlMSBtaW4taC01NXB4IHB5LTEgcHgtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJjYXJkLXRpdGxlIG15LTBcIj5DbHVzdGVyczwvaDU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdmFsdWVcIj57e2dyb3Vwcz8ubGVuZ3RoID8/ICctLSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09J3N1cGVyYWRtaW4nICYmIGtleVR5cGUgIT09J3JtJyB8fCB1c2Vycz8ucm9sZSA9PT0nYWRtaW4nXCIgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMCBwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGVsbGlwc2UxIG1pbi1oLTQ1cHggIHB5LTEgcHgtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGVcIj5DbHVzdGVyczwvaDU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTcgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdmFsdWVcIj57eyBncm91cHM/Lmxlbmd0aCA/PyAnLScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgaC0xMDAgcC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBlbGxpcHNlMSBtaW4taC00NXB4ICBweS0xIHB4LTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJjYXJkLXRpdGxlXCI+VG90YWwgVGFuZ28gQUkgRmlsZXM8L2g1PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXZhbHVlXCI+e3sgZXllVGVzdENhcmREYXRhPy50b3RhbEZpbGVzID8/ICctJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMCBwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGVsbGlwc2UxIG1pbi1oLTQ1cHggcHktMSBweC0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZVwiPlRydXN0IEF1ZGl0IENvbXBsZXRlZDwvaDU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdmFsdWVcIj57eyBleWVUZXN0Q2FyZERhdGE/LmNvbXBsZXRlZEZpbGVzID8/ICctJyB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgcHktMCBib3JkZXItMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJcIj57eyAoZXllVGVzdENhcmREYXRhPy5jb21wbGV0ZWRSYXRpbyA/PyAnLScpICsgJyUnIH19IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGVzdC1zdWJcIj5Db21wbGV0ZWQ8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGgtMTAwIHAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZWxsaXBzZTEgbWluLWgtNDVweCAgcHktMSBweC0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZVwiPlRhbmdvIFNjb3JlPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktNyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC12YWx1ZVwiPnt7IGV5ZVRlc3RDYXJkRGF0YT8udGFuZ29TY29yZSA/PyAnLScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgcHktMCBib3JkZXItMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZXllVGVzdENhcmREYXRhPy50cmVuZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzMyMTZfMTE4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNSAzTDYuNzUgNy43NUw0LjI1IDUuMjVMMC41IDlNMTEuNSAzSDguNU0xMS41IDNWNlwiIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMzIxNl8xMThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWV5ZVRlc3RDYXJkRGF0YT8udHJlbmRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMyAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNzYwXzk3NzYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjU3NSA5TDYuODI0OTUgNC4yNUw0LjMyNDk1IDYuNzVMMC41NzQ5NTEgM00xMS41NzUgOUg4LjU3NDk1TTExLjU3NSA5VjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNzYwXzk3NzZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wNzQ5NTEyKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+IFxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWIgbXMtMlwiPnt7IGV5ZVRlc3RDYXJkRGF0YT8udGFuZ29TY29yZVRyZW5kICE9PSBudWxsIFxyXG4gICAgICA/IChnZXRBYnNWYWx1ZShleWVUZXN0Q2FyZERhdGEudGFuZ29TY29yZVRyZW5kKSB8IG51bWJlcjonMS4wLTAnOidlbi1VUycpICsgJyUnIFxyXG4gICAgICA6ICctJyB9fVxyXG4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGVzdC1zdWIxXCI+dnMgcHJldmlvdXMgd2Vlazwvc3Bhbj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGgtMTAwIHAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZWxsaXBzZTEgbWluLWgtNDVweCBweS0xIHB4LTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJjYXJkLXRpdGxlXCI+VHJ1c3QgU2NvcmU8L2g1PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXZhbHVlXCI+e3sgKGV5ZVRlc3RDYXJkRGF0YT8udHJ1c3RTY29yZSAmJiBleWVUZXN0Q2FyZERhdGE/LnRydXN0U2NvcmUgIT09ICdOQScgXHJcbiAgPyBleWVUZXN0Q2FyZERhdGEudHJ1c3RTY29yZSArICclJyBcclxuICA6ICdOQScpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwiY2FyZCBtdC0zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtM1wiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0gJ3N1cGVyYWRtaW4nICYmIGtleVR5cGUgPT09J3JtJ1wiIGNsYXNzPVwidGl0bGUtdGV4dCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICBBdWRpdCBTdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2FkaW5nXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+e3sgdG90YWxJdGVtcyB9fSBUb3RhbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBBZG1pbiArIGNsdXN0ZXIgcHJlc2VudCDihpIgUk0gU3VtbWFyeSAtLT5cclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cImtleVR5cGUgPT09J2NsdXN0ZXInICYmIHVzZXJzPy5yb2xlID09PSAnc3VwZXJhZG1pbidcIiAoY2xpY2spPVwidHlwZVZhbDEoJ3JtJywnJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF83NDVfMTIxMjgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMVwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjcuODMzNCAyMS4wMDAzSDE2LjE2NjdNMTYuMTY2NyAyMS4wMDAzTDIyLjAwMDEgMjYuODMzN00xNi4xNjY3IDIxLjAwMDNMMjIuMDAwMSAxNS4xNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzc0NV8xMjEyOFwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIiBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzQ1XzEyMTI4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd183NDVfMTIxMjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0gJ2FkbWluJyAmJiBrZXlUeXBlID09PSdjbHVzdGVyJyB8fCB1c2Vycz8ucm9sZSA9PT0gJ3N1cGVyYWRtaW4nICYmIGtleVR5cGUgPT09J2NsdXN0ZXInXCIgY2xhc3M9XCJ0aXRsZS10ZXh0IG15LTQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICBSTSBTdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvYWRpbmdcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgdGV4dC1jYXBpdGFsaXplXCI+e3sgZXllVGVzdERhdGFbMF0/LlJNTmFtZSA/IGV5ZVRlc3REYXRhWzBdPy5STU5hbWUgOiAnJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQWxsIG90aGVyIGNhc2VzIOKGkiBFeWUgVGVzdCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMiBjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwia2V5VHlwZSA9PT0nc3RvcmUnICYmICh1c2Vycz8ucm9sZSA9PT0gJ3N1cGVyYWRtaW4nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInR5cGVWYWwxKCdjbHVzdGVyJyx0aGlzLnJtRW1haWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzc0NV8xMjEyOClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI3LjgzMzQgMjEuMDAwM0gxNi4xNjY3TTE2LjE2NjcgMjEuMDAwM0wyMi4wMDAxIDI2LjgzMzdNMTYuMTY2NyAyMS4wMDAzTDIyLjAwMDEgMTUuMTY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzc0NV8xMjEyOFwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIiByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzQ1XzEyMTI4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93Xzc0NV8xMjEyOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cImtleVR5cGUgPT09J3N0b3JlJyAmJiAodXNlcnM/LnJvbGUgPT09ICdhZG1pbicpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidHlwZVZhbDEoJ2NsdXN0ZXInLHRoaXMuZ3JvdXBzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF83NDVfMTIxMjgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yNy44MzM0IDIxLjAwMDNIMTYuMTY2N00xNi4xNjY3IDIxLjAwMDNMMjIuMDAwMSAyNi44MzM3TTE2LjE2NjcgMjEuMDAwM0wyMi4wMDAxIDE1LjE2N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF83NDVfMTIxMjhcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCIgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93Xzc0NV8xMjEyOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd183NDVfMTIxMjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJzaGFwZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhKHVzZXJzPy5yb2xlID09PSAnc3VwZXJhZG1pbicgJiYga2V5VHlwZSA9PT0ncm0nKSAmJiAhKHVzZXJzPy5yb2xlID09PSAnc3VwZXJhZG1pbicgJiYga2V5VHlwZSA9PT0nY2x1c3RlcicpIFxyXG4gICAgICAgICAgICAgICAgJiYgISh1c2Vycz8ucm9sZSA9PT0gJ2FkbWluJyAmJiBrZXlUeXBlID09PSdjbHVzdGVyJylcIiBjbGFzcz1cInRpdGxlLXRleHQgbXktNCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRXllIFRlc3RcclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2FkaW5nXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+e3sgdG90YWxJdGVtcyB9fSBUb3RhbDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09J3N1cGVyYWRtaW4nICYmIGtleVR5cGUgPT09J3JtJ1wiIGNsYXNzPVwidGV4dC1zdWIgbXktMlwiPkJhc2VkIG9uIHt7IGhlYWREYXRlIHwgZGF0ZTogJ01NTSBkJyB9fSAtIHt7XHJcbiAgICAgICAgICAgICAgICBoZWFkRGF0ZUVuZCB8IGRhdGU6ICdNTU0gZCwgeScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXJzPy5yb2xlID09PSdhZG1pbicgJiYga2V5VHlwZSA9PT0nY2x1c3RlcidcIiBjbGFzcz1cInRleHQtc3ViIG15LTJcIj5CYXNlZCBvbiB7eyBoZWFkRGF0ZSB8IGRhdGU6ICdNTU0gZCcgfX0gLSB7e1xyXG4gICAgICAgICAgICAgICAgaGVhZERhdGVFbmQgfCBkYXRlOiAnTU1NIGQsIHknIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0ndXNlcicgJiYga2V5VHlwZSA9PT0nc3RvcmUnXCIgY2xhc3M9XCJ0ZXh0LXN1YiBteS0yXCI+QmFzZWQgb24ge3sgaGVhZERhdGUgfCBkYXRlOiAnTU1NIGQnIH19IC0ge3tcclxuICAgICAgICAgICAgICAgIGhlYWREYXRlRW5kIHwgZGF0ZTogJ01NTSBkLCB5JyB9fTwvc3Bhbj5cclxuICAgICAgICA8L2gzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKGNoYW5nZSk9XCJzZWFyY2hEYXRhKClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBtZS0yXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlUeXBlID09PSAncm0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnU2VhcmNoIGJ5IFJNTmFtZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGtleVR5cGUgPT09ICdjbHVzdGVyJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ1NlYXJjaCBieSBDbHVzdGVyJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1NlYXJjaCdcclxuICAgICAgICAgICAgICAgICAgICAgIFwiIC8+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0nc3VwZXJhZG1pbidcIiAoY2xpY2spPVwic2V0dGluZ3NWaWV3KClcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjQ1XCIgaGVpZ2h0PVwiNDZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA0NSA0NlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF83NjBfOTk4OClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi43MTk3M1wiIHk9XCIxLjk4MDQ3XCIgd2lkdGg9XCI0MC4wNFwiIGhlaWdodD1cIjQwLjA0XCIgcng9XCI3LjI4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMy4xNzQ3M1wiIHk9XCIyLjQzNTQ3XCIgd2lkdGg9XCIzOS4xM1wiIGhlaWdodD1cIjM5LjEzXCIgcng9XCI2LjgyNVwiIHN0cm9rZT1cIiNEMEQ1RERcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIwLjkxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzc2MF85OTg4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yMi43Mzk2IDI0LjI3NDlDMjMuOTk2MSAyNC4yNzQ5IDI1LjAxNDYgMjMuMjU2MyAyNS4wMTQ2IDIxLjk5OTlDMjUuMDE0NiAyMC43NDM0IDIzLjk5NjEgMTkuNzI0OSAyMi43Mzk2IDE5LjcyNDlDMjEuNDgzMiAxOS43MjQ5IDIwLjQ2NDYgMjAuNzQzNCAyMC40NjQ2IDIxLjk5OTlDMjAuNDY0NiAyMy4yNTYzIDIxLjQ4MzIgMjQuMjc0OSAyMi43Mzk2IDI0LjI3NDlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjUxOTdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjguMzUxMyAyNC4yNzQ5QzI4LjI1MDMgMjQuNTAzNiAyOC4yMjAyIDI0Ljc1NzMgMjguMjY0OCAyNS4wMDMzQzI4LjMwOTQgMjUuMjQ5MyAyOC40MjY3IDI1LjQ3NjMgMjguNjAxNSAyNS42NTVMMjguNjQ3IDI1LjcwMDVDMjguNzg4IDI1Ljg0MTQgMjguODk5OSAyNi4wMDg3IDI4Ljk3NjIgMjYuMTkyOEMyOS4wNTI2IDI2LjM3NjkgMjkuMDkxOSAyNi41NzQzIDI5LjA5MTkgMjYuNzczNkMyOS4wOTE5IDI2Ljk3MjkgMjkuMDUyNiAyNy4xNzAzIDI4Ljk3NjIgMjcuMzU0NEMyOC44OTk5IDI3LjUzODUgMjguNzg4IDI3LjcwNTggMjguNjQ3IDI3Ljg0NjZDMjguNTA2MiAyNy45ODc2IDI4LjMzODkgMjguMDk5NSAyOC4xNTQ4IDI4LjE3NThDMjcuOTcwNyAyOC4yNTIyIDI3Ljc3MzMgMjguMjkxNCAyNy41NzQgMjguMjkxNEMyNy4zNzQ3IDI4LjI5MTQgMjcuMTc3MyAyOC4yNTIyIDI2Ljk5MzIgMjguMTc1OEMyNi44MDkxIDI4LjA5OTUgMjYuNjQxOCAyNy45ODc2IDI2LjUwMDkgMjcuODQ2NkwyNi40NTU0IDI3LjgwMTFDMjYuMjc2NyAyNy42MjYzIDI2LjA0OTcgMjcuNTA5IDI1LjgwMzcgMjcuNDY0NEMyNS41NTc3IDI3LjQxOTggMjUuMzA0IDI3LjQ0OTkgMjUuMDc1MyAyNy41NTA5QzI0Ljg1MSAyNy42NDcgMjQuNjU5NyAyNy44MDY2IDI0LjUyNSAyOC4wMTAxQzI0LjM5MDIgMjguMjEzNSAyNC4zMTc5IDI4LjQ1MTkgMjQuMzE2OSAyOC42OTZWMjguODI0OUMyNC4zMTY5IDI5LjIyNzEgMjQuMTU3MiAyOS42MTI5IDIzLjg3MjcgMjkuODk3M0MyMy41ODgzIDMwLjE4MTcgMjMuMjAyNSAzMC4zNDE1IDIyLjgwMDMgMzAuMzQxNUMyMi4zOTggMzAuMzQxNSAyMi4wMTIzIDMwLjE4MTcgMjEuNzI3OCAyOS44OTczQzIxLjQ0MzQgMjkuNjEyOSAyMS4yODM2IDI5LjIyNzEgMjEuMjgzNiAyOC44MjQ5VjI4Ljc1NjZDMjEuMjc3NyAyOC41MDU2IDIxLjE5NjUgMjguMjYyMiAyMS4wNTA0IDI4LjA1OEMyMC45MDQ0IDI3Ljg1MzggMjAuNzAwMyAyNy42OTgyIDIwLjQ2NDYgMjcuNjExNUMyMC4yMzU5IDI3LjUxMDYgMTkuOTgyMiAyNy40ODA1IDE5LjczNjIgMjcuNTI1MUMxOS40OTAyIDI3LjU2OTcgMTkuMjYzMiAyNy42ODcgMTkuMDg0NCAyNy44NjE4TDE5LjAzODkgMjcuOTA3M0MxOC44OTgxIDI4LjA0ODMgMTguNzMwOCAyOC4xNjAyIDE4LjU0NjcgMjguMjM2NUMxOC4zNjI2IDI4LjMxMjggMTguMTY1MiAyOC4zNTIxIDE3Ljk2NTkgMjguMzUyMUMxNy43NjY2IDI4LjM1MjEgMTcuNTY5MiAyOC4zMTI4IDE3LjM4NTEgMjguMjM2NUMxNy4yMDEgMjguMTYwMiAxNy4wMzM3IDI4LjA0ODMgMTYuODkyOSAyNy45MDczQzE2Ljc1MTkgMjcuNzY2NCAxNi42NCAyNy41OTkyIDE2LjU2MzcgMjcuNDE1QzE2LjQ4NzMgMjcuMjMwOSAxNi40NDggMjcuMDMzNiAxNi40NDggMjYuODM0MkMxNi40NDggMjYuNjM0OSAxNi40ODczIDI2LjQzNzYgMTYuNTYzNyAyNi4yNTM1QzE2LjY0IDI2LjA2OTMgMTYuNzUxOSAyNS45MDIxIDE2Ljg5MjkgMjUuNzYxMkwxNi45Mzg0IDI1LjcxNTdDMTcuMTEzMiAyNS41MzcgMTcuMjMwNSAyNS4zMSAxNy4yNzUxIDI1LjA2NEMxNy4zMTk3IDI0LjgxOCAxNy4yODk2IDI0LjU2NDMgMTcuMTg4NiAyNC4zMzU1QzE3LjA5MjUgMjQuMTExMiAxNi45MzI5IDIzLjkyIDE2LjcyOTQgMjMuNzg1MkMxNi41MjYgMjMuNjUwNSAxNi4yODc2IDIzLjU3ODIgMTYuMDQzNSAyMy41NzcySDE1LjkxNDZDMTUuNTEyNCAyMy41NzcyIDE1LjEyNjYgMjMuNDE3NCAxNC44NDIyIDIzLjEzM0MxNC41NTc3IDIyLjg0ODYgMTQuMzk3OSAyMi40NjI4IDE0LjM5NzkgMjIuMDYwNUMxNC4zOTc5IDIxLjY1ODMgMTQuNTU3NyAyMS4yNzI1IDE0Ljg0MjIgMjAuOTg4MUMxNS4xMjY2IDIwLjcwMzcgMTUuNTEyNCAyMC41NDM5IDE1LjkxNDYgMjAuNTQzOUgxNS45ODI5QzE2LjIzMzkgMjAuNTM4IDE2LjQ3NzMgMjAuNDU2OCAxNi42ODE1IDIwLjMxMDdDMTYuODg1NyAyMC4xNjQ2IDE3LjA0MTMgMTkuOTYwNSAxNy4xMjc5IDE5LjcyNDlDMTcuMjI4OSAxOS40OTYxIDE3LjI1OSAxOS4yNDI0IDE3LjIxNDQgMTguOTk2NEMxNy4xNjk4IDE4Ljc1MDQgMTcuMDUyNSAxOC41MjM0IDE2Ljg3NzcgMTguMzQ0N0wxNi44MzIyIDE4LjI5OTJDMTYuNjkxMiAxOC4xNTgzIDE2LjU3OTMgMTcuOTkxMSAxNi41MDMgMTcuODA3QzE2LjQyNjcgMTcuNjIyOCAxNi4zODc0IDE3LjQyNTUgMTYuMzg3NCAxNy4yMjYyQzE2LjM4NzQgMTcuMDI2OCAxNi40MjY3IDE2LjgyOTUgMTYuNTAzIDE2LjY0NTRDMTYuNTc5MyAxNi40NjEyIDE2LjY5MTIgMTYuMjk0IDE2LjgzMjIgMTYuMTUzMUMxNi45NzMxIDE2LjAxMjEgMTcuMTQwMyAxNS45MDAyIDE3LjMyNDQgMTUuODIzOUMxNy41MDg2IDE1Ljc0NzYgMTcuNzA1OSAxNS43MDgzIDE3LjkwNTIgMTUuNzA4M0MxOC4xMDQ2IDE1LjcwODMgMTguMzAxOSAxNS43NDc2IDE4LjQ4NiAxNS44MjM5QzE4LjY3MDIgMTUuOTAwMiAxOC44Mzc0IDE2LjAxMjEgMTguOTc4MyAxNi4xNTMxTDE5LjAyMzggMTYuMTk4NkMxOS4yMDI1IDE2LjM3MzQgMTkuNDI5NSAxNi40OTA3IDE5LjY3NTUgMTYuNTM1M0MxOS45MjE1IDE2LjU3OTkgMjAuMTc1MiAxNi41NDk4IDIwLjQwMzkgMTYuNDQ4OUgyMC40NjQ2QzIwLjY4ODkgMTYuMzUyNyAyMC44ODAyIDE2LjE5MzEgMjEuMDE0OSAxNS45ODk3QzIxLjE0OTcgMTUuNzg2MiAyMS4yMjIgMTUuNTQ3OCAyMS4yMjI5IDE1LjMwMzhWMTUuMTc0OUMyMS4yMjI5IDE0Ljc3MjYgMjEuMzgyNyAxNC4zODY5IDIxLjY2NzIgMTQuMTAyNEMyMS45NTE2IDEzLjgxOCAyMi4zMzc0IDEzLjY1ODIgMjIuNzM5NiAxMy42NTgyQzIzLjE0MTkgMTMuNjU4MiAyMy41Mjc2IDEzLjgxOCAyMy44MTIxIDE0LjEwMjRDMjQuMDk2NSAxNC4zODY5IDI0LjI1NjMgMTQuNzcyNiAyNC4yNTYzIDE1LjE3NDlWMTUuMjQzMUMyNC4yNTczIDE1LjQ4NzEgMjQuMzI5NiAxNS43MjU2IDI0LjQ2NDMgMTUuOTI5QzI0LjU5OSAxNi4xMzI1IDI0Ljc5MDMgMTYuMjkyMSAyNS4wMTQ2IDE2LjM4ODJDMjUuMjQzMyAxNi40ODkxIDI1LjQ5NzEgMTYuNTE5MyAyNS43NDMxIDE2LjQ3NDdDMjUuOTg5MSAxNi40MzAxIDI2LjIxNjEgMTYuMzEyOCAyNi4zOTQ4IDE2LjEzOEwyNi40NDAzIDE2LjA5MjVDMjYuNTgxMSAxNS45NTE0IDI2Ljc0ODQgMTUuODM5NiAyNi45MzI1IDE1Ljc2MzJDMjcuMTE2NyAxNS42ODY5IDI3LjMxNCAxNS42NDc2IDI3LjUxMzMgMTUuNjQ3NkMyNy43MTI2IDE1LjY0NzYgMjcuOTEgMTUuNjg2OSAyOC4wOTQxIDE1Ljc2MzJDMjguMjc4MiAxNS44Mzk2IDI4LjQ0NTUgMTUuOTUxNCAyOC41ODY0IDE2LjA5MjVDMjguNzI3NCAxNi4yMzMzIDI4LjgzOTIgMTYuNDAwNiAyOC45MTU2IDE2LjU4NDdDMjguOTkxOSAxNi43Njg4IDI5LjAzMTIgMTYuOTY2MiAyOS4wMzEyIDE3LjE2NTVDMjkuMDMxMiAxNy4zNjQ4IDI4Ljk5MTkgMTcuNTYyMiAyOC45MTU2IDE3Ljc0NjNDMjguODM5MiAxNy45MzA0IDI4LjcyNzQgMTguMDk3NyAyOC41ODY0IDE4LjIzODVMMjguNTQwOSAxOC4yODRDMjguMzY2IDE4LjQ2MjggMjguMjQ4OCAxOC42ODk4IDI4LjIwNDIgMTguOTM1OEMyOC4xNTk2IDE5LjE4MTggMjguMTg5NyAxOS40MzU1IDI4LjI5MDYgMTkuNjY0MlYxOS43MjQ5QzI4LjM4NjcgMTkuOTQ5MiAyOC41NDY0IDIwLjE0MDQgMjguNzQ5OCAyMC4yNzUyQzI4Ljk1MzMgMjAuNDA5OSAyOS4xOTE3IDIwLjQ4MjIgMjkuNDM1NyAyMC40ODMySDI5LjU2NDZDMjkuOTY2OSAyMC40ODMyIDMwLjM1MjYgMjAuNjQzIDMwLjYzNzEgMjAuOTI3NEMzMC45MjE1IDIxLjIxMTkgMzEuMDgxMyAyMS41OTc2IDMxLjA4MTMgMjEuOTk5OUMzMS4wODEzIDIyLjQwMjEgMzAuOTIxNSAyMi43ODc5IDMwLjYzNzEgMjMuMDcyM0MzMC4zNTI2IDIzLjM1NjcgMjkuOTY2OSAyMy41MTY1IDI5LjU2NDYgMjMuNTE2NUgyOS40OTY0QzI5LjI1MjMgMjMuNTE3NSAyOS4wMTM5IDIzLjU4OTggMjguODEwNSAyMy43MjQ2QzI4LjYwNyAyMy44NTkzIDI4LjQ0NzQgMjQuMDUwNiAyOC4zNTEzIDI0LjI3NDlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjUxOTdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzc2MF85OTg4XCIgeD1cIjAuNzE5NzI3XCIgeT1cIjAuOTgwNDY5XCIgd2lkdGg9XCI0NC4wNFwiIGhlaWdodD1cIjQ0LjA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd183NjBfOTk4OFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzYwXzk5ODhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzc2MF85OTg4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTguMlwiIGhlaWdodD1cIjE4LjJcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEzLjYzOTYgMTIuOTAwNClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFub0RhdGEgJiYgIWxvYWRpbmdcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImV4cG9ydFhMU1goKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMTkgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gIDxwYXRoIGQ9XCJNNy41MzM2OSAxMi44NDQxSDE1LjAyNDFMMTMuNTU2OCAxNC4zMTcyTDE0LjM1ODcgMTUuMTE5MUwxNy4yMDI0IDEyLjI3NTRMMTQuMzU4NyA5LjQzMTY0TDEzLjU1NjggMTAuMjMzNkwxNS4wMjQxIDExLjcwNjZINy41MzM2OVYxMi44NDQxWlwiIGZpbGw9XCJibGFja1wiLz5cclxuICA8cGF0aCBkPVwiTTEyLjY1MjYgOC44NjMxVjYuNTg4MUMxMi42NTMgNi41MTMyNSAxMi42Mzg3IDYuNDM5MDQgMTIuNjEwNCA2LjM2OTc1QzEyLjU4MjEgNi4zMDA0NSAxMi41NDA0IDYuMjM3NDMgMTIuNDg3NyA2LjE4NDI4TDguNTA2NCAyLjIwMzAzQzguNDUzMjYgMi4xNTAzMiA4LjM5MDIzIDIuMTA4NjIgOC4zMjA5NCAyLjA4MDMxQzguMjUxNjQgMi4wNTIwMSA4LjE3NzQ0IDIuMDM3NjYgOC4xMDI1OSAyLjAzODFIMi40MTUwOUMyLjExMzQgMi4wMzgxIDEuODI0MDggMi4xNTc5NCAxLjYxMDc1IDIuMzcxMjZDMS4zOTc0MyAyLjU4NDU4IDEuMjc3NTkgMi44NzM5MSAxLjI3NzU5IDMuMTc1NlYxNi44MjU2QzEuMjc3NTkgMTcuMTI3MyAxLjM5NzQzIDE3LjQxNjYgMS42MTA3NSAxNy42Mjk5QzEuODI0MDggMTcuODQzMyAyLjExMzQgMTcuOTYzMSAyLjQxNTA5IDE3Ljk2MzFIMTEuNTE1MUMxMS44MTY4IDE3Ljk2MzEgMTIuMTA2MSAxNy44NDMzIDEyLjMxOTQgMTcuNjI5OUMxMi41MzI3IDE3LjQxNjYgMTIuNjUyNiAxNy4xMjczIDEyLjY1MjYgMTYuODI1NlYxNS42ODgxSDExLjUxNTFWMTYuODI1NkgyLjQxNTA5VjMuMTc1Nkg2Ljk2NTA5VjYuNTg4MUM2Ljk2NTA5IDYuODg5NzggNy4wODQ5MyA3LjE3OTExIDcuMjk4MjYgNy4zOTI0M0M3LjUxMTU4IDcuNjA1NzUgNy44MDA5MSA3LjcyNTYgOC4xMDI1OSA3LjcyNTZIMTEuNTE1MVY4Ljg2MzFIMTIuNjUyNlpNOC4xMDI1OSA2LjU4ODFWMy40MDg3OEwxMS4yODE5IDYuNTg4MUg4LjEwMjU5WlwiIGZpbGw9XCJibGFja1wiLz5cclxuPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+RXhwb3J0PC9zcGFuPiA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJub0RhdGFcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1ub2RhdGEtdGFibGVcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS10aXRsZVwiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciB0aGlzIGV5ZSB0ZXN0IHRhYmxlPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIW5vRGF0YSAmJiAhbG9hZGluZ1wiIGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgPHRhYmxlICpuZ0lmPVwia2V5VHlwZSA9PT0nc3RvcmUnXCIgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnZGF0ZScpXCI+IERhdGUgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdkYXRlJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgd2lkdGg9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdkYXRlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0nc3VwZXJhZG1pbidcIiBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdSTU5hbWUnKVwiPiBSTSBOYW1lIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnUk1OYW1lJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgd2lkdGg9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdSTU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInVzZXJzPy5yb2xlID09PSdzdXBlcmFkbWluJyB8fCB1c2Vycz8ucm9sZSA9PT0nYWRtaW4nXCIgY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnY2x1c3Rlck5hbWUnKVwiPiBDbHVzdGVyIE5hbWUgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjbHVzdGVyTmFtZScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHdpZHRoPVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY2x1c3Rlck5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzdG9yZU5hbWUnKVwiPlN0b3JlIE5hbWUgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlTmFtZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnc3RvcmVJZCcpXCI+U3RvcmUgSUQgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZUlkJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgd2lkdGg9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZUlkJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidGhpcy50eXBlVmFsdWUgPT09J3JlbW90ZSdcIiBjbGFzcz1cInRleHQtc3RhcnRcIj5FbmdhZ2VtZW50IElEPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidGhpcy50eXBlVmFsdWUgIT09J3JlbW90ZSdcIiBjbGFzcz1cInRleHQtc3RhcnRcIj5PcHRvbSBJRDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInRoaXMudHlwZVZhbHVlICE9PSdyZW1vdGUnXCIgY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+UXVldWUgSUQ8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnY29tcGxpYW5jZVNjb3JlJylcIj5UYW5nbyBTY29yZSA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NvbXBsaWFuY2VTY29yZScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY29tcGxpYW5jZVNjb3JlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgndHJ1c3RTY29yZScpXCI+VHJ1c3QgU2NvcmUgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICd0cnVzdFNjb3JlJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd0cnVzdFNjb3JlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+IDwvdGg+XHJcbiA8dGg+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2NvdmVyZWRTdGVwc0FJJylcIj5TdGVwcyBDb3ZlcmVkIEJ5IEFJIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnY292ZXJlZFN0ZXBzQUknICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NvdmVyZWRTdGVwc0FJJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+IDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0aGlzLnR5cGVWYWx1ZSAhPT0ncmVtb3RlJ1wiPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNvcnQoJ3Zpc2l0b3JzVHlwZScpXCI+VmlzaXRvciBUeXBlIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAndmlzaXRvcnNUeXBlJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd2aXNpdG9yc1R5cGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4gPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1zdGFydFwiPlRlc3QgRHVyYXRpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU29ydCgnY29tbWVudCcpXCI+RXllIFRlc3QgU3RhdHVzIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnY29tbWVudCcgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY29tbWVudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj48c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Tb3J0KCdzdWJDb21tZW50JylcIj5Db21tZW50cyA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N1YkNvbW1lbnQnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N1YkNvbW1lbnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2F1ZGl0U3RhdHVzJylcIj5BdWRpdCBTdGF0dXMgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdhdWRpdFN0YXR1cycgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnYXVkaXRTdGF0dXMnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2F1ZGl0ZWRCeScpXCI+QXVkaXRlZCBCeSA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2F1ZGl0ZWRCeScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnYXVkaXRlZEJ5JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1zdGFydFwiPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvYmogb2YgZXllVGVzdERhdGE7IGxldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LmRhdGUgfCBkYXRlOidkZCBNTU0sIHl5eXknfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0nc3VwZXJhZG1pbidcIj57e29iaj8uUk1OYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09J3N1cGVyYWRtaW4nIHx8IHVzZXJzPy5yb2xlID09PSdhZG1pbidcIj57e29iaj8uY2x1c3Rlck5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8uc3RvcmVOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LnN0b3JlSWR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudHlwZVZhbHVlID09PSdyZW1vdGUnXCIgY2xhc3M9XCJlbmdhZ2UtdGV4dFwiPnt7b2JqPy5lbmdhZ2VtZW50SWR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudHlwZVZhbHVlICE9PSdyZW1vdGUnXCI+e3tvYmo/Lm9wdHVtSWQgPyBvYmo/Lm9wdHVtSWQgOicnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidGhpcy50eXBlVmFsdWUgIT09J3JlbW90ZSdcIiBjbGFzcz1cImVuZ2FnZS10ZXh0XCI+e3tvYmo/LnF1ZXVlSWQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5xdWV1ZUlkOicnfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICB7eyBvYmo/LmNvbXBsaWFuY2VTY29yZSA/PyAnLS0nIH19XHJcbjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy50cnVzdFNjb3JlID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8uY292ZXJlZFN0ZXBzQUkgPyBvYmo/LmNvdmVyZWRTdGVwc0FJOictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZVwiICpuZ0lmPVwidGhpcy50eXBlVmFsdWUgIT09J3JlbW90ZSdcIj57e29iaj8udmlzaXRvcnNUeXBlID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8udmlzaXRvcnNUeXBlOictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8ubWluID8gb2JqPy5taW4gOicwJ319IG1pbnMge3tvYmo/LnNlYyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmo/LnNlYzonMCd9fSBzZWNzPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidGhpcy50eXBlVmFsdWUgIT09J3JlbW90ZSdcIj5cclxuICA8c3BhbiBcclxuICAgIGNsYXNzPVwiYmFkZ2VcIiBcclxuICAgIFtuZ0NsYXNzXT1cIm9iaj8uY29tbWVudCA/ICdiYWRnZS1saWdodC1kYW5nZXInIDogJ2JhZGdlLWxpZ2h0LXN1Y2Nlc3MnXCI+XHJcbiAgICB7eyBvYmo/LmNvbW1lbnQgPyAnRmFrZScgOiAnR2VudWluZScgfX1cclxuICA8L3NwYW4+XHJcbjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LnN1YkNvbW1lbnQgPyBvYmo/LnN1YkNvbW1lbnQ6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvYmo/LmF1ZGl0U3RhdHVzID09PSdZZXQtdG8tQXVkaXQnXCI+e3tvYmo/LmF1ZGl0U3RhdHVzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib2JqPy5hdWRpdFN0YXR1cyA9PT0nUmUtQXVkaXRlZCdcIj57e29iaj8uYXVkaXRTdGF0dXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvYmo/LmF1ZGl0U3RhdHVzID09PSdBdWRpdGVkJ1wiPnt7b2JqPy5hdWRpdFN0YXR1c319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1pbmZvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9iaj8uYXVkaXRTdGF0dXMgPT09J0luLVByb2dyZXNzJ1wiPnt7b2JqPy5hdWRpdFN0YXR1c319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LmF1ZGl0ZWRCeT9vYmo/LmF1ZGl0ZWRCeTpcIi1cIn19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZXllVGVzdFZpZXcob2JqKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjgzMzQ5NiA4LjAwMDE2QzAuODMzNDk2IDguMDAwMTYgNC4xNjY4MyAxLjMzMzUgMTAuMDAwMiAxLjMzMzVDMTUuODMzNSAxLjMzMzUgMTkuMTY2OCA4LjAwMDE2IDE5LjE2NjggOC4wMDAxNkMxOS4xNjY4IDguMDAwMTYgMTUuODMzNSAxNC42NjY4IDEwLjAwMDIgMTQuNjY2OEM0LjE2NjgzIDE0LjY2NjggMC44MzM0OTYgOC4wMDAxNiAwLjgzMzQ5NiA4LjAwMDE2WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjAwMDIgMTAuNTAwMkMxMS4zODA5IDEwLjUwMDIgMTIuNTAwMiA5LjM4MDg3IDEyLjUwMDIgOC4wMDAxNkMxMi41MDAyIDYuNjE5NDUgMTEuMzgwOSA1LjUwMDE2IDEwLjAwMDIgNS41MDAxNkM4LjYxOTQ1IDUuNTAwMTYgNy41MDAxNiA2LjYxOTQ1IDcuNTAwMTYgOC4wMDAxNkM3LjUwMDE2IDkuMzgwODcgOC42MTk0NSAxMC41MDAyIDEwLjAwMDIgMTAuNTAwMlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8dGFibGUgKm5nSWY9XCJrZXlUeXBlID09PSdybSdcIiBjbGFzcz1cInctMTAwIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdSTU5hbWUnKVwiPiBSTSBOYW1lIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnUk1OYW1lJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgd2lkdGg9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdSTU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjbHVzdGVyQ291bnQnKVwiPiBDbHVzdGVycyBDb3VudCA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NsdXN0ZXJDb3VudCcgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY2x1c3RlckNvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnc3RvcmVzQ291bnQnKVwiPlN0b3JlcyBDb3VudCA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3Jlc0NvdW50JyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZXNDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgndG90YWxGaWxlcycpXCI+VG90YWwgVGFuZ28gQUkgRmlsZXMgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICd0b3RhbEZpbGVzJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd0b3RhbEZpbGVzJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjb21wbGV0ZWRGaWxlcycpXCI+VHJ1c3QgQXVkaXQgQ29tcGxldGVkIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnY29tcGxldGVkRmlsZXMnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NvbXBsZXRlZEZpbGVzJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjb21wbGlhbmNlU2NvcmUnKVwiPlRhbmdvIFNjb3JlIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnY29tcGxpYW5jZVNjb3JlJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdjb21wbGlhbmNlU2NvcmUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3RydXN0U2NvcmUnKVwiPlRydXN0IFNjb3JlIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAndHJ1c3RTY29yZScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAndHJ1c3RTY29yZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9iaiBvZiBleWVUZXN0RGF0YTsgbGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8uUk1OYW1lID8gb2JqPy5STU5hbWU6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy5jbHVzdGVyQ291bnQgPyBvYmo/LmNsdXN0ZXJDb3VudDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LnN0b3Jlc0NvdW50ID8gb2JqPy5zdG9yZXNDb3VudDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LnRvdGFsRmlsZXMgPz8gJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy5jb21wbGV0ZWRGaWxlcyA/PyAnLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iai5jb21wbGlhbmNlU2NvcmUgPz8gJy0tJ319XHJcbiBcclxuPC90ZD5cclxuPHRkPlxyXG4gIHt7IG9iaj8udHJ1c3RTY29yZSA/PyAnLS0nIH19XHJcbjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInR5cGVWYWwoJ2NsdXN0ZXInLG9iailcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC44MzM0OTYgOC4wMDAxNkMwLjgzMzQ5NiA4LjAwMDE2IDQuMTY2ODMgMS4zMzM1IDEwLjAwMDIgMS4zMzM1QzE1LjgzMzUgMS4zMzM1IDE5LjE2NjggOC4wMDAxNiAxOS4xNjY4IDguMDAwMTZDMTkuMTY2OCA4LjAwMDE2IDE1LjgzMzUgMTQuNjY2OCAxMC4wMDAyIDE0LjY2NjhDNC4xNjY4MyAxNC42NjY4IDAuODMzNDk2IDguMDAwMTYgMC44MzM0OTYgOC4wMDAxNlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC4wMDAyIDEwLjUwMDJDMTEuMzgwOSAxMC41MDAyIDEyLjUwMDIgOS4zODA4NyAxMi41MDAyIDguMDAwMTZDMTIuNTAwMiA2LjYxOTQ1IDExLjM4MDkgNS41MDAxNiAxMC4wMDAyIDUuNTAwMTZDOC42MTk0NSA1LjUwMDE2IDcuNTAwMTYgNi42MTk0NSA3LjUwMDE2IDguMDAwMTZDNy41MDAxNiA5LjM4MDg3IDguNjE5NDUgMTAuNTAwMiAxMC4wMDAyIDEwLjUwMDJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPHRhYmxlICpuZ0lmPVwia2V5VHlwZSA9PT0nY2x1c3RlcidcIiBjbGFzcz1cInctMTAwIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjbHVzdGVyTmFtZScpXCI+IENsdXN0ZXJzIE5hbWUgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjbHVzdGVyTmFtZScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY2x1c3Rlck5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzdG9yZXNDb3VudCcpXCI+U3RvcmVzIENvdW50IDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnc3RvcmVzQ291bnQnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3Jlc0NvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCd0b3RhbEZpbGVzJylcIj5Ub3RhbCBUYW5nbyBBSSBGaWxlcyA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3RvdGFsRmlsZXMnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3RvdGFsRmlsZXMnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2NvbXBsZXRlZEZpbGVzJylcIj5UcnVzdCBBdWRpdCBDb21wbGV0ZWQgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjb21wbGV0ZWRGaWxlcycgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY29tcGxldGVkRmlsZXMnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2NvbXBsaWFuY2VTY29yZScpXCI+VGFuZ28gU2NvcmUgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjb21wbGlhbmNlU2NvcmUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NvbXBsaWFuY2VTY29yZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgndHJ1c3RTY29yZScpXCI+VHJ1c3QgU2NvcmUgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICd0cnVzdFNjb3JlJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd0cnVzdFNjb3JlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb2JqIG9mIGV5ZVRlc3REYXRhOyBsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy5jbHVzdGVyTmFtZSA/IG9iaj8uY2x1c3Rlck5hbWU6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy5zdG9yZXNDb3VudCA/IG9iaj8uc3RvcmVzQ291bnQ6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy50b3RhbEZpbGVzID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8uY29tcGxldGVkRmlsZXMgPz8gJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICB7eyBvYmo/LmNvbXBsaWFuY2VTY29yZSA/PyAgJy0tJyB9fVxyXG48L3RkPlxyXG48dGQ+XHJcbiAge3sgb2JqPy50cnVzdFNjb3JlID8/ICctLScgfX1cclxuPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidHlwZVZhbCgnc3RvcmUnLG9iailcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC44MzM0OTYgOC4wMDAxNkMwLjgzMzQ5NiA4LjAwMDE2IDQuMTY2ODMgMS4zMzM1IDEwLjAwMDIgMS4zMzM1QzE1LjgzMzUgMS4zMzM1IDE5LjE2NjggOC4wMDAxNiAxOS4xNjY4IDguMDAwMTZDMTkuMTY2OCA4LjAwMDE2IDE1LjgzMzUgMTQuNjY2OCAxMC4wMDAyIDE0LjY2NjhDNC4xNjY4MyAxNC42NjY4IDAuODMzNDk2IDguMDAwMTYgMC44MzM0OTYgOC4wMDAxNlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC4wMDAyIDEwLjUwMDJDMTEuMzgwOSAxMC41MDAyIDEyLjUwMDIgOS4zODA4NyAxMi41MDAyIDguMDAwMTZDMTIuNTAwMiA2LjYxOTQ1IDExLjM4MDkgNS41MDAxNiAxMC4wMDAyIDUuNTAwMTZDOC42MTk0NSA1LjUwMDE2IDcuNTAwMTYgNi42MTk0NSA3LjUwMDE2IDguMDAwMTZDNy41MDAxNiA5LjM4MDg3IDguNjE5NDUgMTAuNTAwMiAxMC4wMDAyIDEwLjUwMDJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlclwiICpuZ0lmPVwiIW5vRGF0YSAmJiAhbG9hZGluZ1wiPlxyXG4gICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cInBhZ2VTaXplXCIgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIlxyXG4gICAgICAgICAgICBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
881
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXllLXRlc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9leWUtdGVzdC1hdWRpdC9leWUtdGVzdC9leWUtdGVzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2V5ZS10ZXN0LWF1ZGl0L2V5ZS10ZXN0L2V5ZS10ZXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUdoRixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxpQkFBaUIsQ0FBQztBQUd6QixPQUFPLEVBQWdCLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTOUUsTUFBTSxPQUFPLGdCQUFnQjtJQWlEakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7SUFDQztJQUNBO0lBeERWLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxXQUFXLENBQVk7SUFDdkIsaUJBQWlCLEdBQVEsRUFBRSxDQUFDO0lBQzVCLFlBQVksQ0FBTTtJQUNsQixZQUFZLENBQU07SUFDbEIsYUFBYSxHQUFRLEVBQUUsQ0FBQztJQUN4QixXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFDakIsVUFBVSxDQUFNO0lBQ1IsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDakMsTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUNqQixTQUFTLEdBQVUsRUFBRSxDQUFDO0lBQ3RCLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDZixPQUFPLEdBQUcsSUFBSSxD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QyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsYUFBYTtTQUN2RCxDQUFDO1FBRUYsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDO0lBQzdDLENBQUM7d0dBdjlCVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQixvRENoQjdCLGtoM0RBNHhCTTs7NEZENXdCTyxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCBcImRheWpzL2xvY2FsZS9lblwiO1xyXG5pbXBvcnQgdXRjIGZyb20gXCJkYXlqcy9wbHVnaW4vdXRjXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVHJheFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEV5ZVRlc3RBdWRpdFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZXllLXRlc3QtYXVkaXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItZXllLXRlc3RcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2V5ZS10ZXN0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9leWUtdGVzdC5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXllVGVzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBkYXlqcyA9IGRheWpzO1xyXG4gIGV5ZVRlc3RGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc2VsZWN0ZWREYXRlUmFuZ2U6IGFueSA9IHt9O1xyXG4gIHNlbGVjdGVkRGF0ZTogYW55O1xyXG4gIGlzQ3VzdG9tRGF0ZTogYW55O1xyXG4gIGhlYWRlckZpbHRlcnM6IGFueSA9IFtdO1xyXG4gIENsdXN0ZXJMaXN0OiBhbnkgPSBbXTtcclxuICBzdG9yZXM6IGFueSA9IFtdO1xyXG4gIGNsaWVudERhdGE6IGFueTtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBncm91cHM6IGFueSA9IFtdO1xyXG4gIHN0b3JlTGlzdDogYW55W10gPSBbXTtcclxuICBub0RhdGEgPSBmYWxzZTtcclxuICBsb2FkaW5nID0gdHJ1ZTtcclxuICBleWVUZXN0RGF0YTogYW55O1xyXG4gIHR5cGVWYWx1ZTogYW55O1xyXG4gIHR5cGU6IGFueSA9IFtcclxuICAgIHsgdmFsdWU6IFwicGh5c2ljYWxcIiwgbGFiZWw6IFwiRXllIFRlc3QgQ29tcGxpYW5jZVwiIH0sXHJcbiAgICB7IHZhbHVlOiBcInJlbW90ZVwiLCBsYWJlbDogXCJSZW1vdGUgVGVzdCBDb21wbGlhbmNlXCIgfSxcclxuICBdO1xyXG4gIGF1ZGl0VHlwZTogYW55ID0gW1xyXG4gICAgeyBsYWJlbDogXCJBbGxcIiwgdmFsdWU6IFwiYWxsXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiQWR1bHRcIiwgdmFsdWU6IFwiYWR1bHRcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJLaWRcIiwgdmFsdWU6IFwia2lkXCIgfSxcclxuICBdO1xyXG4gIHR5cGVQZXJjZW50YWdlQXJyYXk6IGFueSA9IFtcclxuICAgIHsgbGFiZWw6IFwiQWxsXCIsIHZhbHVlOiBudWxsIH0sXHJcbiAgICB7IGxhYmVsOiBcIkxlc3MgdGhhbiA1MCVcIiwgdmFsdWU6IFwiNTBcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJMZXNzIHRoYW4gNDAlXCIsIHZhbHVlOiBcIjQwXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiTGVzcyB0aGFuIDMwJVwiLCB2YWx1ZTogXCIzMFwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIkxlc3MgdGhhbiAyMCVcIiwgdmFsdWU6IFwiMjBcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJMZXNzIHRoYW4gMTAlXCIsIHZhbHVlOiBcIjEwXCIgfSxcclxuICBdO1xyXG5cclxuICBuZWFyQWRkaXRpb25BcnJheTogYW55ID0gW1xyXG4gICAgeyBsYWJlbDogXCJXaXRoIE5lYXIgQWRkaXRpb25cIiwgdmFsdWU6IFwid2l0aFwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIldpdGhvdXQgTmVhciBBZGRpdGlvblwiLCB2YWx1ZTogXCJ3aXRob3V0XCIgfSxcclxuICBdO1xyXG5cclxuICBjYXRlZ29yeUFycmF5OiBhbnkgPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiBcIkdlbnVpbmUgRXllIFRlc3RcIixcclxuICAgICAgdmFsdWU6IFwiZ2VudWluZVwiLFxyXG4gICAgfSxcclxuICAgIHsgbGFiZWw6IFwiRmFrZSBFeWUgVGVzdFwiLCB2YWx1ZTogXCJmYWtlXCIgfSxcclxuICBdO1xyXG4gIHNob3dFeWVUZXN0ID0gdHJ1ZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSB0cmF4U2VydmljZTogVHJheFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGV5ZVNlcnZpY2U6IEV5ZVRlc3RBdWRpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgdHM6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnR5cGVWYWx1ZSA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoXCJ0eXBlVmFsdWVcIik7XHJcbiAgfVxyXG4gIGhlYWREYXRlOiBhbnk7XHJcbiAgaGVhZERhdGVFbmQ6IGFueTtcclxuICB1c2VyczogYW55O1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuICBjbG9zZUV5ZVRlc3QoKSB7XHJcbiAgICB0aGlzLnNob3dFeWVUZXN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwiXCIpO1xyXG4gICAgdGhpcy51c2VycyA9IHVzZXJpbmZvO1xyXG4gICAgaWYgKCF0aGlzLnR5cGVWYWx1ZSkge1xyXG4gICAgICB0aGlzLnR5cGVWYWx1ZSA9IFwicGh5c2ljYWxcIjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNDdXN0b21EYXRlID0gKG06IGRheWpzLkRheWpzKSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzVmFsaWREYXRlID0gbSA+IHRoaXMuZGF5anMoKTtcclxuICAgICAgcmV0dXJuIGlzVmFsaWREYXRlID8gXCJpbnZhbGlkLWRhdGVcIiA6IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSB7XHJcbiAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5XCIpLmZvcm1hdChcIkRELU1NLVlZWVlcIiksXHJcbiAgICAgIGVuZERhdGU6IHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgxLCBcImRheVwiKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpLFxyXG4gICAgfTtcclxuICAgIGxldCBoZWFkZXJGaWx0ZXJzID0gSlNPTi5wYXJzZShcclxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcInt9XCJcclxuICAgICk7XHJcbiAgICBpZiAoaGVhZGVyRmlsdGVycz8uZGF0ZT8uc3RhcnREYXRlICYmIGhlYWRlckZpbHRlcnM/LmRhdGU/LmVuZERhdGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoXHJcbiAgICAgICAgICBoZWFkZXJGaWx0ZXJzLmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICAgICAgXCJZWVlZLU1NLUREXCJcclxuICAgICAgICApLmZvcm1hdChcIkRELU1NLVlZWVlcIiksXHJcbiAgICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcyhoZWFkZXJGaWx0ZXJzLmRhdGUuZW5kRGF0ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChcclxuICAgICAgICAgIFwiREQtTU0tWVlZWVwiXHJcbiAgICAgICAgKSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHBhcmFtcyAmJlxyXG4gICAgICAgIHBhcmFtc1tcImZyb21EYXRlXCJdICYmXHJcbiAgICAgICAgcGFyYW1zW1widG9EYXRlXCJdICYmXHJcbiAgICAgICAgcGFyYW1zW1widHlwZVZhbHVlXCJdXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudHlwZVZhbHVlID0gcGFyYW1zW1widHlwZVZhbHVlXCJdID8gcGFyYW1zW1widHlwZVZhbHVlXCJdIDogXCJwaHlzaWNhbFwiO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSA9IHRoaXMuZGF5anMoXHJcbiAgICAgICAgICBwYXJhbXNbXCJmcm9tRGF0ZVwiXSxcclxuICAgICAgICAgIFwiWVlZWS1NTS1ERFwiXHJcbiAgICAgICAgKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSA9IHRoaXMuZGF5anMoXHJcbiAgICAgICAgICBwYXJhbXNbXCJ0b0RhdGVcIl0sXHJcbiAgICAgICAgICBcIllZWVktTU0tRERcIlxyXG4gICAgICAgICkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3RyYXgvYXVkaXRcIl0sIHtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgIGZyb21EYXRlOiB0aGlzLmRheWpzKFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlLFxyXG4gICAgICAgICAgICAgIFwiREQtTU0tWVlZWVwiXHJcbiAgICAgICAgICAgICkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSxcclxuICAgICAgICAgICAgdG9EYXRlOiB0aGlzLmRheWpzKFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSxcclxuICAgICAgICAgICAgICBcIkRELU1NLVlZWVlcIlxyXG4gICAgICAgICAgICApLmZvcm1hdChcIllZWVktTU0tRERcIiksXHJcbiAgICAgICAgICAgIHR5cGVWYWx1ZTogdGhpcy50eXBlVmFsdWUgPyB0aGlzLnR5cGVWYWx1ZSA6IFwicGh5c2ljYWxcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbGV0IGRhdGVUaW1lID0gdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGU7XHJcbiAgICB0aGlzLmhlYWREYXRlID0gdGhpcy5kYXlqcyhkYXRlVGltZSwgXCJERC1NTS1ZWVlZXCIpLmZvcm1hdChcIk1NTSwgRERcIik7XHJcbiAgICB0aGlzLmhlYWREYXRlRW5kID0gdGhpcy5kYXlqcyhcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlLFxyXG4gICAgICBcIkRELU1NLVlZWVlcIlxyXG4gICAgKS5mb3JtYXQoXCJNTU0gREQsIFlZWVlcIik7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiVHlwZVwiKT8uc2V0VmFsdWUodGhpcy50eXBlVmFsdWUpO1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGxldCBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpXHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCkge1xyXG4gICAgICAgICAgICAgIHN3aXRjaCAodGhpcy51c2Vycz8ucm9sZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInN1cGVyYWRtaW5cIjpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxSbSgpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJhZG1pblwiOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbEdyb3VwcygpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJ1c2VyXCI6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsU3RvcmVzKCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxTdG9yZXMoKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgIHRoaXMub25TdWJtaXQoKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlcnMgJiYgdGhpcy51c2Vycz8uY2xpZW50SWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50ID0gdGhpcy51c2Vycy5jbGllbnRJZDtcclxuICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudXNlcnM/LnJvbGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJzdXBlcmFkbWluXCI6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUm0oKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiYWRtaW5cIjpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwidXNlclwiOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsU3RvcmVzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgdGhpcy5vblN1Ym1pdCgpO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRBYnNWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IE1hdGguYWJzKHZhbHVlKSA6IDA7XHJcbiAgfVxyXG4gIC8vIGNsdXN0ZXJzIG9sZCBhcGkgcmVtb3ZlZFxyXG4gIC8vIGdldEFsbEdyb3VwcygpIHtcclxuICAvLyAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Y2x1c3RlcnMoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQsIGdyb3VwOiBbXSwgY2l0eTogW10gfSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gcmVzLmRhdGEuZ3JvdXBEYXRhXHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHRoaXMuQ2x1c3Rlckxpc3QgPSBbXVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcbiAgbG9hZGluZzEgPSB0cnVlO1xyXG4gIC8vIGNsdXN0ZXJzIG5ldyBhcGlcclxuICBnZXRBbGxHcm91cHMoZXZlbnQ/OiBhbnkpIHtcclxuICBcclxuICAgIGxldCBybUxpc3Q6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5DbHVzdGVyTGlzdCA9IFtdO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5SbUxpc3QpKSB7XHJcbiAgICAgIHRoaXMuZXllVGVzdEZvcm0udmFsdWUuUm1MaXN0LmZvckVhY2goKGVsOiBhbnkpID0+IHtcclxuICAgICAgICBybUxpc3QucHVzaChlbD8uZW1haWwpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGV2ZW50Py5tYXAoKGVsOiBhbnkpID0+IGVsPy5lbWFpbCkgfHwgW3RoaXMudXNlcnM/LmVtYWlsXTtcclxuICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50ID8gdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCA6IFwiXCIsXHJcbiAgICAgIHJtTGlzdDogcm1MaXN0Lmxlbmd0aCA+IDAgPyBybUxpc3QgOiBbdGhpcy51c2Vycz8uZW1haWxdLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZXllU2VydmljZS5nZXRDbHVzdGVycyhvYmopLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5DbHVzdGVyTGlzdCA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJDbHVzdGVyTGlzdFwiKT8uc2V0VmFsdWUodGhpcy5DbHVzdGVyTGlzdCk7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwcyA9IHRoaXMuQ2x1c3Rlckxpc3QubWFwKChlbDogYW55KSA9PiBlbC5jbHVzdGVyTmFtZSk7XHJcbiAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcxID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoXCJDbHVzdGVyIGZldGNoIGZhaWxlZDpcIiwgZXJyKTtcclxuICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gW107XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGNsaWVudERldGFpbHMoKSB7XHJcbiAgLy8gICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNsaWVudCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50IH0pLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLmNsaWVudERhdGEgPSByZXMuZGF0YS5yZXN1bHRcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuICBnZXRBbGxTdG9yZXMoKSB7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlXHJcbiAgICAgIC5nZXRTdG9yZXNsaXN0KHtcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQsXHJcbiAgICAgICAgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLFxyXG4gICAgICAgIGNpdHk6IFtdLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJzdG9yZUxpc3RcIik/LnNldFZhbHVlKHRoaXMuc3RvcmVMaXN0KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nMSA9IGZhbHNlO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHlwZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIlR5cGVcIik/LnNldFZhbHVlKGV2ZW50KTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvdHJheC9hdWRpdFwiXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgIGZyb21EYXRlOiB0aGlzLmRheWpzKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUsXHJcbiAgICAgICAgICBcIkRELU1NLVlZWVlcIlxyXG4gICAgICAgICkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSxcclxuICAgICAgICB0b0RhdGU6IHRoaXMuZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlLCBcIkRELU1NLVlZWVlcIikuZm9ybWF0KFxyXG4gICAgICAgICAgXCJZWVlZLU1NLUREXCJcclxuICAgICAgICApLFxyXG4gICAgICAgIHR5cGVWYWx1ZTogZXZlbnQsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBhdWRpdFR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJhdWRpdFR5cGVcIik/LnNldFZhbHVlKGV2ZW50KTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdHlwZVBlcmNlbnRhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJjb21wbGlhbmNlU2NvcmVcIik/LnNldFZhbHVlKGV2ZW50KTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBuZWFyQWRkaXRpb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJuZWFyQWRkaXRpb25cIik/LnNldFZhbHVlKGV2ZW50KTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBjYXRlZ29yeVR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJjYXRlZ29yeVwiKT8uc2V0VmFsdWUoZXZlbnQpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIGRhdGVjaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnN0YXJ0RGF0ZSAmJiBldmVudC5lbmREYXRlKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZSkuaXNWYWxpZCgpICYmXHJcbiAgICAgICAgdGhpcy5kYXlqcyhldmVudC5lbmREYXRlKS5pc1ZhbGlkKClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUgPSB0aGlzLmRheWpzKFxyXG4gICAgICAgICAgZXZlbnQuc3RhcnREYXRlLFxyXG4gICAgICAgICAgXCJERC1NTS1ZWVlZXCJcclxuICAgICAgICApLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlID0gdGhpcy5kYXlqcyhcclxuICAgICAgICAgIGV2ZW50LmVuZERhdGUsXHJcbiAgICAgICAgICBcIkRELU1NLVlZWVlcIlxyXG4gICAgICAgICkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5leWVUZXN0Rm9ybVxyXG4gICAgICAgICAgLmdldChcImZyb21EYXRlXCIpXHJcbiAgICAgICAgICA/LnNldFZhbHVlKHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSAmJlxyXG4gICAgICAgICAgdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSkuaXNWYWxpZCgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmhlYWREYXRlID0gdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSkuZm9ybWF0KFxyXG4gICAgICAgICAgICBcIk1NTSwgRERcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leWVUZXN0Rm9ybVxyXG4gICAgICAgICAgLmdldChcInRvRGF0ZVwiKVxyXG4gICAgICAgICAgPy5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSAmJlxyXG4gICAgICAgICAgdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUpLmlzVmFsaWQoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oZWFkRGF0ZUVuZCA9IHRoaXMuZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlKS5mb3JtYXQoXHJcbiAgICAgICAgICAgIFwiTU1NIERELCBZWVlZXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvdHJheC9hdWRpdFwiXSwge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgZnJvbURhdGU6IHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlLFxyXG4gICAgICAgICAgICB0b0RhdGU6IHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSxcclxuICAgICAgICAgICAgdHlwZVZhbHVlOiB0aGlzLnR5cGVWYWx1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3RhcnREYXRlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZSkuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuaXNDdXN0b21EYXRlID0gKG06IGRheWpzLkRheWpzKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNWYWxpZERhdGUgPVxyXG4gICAgICAgICAgbSA+IHRoaXMuZGF5anMoKSB8fCBtID4gdGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUuYWRkKDYwLCBcImRheXNcIikpO1xyXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRGF0ZSA/IFwiaW52YWxpZC1kYXRlXCIgOiBmYWxzZTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0VmFsaWRhdGlvbigpIHtcclxuICAgIHRoaXMuaXNDdXN0b21EYXRlID0gKG06IGRheWpzLkRheWpzKSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBnaXZlbiBkYXRlIGlzIGJlZm9yZSB5ZXN0ZXJkYXlcclxuICAgICAgcmV0dXJuIG0uaXNBZnRlcih0aGlzLmRheWpzKCksIFwiZGF5XCIpID8gXCJpbnZhbGlkLWRhdGVcIiA6IGZhbHNlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkVHlwZTogYW55O1xyXG4gIGNyZWF0ZUZvcm0oKSB7XHJcbiAgICBjb25zdCBpc1JlbW90ZSA9IHRoaXMuc2VsZWN0ZWRUeXBlID09PSBcInBoeXNpY2FsXCI7IC8vIG9yIGhvd2V2ZXIgeW91J3JlIGRldGVybWluaW5nIGl0XHJcblxyXG4gICAgdGhpcy5leWVUZXN0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBmcm9tRGF0ZTogW1xyXG4gICAgICAgIHRoaXMuZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXHJcbiAgICAgICAgICBcIllZWVktTU0tRERcIlxyXG4gICAgICAgICksXHJcbiAgICAgIF0sXHJcbiAgICAgIHRvRGF0ZTogW1xyXG4gICAgICAgIHRoaXMuZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlLCBcIkRELU1NLVlZWVlcIikuZm9ybWF0KFxyXG4gICAgICAgICAgXCJZWVlZLU1NLUREXCJcclxuICAgICAgICApLFxyXG4gICAgICBdLFxyXG4gICAgICB0eXBlOiB0aGlzLnR5cGVWYWx1ZSxcclxuICAgICAgY29tcGxpYW5jZVNjb3JlOiBbbnVsbF0sXHJcbiAgICAgIC4uLihpc1JlbW90ZSA/IHt9IDogeyBjYXRlZ29yeTogW1wiZ2VudWluZVwiXSB9KSxcclxuICAgICAgbmVhckFkZGl0aW9uOiBbXCJcIl0sXHJcbiAgICAgIENsdXN0ZXJMaXN0OiBbdGhpcy5ncm91cHNdLFxyXG4gICAgICBzdG9yZUxpc3Q6IFt0aGlzLnN0b3Jlc10sXHJcbiAgICAgIFJtTGlzdDogW3RoaXMuUm1MaXN0XSxcclxuICAgICAgLi4uKGlzUmVtb3RlID8ge30gOiB7IGF1ZGl0VHlwZTogXCJhbGxcIiB9KSwgLy8gQ29uZGl0aW9uYWxseSBhZGQgYXVkaXRUeXBlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uZ3JvdXBTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gdGhpcy5sb2FkaW5nMSA9IHRydWU7XHJcbiAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIkNsdXN0ZXJMaXN0XCIpPy5zZXRWYWx1ZShldmVudCk7XHJcbiAgICB0aGlzLmdyb3VwcyA9IGV2ZW50Lm1hcCgoZWw6IGFueSkgPT4gZWwuY2x1c3Rlck5hbWUpO1xyXG4gICAgdGhpcy50cmF4U2VydmljZVxyXG4gICAgICAuZ2V0U3RvcmVzbGlzdCh7XHJcbiAgICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgICAgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLFxyXG4gICAgICAgIGNpdHk6IFtdLFxyXG4gICAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJzdG9yZUxpc3RcIik/LnNldFZhbHVlKHRoaXMuc3RvcmVMaXN0KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nMSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm9uU3VibWl0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uU3RvcmVTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJzdG9yZUxpc3RcIik/LnNldFZhbHVlKGV2ZW50KTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBzZWFyY2hWYWx1ZTogYW55ID0gXCJcIjtcclxuICBzZWFyY2hEYXRhKCkge1xyXG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWU7XHJcbiAgICB0aGlzLm9uU3VibWl0KCk7XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0aW9uU2l6ZXM6IGFueVtdID0gW107XHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBzZXRQYWdpbmF0aW9uU2l6ZXMoKSB7XHJcbiAgICBpZiAodGhpcy50b3RhbEl0ZW1zID4gMTApIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnRvdGFsSXRlbXNdOyAvLyBKdXN0IG9uZSBvcHRpb24gaWYgbGVzcyB0aGFuIDEwXHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU2l6ZXNbMF07XHJcbiAgfVxyXG4gIFJtTGlzdERhdGE6IGFueSA9IFtdO1xyXG4gIGtleVR5cGU6IGFueTtcclxuICBybUVtYWlsOiBhbnk7XHJcbiAgLy8gdHlwZVZhbCh2YWw6IGFueSwgb2JqPzogYW55KSB7XHJcbiAgLy8gICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gIC8vICAgdGhpcy5zZWFyY2hWYWx1ZSA9IFwiXCI7XHJcbiAgLy8gICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgLy8gICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgLy8gICB0aGlzLnBhZ2VTaXplID0gMTA7XHJcbiAgLy8gICB0aGlzLmtleVR5cGUgPSB2YWw7XHJcbiAgLy8gICB0aGlzLnJtRW1haWwgPSBvYmo/LlJNRW1haWwgPyBvYmo/LlJNRW1haWwgOiBvYmo7XHJcbiAgLy8gICAvLyDwn5SNIGZpbmQgdGhlIFJNIG9iamVjdCBpbiB5b3VyIFJtTGlzdCBhcnJheVxyXG4gIC8vICAgIGlmICh0aGlzLnVzZXJzPy5yb2xlID09PSBcInN1cGVyYWRtaW5cIiAmJiB0aGlzLlJtTGlzdD8ubGVuZ3RoKSB7XHJcbiAgLy8gICB0aGlzLlJtTGlzdD8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgLy8gICAgIGlmIChlbGVtZW50Py5lbWFpbCA9PT0gdGhpcy5ybUVtYWlsKSB7XHJcbiAgLy8gICAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJSbUxpc3RcIik/LnNldFZhbHVlKFtlbGVtZW50XSk7XHJcbiAgLy8gICAgICAgdGhpcy5vblJtU2VsZWN0KFtlbGVtZW50XSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuICAvLyAgIHRoaXMuZ3JvdXBzID0gb2JqPy5jbHVzdGVyTmFtZSA/IFtvYmo/LmNsdXN0ZXJOYW1lXSA6IHRoaXMuZ3JvdXBzO1xyXG4gIC8vICAgIGlmIChcclxuICAvLyAgICAgdGhpcy51c2Vycz8ucm9sZSA9PT0gXCJhZG1pblwiICYmXHJcbiAgLy8gICAgIHRoaXMuQ2x1c3Rlckxpc3Q/Lmxlbmd0aCAmJlxyXG4gIC8vICAgICBvYmo/LmNsdXN0ZXJOYW1lXHJcbiAgLy8gICApIHtcclxuICAvLyAgIHRoaXMuQ2x1c3Rlckxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgLy8gICAgIGlmIChlbGVtZW50Py5jbHVzdGVyTmFtZSA9PT0gdGhpcy5ncm91cHMpIHtcclxuICAvLyAgICAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIkNsdXN0ZXJMaXN0XCIpPy5zZXRWYWx1ZShbZWxlbWVudF0pO1xyXG4gIC8vICAgICAgIHRoaXMub25ncm91cFNlbGVjdChbZWxlbWVudF0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcbiAgLy8gICB0aGlzLnNvcnRlZENvbHVtbiA9IFwiZGF0ZVwiO1xyXG4gIC8vICAgaWYgKHRoaXMucm1FbWFpbCA9PT0gXCJcIikgdGhpcy5vblN1Ym1pdCgpO1xyXG4gIC8vIH1cclxuICBkZW1vR3JhcGljczphbnk7XHJcbiAgdHlwZVZhbCh2YWw6IGFueSwgb2JqPzogYW55KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh2YWwsIG9iaik7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9IFwiXCI7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gMTA7XHJcbiAgICB0aGlzLmtleVR5cGUgPSB2YWw7XHJcbiAgICB0aGlzLnNvcnRlZENvbHVtbiA9IFwiZGF0ZVwiO1xyXG50aGlzLmRlbW9HcmFwaWNzID0gdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5hdWRpdFR5cGU7XHJcbmlmICh0aGlzLmRlbW9HcmFwaWNzID09PSBcImFsbFwiKSB7XHJcbiAgdGhpcy5kZW1vR3JhcGljcyA9IFtcImFkdWx0XCIsIFwia2lkXCJdO1xyXG59XHJcbiAgICBpZiAodGhpcy51c2Vycz8ucm9sZSA9PT0gXCJzdXBlcmFkbWluXCIgJiYgdGhpcy5SbUxpc3Q/Lmxlbmd0aClcclxuICAgICAgdGhpcy5ybUVtYWlsID0gb2JqPy5STUVtYWlsID8gb2JqPy5STUVtYWlsIDogb2JqO1xyXG4gICAgXHJcbiAgICB0aGlzLmdyb3VwcyA9IG9iaj8uY2x1c3Rlck5hbWUgPyBbb2JqPy5jbHVzdGVyTmFtZV0gOiB0aGlzLmdyb3VwcztcclxuICAgIFxyXG4gICAgbGV0IGZvdW5kUk0gPSBmYWxzZTtcclxuICAgIGxldCBmb3VuZENsdXN0ZXIgPSBmYWxzZTtcclxuICAgIGlmKCh0aGlzLnVzZXJzPy5yb2xlID09PSBcInN1cGVyYWRtaW5cIiB8fCB0aGlzLnVzZXJzPy5yb2xlID09PSBcImFkbWluXCIpICYmIHZhbCA9PT1cInN0b3JlXCIgJiZcclxuICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0Py5sZW5ndGggJiZcclxuICAgICAgICBvYmo/LmNsdXN0ZXJOYW1lXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuQ2x1c3Rlckxpc3QuZm9yRWFjaChcclxuICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+IFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaWYoZWxlbWVudD8uY2x1c3Rlck5hbWUgPT09IG9iai5jbHVzdGVyTmFtZSl7XHJcbiAgICAgICAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIkNsdXN0ZXJMaXN0XCIpPy5zZXRWYWx1ZShbZWxlbWVudF0pO1xyXG4gICAgICAgICAgdGhpcy5vbmdyb3VwU2VsZWN0KFtlbGVtZW50XSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZzEgPSB0cnVlO1xyXG4gICAgICAgICAgZm91bmRDbHVzdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2UgaWYoKHRoaXMudXNlcnM/LnJvbGUgPT09IFwic3VwZXJhZG1pblwiIHx8IHRoaXMudXNlcnM/LnJvbGUgPT09IFwiYWRtaW5cIikgJiYgdmFsID09PVwiY2x1c3RlclwiICYmXHJcbiAgICAgICAgdGhpcy5DbHVzdGVyTGlzdD8ubGVuZ3RoICYmXHJcbiAgICAgICAgb2JqPy5jbHVzdGVyTmFtZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0LmZvckVhY2goXHJcbiAgICAgICAgICAoZWxlbWVudDogYW55KSA9PiBcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGlmKGVsZW1lbnQ/LmNsdXN0ZXJOYW1lID09PSBvYmouY2x1c3Rlck5hbWUpe1xyXG4gICAgICAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJDbHVzdGVyTGlzdFwiKT8uc2V0VmFsdWUoW2VsZW1lbnRdKTtcclxuICAgICAgICAgIHRoaXMub25ncm91cFNlbGVjdChbZWxlbWVudF0pO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcxID0gdHJ1ZTtcclxuICAgICAgICAgIGZvdW5kQ2x1c3RlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSBSTSBzZWxlY3Rpb24gKG9ubHkgZm9yIHN1cGVyYWRtaW4pXHJcbiAgICBpZiAodGhpcy51c2Vycz8ucm9sZSA9PT0gXCJzdXBlcmFkbWluXCIgJiYgdmFsID09PVwiY2x1c3RlclwiICYmIHRoaXMuUm1MaXN0Py5sZW5ndGgpIHtcclxuICAgICB0aGlzLlJtTGlzdC5mb3JFYWNoKFxyXG4gICAgICAgIChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmKGVsZW1lbnQ/LmVtYWlsID09PSB0aGlzLnJtRW1haWwpIHtcclxuICAgICAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIlJtTGlzdFwiKT8uc2V0VmFsdWUoW2VsZW1lbnRdKTtcclxuICAgICAgICB0aGlzLm9uUm1TZWxlY3QoW2VsZW1lbnRdKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZzEgPSB0cnVlO1xyXG4gICAgICAgIGZvdW5kUk0gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSBDbHVzdGVyIHNlbGVjdGlvbiAob25seSBmb3IgYWRtaW4pXHJcblxyXG4gICAgLy8g4pyFIFN1Ym1pdCBmYWxsYmFja1xyXG4gICAgaWYgKCFmb3VuZFJNICYmICFmb3VuZENsdXN0ZXIpIHtcclxuICAgIHRoaXMuZ2V0QWxsU3RvcmVzKCk7XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgICAgICAgICAgICAgIHRoaXMub25TdWJtaXQoKTtcclxuICAgICAgICBcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxudHlwZVZhbDEodmFsOiBhbnksIG9iaj86IGFueSkge1xyXG4gIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgdGhpcy5zZWFyY2hWYWx1ZSA9IFwiXCI7XHJcbiAgdGhpcy5saW1pdCA9IDEwO1xyXG4gIHRoaXMub2Zmc2V0ID0gMTtcclxuICB0aGlzLnBhZ2VTaXplID0gMTA7XHJcbiAgdGhpcy5rZXlUeXBlID0gdmFsO1xyXG4gIHRoaXMuc29ydGVkQ29sdW1uID0gXCJkYXRlXCI7XHJcblxyXG4gIGlmICh0aGlzLnVzZXJzPy5yb2xlID09PSBcInN1cGVyYWRtaW5cIiAmJiB0aGlzLlJtTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICB0aGlzLnJtRW1haWwgPSBvYmo/LlJNRW1haWwgPyBvYmo/LlJNRW1haWwgOiBvYmo7XHJcbiAgfVxyXG5cclxuICAvLyB0aGlzLmdyb3VwcyA9IG9iaj8uY2x1c3Rlck5hbWUgPyBbb2JqPy5jbHVzdGVyTmFtZV0gOiB0aGlzLmdyb3VwcztcclxuXHJcbiAgdGhpcy5kZW1vR3JhcGljcyA9IHRoaXMuZXllVGVzdEZvcm0udmFsdWUuYXVkaXRUeXBlO1xyXG4gIGlmICh0aGlzLmRlbW9HcmFwaWNzID09PSBcImFsbFwiKSB7XHJcbiAgICB0aGlzLmRlbW9HcmFwaWNzID0gW1wiYWR1bHRcIiwgXCJraWRcIl07XHJcbiAgfVxyXG4gIHRoaXMuZXllVGVzdERhdGEgPSBbXTtcclxuICBsZXQgZm91bmRSTSA9IGZhbHNlO1xyXG4gIGxldCBmb3VuZENsdXN0ZXIgPSBmYWxzZTtcclxuXHJcbiAgLy8g4pyFIENsdXN0ZXIgLyBTdG9yZVxyXG4gIGlmICgodGhpcy51c2Vycz8ucm9sZSA9PT0gXCJzdXBlcmFkbWluXCIgfHwgdGhpcy51c2Vycz8ucm9sZSA9PT0gXCJhZG1pblwiKSAmJlxyXG4gICAgICAodmFsID09PSBcInN0b3JlXCIgfHwgdmFsID09PSBcImNsdXN0ZXJcIikpIHtcclxuICAgICB0aGlzLmdldEFsbEdyb3VwcygpO1xyXG4gICAgICAgdGhpcy5sb2FkaW5nMSA9IHRydWU7XHJcbiAgICBmb3VuZENsdXN0ZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8g4pyFIFJNIChvbmx5IGZvciBzdXBlcmFkbWluKVxyXG4gIGlmICh0aGlzLnVzZXJzPy5yb2xlID09PSBcInN1cGVyYWRtaW5cIiAmJiB2YWwgPT09IFwicm1cIikge1xyXG4gICB0aGlzLmdldEFsbFJtKCk7XHJcbiAgICAgdGhpcy5sb2FkaW5nMSA9IHRydWU7XHJcbiAgICBmb3VuZFJNID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOKchSBGYWxsYmFja1xyXG4gIGlmICghZm91bmRSTSAmJiAhZm91bmRDbHVzdGVyKSB7XHJcbiAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gIH1cclxuICBcclxuICAgICAgICAgICAgICAgICB0aGlzLm9uU3VibWl0KCk7XHJcbiAgICAgICAgICBcclxuICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxufVxyXG4vLyBwcml2YXRlIHJlc2V0QWxsQ2x1c3RlcnMoKSB7XHJcbi8vICAgaWYgKHRoaXMuQ2x1c3Rlckxpc3Q/Lmxlbmd0aCkge1xyXG4vLyAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJDbHVzdGVyTGlzdFwiKT8uc2V0VmFsdWUodGhpcy5DbHVzdGVyTGlzdCk7XHJcbi8vICAgICB0aGlzLm9uZ3JvdXBTZWxlY3QodGhpcy5DbHVzdGVyTGlzdCk7XHJcbi8vICAgfSBlbHNlIHtcclxuLy8gICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiQ2x1c3Rlckxpc3RcIik/LnNldFZhbHVlKFtdKTtcclxuLy8gICB9XHJcbi8vICAgdGhpcy5nZXRBbGxHcm91cHMoKTtcclxuLy8gfVxyXG5cclxuLy8gcHJpdmF0ZSByZXNldEFsbFJtcygpIHtcclxuLy8gICBpZiAodGhpcy5SbUxpc3Q/Lmxlbmd0aCkge1xyXG4vLyAgICAgdGhpcy5leWVUZXN0Rm9ybS5nZXQoXCJSbUxpc3RcIik/LnNldFZhbHVlKHRoaXMuUm1MaXN0KTtcclxuLy8gICAgIHRoaXMub25SbVNlbGVjdCh0aGlzLlJtTGlzdCk7XHJcbi8vICAgfSBlbHNlIHtcclxuLy8gICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiUm1MaXN0XCIpPy5zZXRWYWx1ZShbXSk7XHJcbi8vICAgfVxyXG4vLyAgIHRoaXMuZ2V0QWxsUm0oKTtcclxuLy8gfVxyXG5cclxuXHJcbmJ1aWxkUmVxdWVzdERhdGEocGFyYW1zPzoge1xyXG4gIGlzRXhwb3J0PzogYm9vbGVhbjtcclxuICBsaW1pdD86IG51bWJlcjtcclxuICBvZmZzZXQ/OiBudW1iZXI7XHJcbn0pOiBhbnkge1xyXG4gIC8vIE1hcCByb2xlIOKGkiBrZXlUeXBlXHJcbiAgY29uc3Qgcm9sZUtleVR5cGVNYXA6IGFueSA9IHtcclxuICAgIHN1cGVyYWRtaW46IFwicm1cIixcclxuICAgIGFkbWluOiBcImNsdXN0ZXJcIixcclxuICAgIHVzZXI6IFwic3RvcmVcIixcclxuICB9O1xyXG4gIGlmICghdGhpcy5rZXlUeXBlKSB7XHJcbiAgICB0aGlzLmtleVR5cGUgPSByb2xlS2V5VHlwZU1hcFt0aGlzLnVzZXJzPy5yb2xlXSB8fCBcInJtXCI7XHJcbiAgfVxyXG5cclxuICAvLyBDb2xsZWN0IHN0b3JlIElEc1xyXG4gIGNvbnN0IGZpbmFsU3RvcmVzID0gQXJyYXkuaXNBcnJheSh0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLnN0b3JlTGlzdClcclxuICAgID8gdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChzdG9yZTogYW55KSA9PiBzdG9yZS5zdG9yZUlkKVxyXG4gICAgOiBbXTtcclxuXHJcbiAgLy8gQ29sbGVjdCBSTSBlbWFpbHNcclxuICBsZXQgZmluYWxSTUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5SbUxpc3QpICYmIHRoaXMuZXllVGVzdEZvcm0udmFsdWUuUm1MaXN0Lmxlbmd0aCkge1xyXG4gICAgZmluYWxSTUxpc3QgPSB0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLlJtTGlzdC5tYXAoKGVsOiBhbnkpID0+IGVsPy5lbWFpbCk7XHJcbiAgfSBlbHNlIGlmICh0aGlzLnJtRW1haWwpIHtcclxuICAgIGZpbmFsUk1MaXN0ID0gW3RoaXMucm1FbWFpbF07XHJcbiAgfSBlbHNlIGlmICh0aGlzLnVzZXJzPy5lbWFpbCkge1xyXG4gICAgZmluYWxSTUxpc3QgPSBbdGhpcy51c2Vycy5lbWFpbF07XHJcbiAgfVxyXG50aGlzLlJtTGlzdERhdGEgPSBmaW5hbFJNTGlzdD8ubGVuZ3RoID8gZmluYWxSTUxpc3Q/Lmxlbmd0aCA6IFtdO1xyXG4gIC8vIEhhbmRsZSBhdWRpdFR5cGUg4oaSIG5vcm1hbGl6ZSB0byBhcnJheVxyXG4gIGNvbnN0IGF1ZGl0VHlwZVZhbHVlID0gdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5hdWRpdFR5cGU7XHJcbiAgbGV0IGF1ZGl0VHlwZXM6IHN0cmluZ1tdID0gW107XHJcbiAgaWYgKGF1ZGl0VHlwZVZhbHVlID09PSBcImFsbFwiKSB7XHJcbiAgICBhdWRpdFR5cGVzID0gW1wiYWR1bHRcIiwgXCJraWRcIl07XHJcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGF1ZGl0VHlwZVZhbHVlKSkge1xyXG4gICAgYXVkaXRUeXBlcyA9IGF1ZGl0VHlwZVZhbHVlO1xyXG4gIH0gZWxzZSBpZiAoYXVkaXRUeXBlVmFsdWUpIHtcclxuICAgIGF1ZGl0VHlwZXMgPSBbYXVkaXRUeXBlVmFsdWVdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnM/LmNsaWVudCxcclxuICAgIGZyb21EYXRlOiB0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgdG9EYXRlOiB0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgIHR5cGU6IHRoaXMuZXllVGVzdEZvcm0udmFsdWUudHlwZSxcclxuXHJcbiAgICAvLyBkZW1vZ3JhcGhpY3Mgb25seSBpZiB0eXBlICE9PSByZW1vdGVcclxuICAgIC4uLih0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLnR5cGUgIT09IFwicmVtb3RlXCIgJiYgeyBkZW1vZ3JhcGhpY3M6IGF1ZGl0VHlwZXMgfSksXHJcblxyXG4gICAgY2x1c3RlcjogdGhpcy5ncm91cHMsXHJcbiAgICBzdG9yZUlkOiBmaW5hbFN0b3JlcyxcclxuXHJcbiAgICBsaW1pdDogcGFyYW1zPy5saW1pdCA/PyB0aGlzLmxpbWl0ID8/IDEwLFxyXG4gICAgb2Zmc2V0OiBwYXJhbXM/Lm9mZnNldCA/PyB0aGlzLm9mZnNldCA/PyAxLFxyXG4gICAga2V5VHlwZTogdGhpcy5rZXlUeXBlLFxyXG5cclxuICAgIGNvbXBsaWFuY2VTY29yZTogTnVtYmVyKHRoaXMuZXllVGVzdEZvcm0udmFsdWUuY29tcGxpYW5jZVNjb3JlIHx8IDApLFxyXG4gICAgbmVhckFkZGl0aW9uOiB0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLm5lYXJBZGRpdGlvbiB8fCBcIlwiLFxyXG5cclxuICAgIC4uLih0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLnR5cGUgIT09IFwicmVtb3RlXCIgJiYge1xyXG4gICAgICBjYXRlZ29yeTogdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5jYXRlZ29yeSxcclxuICAgIH0pLFxyXG5cclxuICAgIFJNTGlzdDogZmluYWxSTUxpc3QsXHJcbiAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hWYWx1ZSB8fCBcIlwiLFxyXG4gICAgaXNFeHBvcnQ6IHBhcmFtcz8uaXNFeHBvcnQgPz8gZmFsc2UsXHJcbiAgICBzb3J0T3JkZXI6IHRoaXMuc29ydE9yZGVyID8/IC0xLFxyXG4gICAgc29ydEJ5OiB0aGlzLnNvcnRlZENvbHVtbiA/PyBcImRhdGVcIixcclxuICB9O1xyXG59XHJcblxyXG5cclxuXHJcbiAgZXhwb3J0WExTWCgpIHtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0gdGhpcy5idWlsZFJlcXVlc3REYXRhKHtcclxuICAgICAgaXNFeHBvcnQ6IHRydWUsXHJcbiAgICAgIGxpbWl0OiAxMDAwMCxcclxuICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5leWVTZXJ2aWNlXHJcbiAgICAgIC5nZXRFeWVUZXN0VGFibGVFeHBvcnQocmVxdWVzdERhdGEpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmV5ZVNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKFxyXG4gICAgICAgICAgICByZXMsXHJcbiAgICAgICAgICAgIGAke3RoaXMuZXllVGVzdEZvcm0udmFsdWUudHlwZX0gRXllIFRlc3QgVGFibGUgYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5lcnJvciA/IGVycj8uZXJyb3I/LmVycm9yIDogZXJyPy5lcnJvcj8ubWVzc2FnZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvdGFsSXRlbXM6IGFueSA9IDA7XHJcbiAgb2Zmc2V0ID0gMTtcclxuICBsaW1pdCA9IDEwO1xyXG4gIG9uU3VibWl0KCkge1xyXG4gICBcclxuICAgIHRoaXMuZXllVGVzdERhdGE9W107XHJcbiAgICB0aGlzLnR5cGVWYWx1ZSA9IHRoaXMuZXllVGVzdEZvcm0/LnZhbHVlPy50eXBlO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHRoaXMuYnVpbGRSZXF1ZXN0RGF0YSh7IGlzRXhwb3J0OiBmYWxzZSB9KTtcclxuICBcclxuICAgIHRoaXMuZXllU2VydmljZVxyXG4gICAgICAuZ2V0RXllVGVzdGxpc3QocmVxdWVzdERhdGEpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmV5ZVRlc3REYXRhID0gcmVzPy5kYXRhLnJlc3VsdDtcclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzLmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplcygpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENhcmREYXRhKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5leWVUZXN0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgICAgIH0sMTAwMClcclxuICB9XHJcblxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIC8vIHRoaXMubGltaXQgPSAxMDtcclxuICAgIC8vIHRoaXMucGFnZVNpemUgPSAxMDtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5vZmZzZXQgPSBOdW1iZXIocGFnZU9mZnNldCk7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB0aGlzLmJ1aWxkUmVxdWVzdERhdGEoe1xyXG4gICAgICBpc0V4cG9ydDogZmFsc2UsXHJcbiAgICAgIGxpbWl0OiB0aGlzLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxyXG4gICAgfSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZXF1ZXN0RGF0YSlcclxuLy8gcmV0dXJuXHJcbiAgICB0aGlzLmV5ZVNlcnZpY2VcclxuICAgICAgLmdldEV5ZVRlc3RsaXN0KHJlcXVlc3REYXRhKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXllVGVzdERhdGEgPSByZXM/LmRhdGEucmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSByZXMuZGF0YT8uY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5leWVUZXN0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5leWVUZXN0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMucGFnZVNpemUgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICAgdGhpcy5saW1pdCA9IE51bWJlcihwYWdlU2l6ZSk7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB0aGlzLmJ1aWxkUmVxdWVzdERhdGEoe1xyXG4gICAgICBpc0V4cG9ydDogZmFsc2UsXHJcbiAgICAgIGxpbWl0OiB0aGlzLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5leWVTZXJ2aWNlXHJcbiAgICAgIC5nZXRFeWVUZXN0bGlzdChyZXF1ZXN0RGF0YSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmV5ZVRlc3REYXRhID0gcmVzPy5kYXRhLnJlc3VsdDtcclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzLmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXllVGVzdERhdGEgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZXllVGVzdERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNvcnRlZENvbHVtbjogYW55O1xyXG4gIHNvcnRPcmRlcjogYW55O1xyXG4gIG9uU29ydChjb2x1bW46IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuc29ydGVkQ29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgdGhpcy5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlciA9PT0gMSA/IC0xIDogMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc29ydGVkQ29sdW1uID0gY29sdW1uID8gY29sdW1uIDogXCJzdG9yZU5hbWVcIjtcclxuICAgICAgdGhpcy5zb3J0T3JkZXIgPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gbmV3IGFwaSBpbnRhZ3JhdGVkXHJcblxyXG4gIFJtTGlzdDogYW55ID0gW107XHJcblxyXG4gIGdldEFsbFJtKCkge1xyXG4gICAgdGhpcy5leWVTZXJ2aWNlXHJcbiAgICAgIC5nZXRSbUxpc3QodGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5SbUxpc3QgPSByZXM/LmRhdGE/LnJlc3VsdDsgLy9mb3Igb2JqZWN0IGJhc2VkIHRoaXMgd2lsbCBjaGFuZ2VkXHJcbiAgICAgICAgICAgIHRoaXMuZXllVGVzdEZvcm0uZ2V0KFwiUm1MaXN0XCIpPy5zZXRWYWx1ZSh0aGlzLlJtTGlzdCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLlJtTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIlJtTGlzdFwiKT8uc2V0VmFsdWUoW10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgb25SbVNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV5ZVRlc3RGb3JtLmdldChcIlJtTGlzdFwiKT8uc2V0VmFsdWUoZXZlbnQpO1xyXG4gICAgdGhpcy5nZXRBbGxHcm91cHMoZXZlbnQpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIGV5ZVRlc3RDYXJkRGF0YTogYW55ID0gW107XHJcbiAgZ2V0Q2FyZERhdGEoKSB7XHJcbiAgICBsZXQgZmluYWxTdG9yZXM6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJtTGlzdFZhbHVlOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IHtcclxuICAgICAgZnJvbURhdGUsXHJcbiAgICAgIHRvRGF0ZSxcclxuICAgICAgdHlwZSxcclxuICAgICAgYXVkaXRUeXBlLFxyXG4gICAgICBzdG9yZUxpc3QsXHJcbiAgICAgIFJtTGlzdCxcclxuICAgICAgY29tcGxpYW5jZVNjb3JlLFxyXG4gICAgICBuZWFyQWRkaXRpb24sXHJcbiAgICAgIGNhdGVnb3J5LFxyXG4gICAgfSA9IHRoaXMuZXllVGVzdEZvcm0udmFsdWU7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLnN0b3JlTGlzdCkpIHtcclxuICAgICAgdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5zdG9yZUxpc3QuZm9yRWFjaCgoc3RvcmU6IGFueSkgPT4ge1xyXG4gICAgICAgIGZpbmFsU3RvcmVzLnB1c2goc3RvcmUuc3RvcmVJZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5leWVUZXN0Rm9ybS52YWx1ZS5SbUxpc3QpKSB7XHJcbiAgICAgIHRoaXMuZXllVGVzdEZvcm0udmFsdWUuUm1MaXN0LmZvckVhY2goKGVsOiBhbnkpID0+IHtcclxuICAgICAgICBybUxpc3RWYWx1ZS5wdXNoKGVsPy5lbWFpbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVtb2dyYXBoaWNzID1cclxuICAgICAgdHlwZSAhPT0gXCJyZW1vdGVcIlxyXG4gICAgICAgID8gYXVkaXRUeXBlID09PSBcImFsbFwiXHJcbiAgICAgICAgICA/IFtcImFkdWx0XCIsIFwia2lkXCJdXHJcbiAgICAgICAgICA6IEFycmF5LmlzQXJyYXkoYXVkaXRUeXBlKVxyXG4gICAgICAgICAgPyBhdWRpdFR5cGVcclxuICAgICAgICAgIDogW2F1ZGl0VHlwZV1cclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YTogYW55ID0ge1xyXG4gICAgICBmcm9tRGF0ZSxcclxuICAgICAgdG9EYXRlLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICBzdG9yZUlkOiBmaW5hbFN0b3JlcyxcclxuICAgICAgUk1MaXN0OiBybUxpc3RWYWx1ZS5sZW5ndGggPiAwID8gcm1MaXN0VmFsdWUgOiBbdGhpcy51c2Vycz8uZW1haWxdLFxyXG4gICAgICBjb21wbGlhbmNlU2NvcmU6IE51bWJlcihjb21wbGlhbmNlU2NvcmUpLFxyXG4gICAgICBuZWFyQWRkaXRpb24sXHJcbiAgICAgIC4uLih0aGlzLmV5ZVRlc3RGb3JtLnZhbHVlLnR5cGUgIT09IFwicmVtb3RlXCIgJiYge1xyXG4gICAgICAgIGNhdGVnb3J5LFxyXG4gICAgICB9KSxcclxuICAgICBcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGRlbW9ncmFwaGljcykge1xyXG4gICAgICByZXF1ZXN0RGF0YS5kZW1vZ3JhcGhpY3MgPSBkZW1vZ3JhcGhpY3M7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV5ZVNlcnZpY2VcclxuICAgICAgLmdldENhcmQocmVxdWVzdERhdGEpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmV5ZVRlc3RDYXJkRGF0YSA9IHJlcz8uY29kZSA9PT0gMjAwID8gcmVzPy5kYXRhPy5yZXN1bHQgOiB7fTtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZXllVGVzdENhcmREYXRhID0ge307XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgZXllVGVzdFZpZXcoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmV5ZVNlcnZpY2Uuc2V0QXVkaXREYXRhKGRhdGEpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS90cmF4L2F1ZGl0L3N0YXJ0XCJdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgdHlwZTogdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS50eXBlLFxyXG4gICAgICAgIHN0b3JlSWQ6IGRhdGE/LnN0b3JlSWQsXHJcbiAgICAgICAgX2lkOiBkYXRhLl9pZCxcclxuICAgICAgICBleWVUeXBlOiBkYXRhPy5jb21tZW50ID8gXCJmYWtlXCIgOiBcImdlbnVpbmVcIixcclxuICAgICAgICBSTUVtYWlsOiBkYXRhPy5STUVtYWlsLFxyXG4gICAgICAgIGNsdXN0ZXI6IGRhdGE/LmNsdXN0ZXJOYW1lLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXR0aW5nc1ZpZXcoKSB7XHJcbiAgICB0aGlzLmV5ZVNlcnZpY2Uuc2V0QXVkaXREYXRhKHRoaXMuaGVhZGVyRmlsdGVycyk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3RyYXgvYXVkaXQvc2V0dGluZ3NcIl0sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHsgdHlwZTogdGhpcy5leWVUZXN0Rm9ybS52YWx1ZS50eXBlIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFwcGx5QnV0dG9uQ2xhc3Mocm9sZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgcm9sZUNsYXNzTWFwOiBhbnkgPSB7XHJcbiAgICAgIHN1cGVyYWRtaW46IHR5cGUgPT09IFwicmVtb3RlXCIgPyBcImNvbC03IG1iLTRcIiA6IFwiY29sLTUgbWItNFwiLFxyXG4gICAgICBhZG1pbjogdHlwZSA9PT0gXCJyZW1vdGVcIiA/IFwiY29sLTEwIG1iLTRcIiA6IFwiY29sLTggbWItNFwiLFxyXG4gICAgICB1c2VyOiB0eXBlID09PSBcInJlbW90ZVwiID8gXCJjb2wtMiBtYi00XCIgOiBcImNvbC0xMCBtYi00XCIsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiByb2xlQ2xhc3NNYXBbcm9sZV0gfHwgXCJjb2wtMTIgbWItNFwiO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yXCI+XHJcbiAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmcxXCIgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8Zm9ybSAqbmdJZj1cIiFsb2FkaW5nMVwiIFtmb3JtR3JvdXBdPVwiZXllVGVzdEZvcm1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbXQtNyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRvcDogMjAlO1wiIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0IHotMlwiIHN0eWxlPVwibWluLXdpZHRoOiAyMzBweCAhaW1wb3J0YW50O1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBuZ3hEYXRlcmFuZ2VwaWNrZXJNZCBbZHJvcHNdPVwiJ2Rvd24nXCIgW29wZW5zXT1cIidyaWdodCdcIiBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2VdPVwidHJ1ZVwiIFtzaG93Q2FuY2VsXT1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVJhbmdlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVzVXBkYXRlZCk9XCJkYXRlY2hhbmdlKCRldmVudClcIiAoY2xpY2spPVwicmVzZXRWYWxpZGF0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydERhdGVDaGFuZ2VkKT1cIm9uU3RhcnREYXRlQ2hhbmdlKCRldmVudClcIiBbaXNDdXN0b21EYXRlXT1cImlzQ3VzdG9tRGF0ZVwiIFthdXRvQXBwbHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRhdGVyYW5nZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleWVUZXN0Rm9ybS5nZXQoJ3R5cGUnKT8udmFsdWUgPT09J3JlbW90ZScgPyAnY29sLTIgbWItNCcgOiAnY29sLTIgbWItNCdcIiBjbGFzcz1cImNvbC0yIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJ0eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtQ2hhbmdlKT1cInR5cGVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZXllVGVzdEZvcm0uZ2V0KCd0eXBlJyk/LnZhbHVlICE9PSdyZW1vdGUnXCIgY2xhc3M9XCJjb2wtMSBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImF1ZGl0VHlwZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJhdWRpdFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1DaGFuZ2UpPVwiYXVkaXRUeXBlQ2hhbmdlKCRldmVudClcIj48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0nc3VwZXJhZG1pbidcIiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZXllVGVzdEZvcm0uZ2V0KCdSbUxpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgUk1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1ncm91cC1zZWxlY3QgW2l0ZW1zXT1cIlJtTGlzdFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIFttdWx0aV09XCJ0cnVlXCIgW3NlYXJjaEZpZWxkXT1cIid1c2VyTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIid1c2VyTmFtZSdcIiAoc2VsZWN0ZWQpPVwib25SbVNlbGVjdCgkZXZlbnQpXCIgW3NlbGVjdGVkVmFsdWVzXT1cImV5ZVRlc3RGb3JtLmdldCgnUm1MaXN0Jyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1ncm91cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09J3N1cGVyYWRtaW4nIHx8IHVzZXJzPy5yb2xlID09PSdhZG1pbidcIiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZXllVGVzdEZvcm0uZ2V0KCdDbHVzdGVyTGlzdCcpPy52YWx1ZT8ubGVuZ3RoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBjbHVzdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZ3JvdXAtc2VsZWN0IFtpdGVtc109XCJDbHVzdGVyTGlzdFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIFttdWx0aV09XCJ0cnVlXCIgW3NlYXJjaEZpZWxkXT1cIidjbHVzdGVyTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidjbHVzdGVyTmFtZSdcIiAoc2VsZWN0ZWQpPVwib25ncm91cFNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiZXllVGVzdEZvcm0uZ2V0KCdDbHVzdGVyTGlzdCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItZ3JvdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZXllVGVzdEZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgU3RvcmVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmVzLXNlbGVjdCBbaXRlbXNdPVwic3RvcmVMaXN0XCIgW2Rpc2FibGVkXT1cImZhbHNlXCIgW211bHRpXT1cInRydWVcIiBbc2VhcmNoRmllbGRdPVwiJ3N0b3JlTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidzdG9yZUlkJ1wiIChzZWxlY3RlZCk9XCJvblN0b3JlU2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJleWVUZXN0Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy52YWx1ZVwiPjwvbGliLXN0b3Jlcy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleWVUZXN0Rm9ybS5nZXQoJ3R5cGUnKT8udmFsdWUgPT09J3JlbW90ZScgPyAnY29sLTInIDogJ2NvbC0yJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGxpYW5jZVNjb3JlXCIgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwidHlwZVBlcmNlbnRhZ2VBcnJheVwiIChpdGVtQ2hhbmdlKT1cInR5cGVQZXJjZW50YWdlQ2hhbmdlKCRldmVudClcIj48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcIiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJuZWFyQWRkaXRpb25cIiBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJuZWFyQWRkaXRpb25BcnJheVwiIChpdGVtQ2hhbmdlKT1cIm5lYXJBZGRpdGlvbkNoYW5nZSgkZXZlbnQpXCI+PC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZXllVGVzdEZvcm0uZ2V0KCd0eXBlJyk/LnZhbHVlICE9PSdyZW1vdGUnXCIgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY2F0ZWdvcnlcIiBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJjYXRlZ29yeUFycmF5XCIgKGl0ZW1DaGFuZ2UpPVwiY2F0ZWdvcnlUeXBlQ2hhbmdlKCRldmVudClcIj48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICpuZ0lmPVwidXNlcnM/LnJvbGVcIiBcclxuICBjbGFzcz1cInRleHQtZW5kXCJcclxuICBbbmdDbGFzc109XCJnZXRBcHBseUJ1dHRvbkNsYXNzKHVzZXJzPy5yb2xlLCBleWVUZXN0Rm9ybS5nZXQoJ3R5cGUnKT8udmFsdWUpXCJcclxuPlxyXG4gIDxhIChjbGljayk9XCJvblN1Ym1pdCgpO1wiIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgcHktM1wiPlxyXG4gICAgPHNwYW4+QXBwbHk8L3NwYW4+XHJcbiAgPC9hPlxyXG48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Zvcm0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0V5ZVRlc3RcIiBjbGFzcz1cIm1zLTYgbWItM1wiPlxyXG5cclxuICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGRhc2hlZCB3LTEwMCAgcm93XCI+XHJcbiAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sLTEwIHRpdGxlLXRleHQgcHktM1wiPjxzcGFuIGNsYXNzPVwibXgtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiByeD1cIjE2XCIgZmlsbD1cIiNGRUU0RTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIzNV8yNDIzNClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNiAxMy4zMzM1VjE2LjAwMDJNMTYgMTguNjY2OEgxNi4wMDY3TTIyLjY2NjcgMTYuMDAwMkMyMi42NjY3IDE5LjY4MjEgMTkuNjgxOSAyMi42NjY4IDE2IDIyLjY2NjhDMTIuMzE4MSAyMi42NjY4IDkuMzMzMzcgMTkuNjgyMSA5LjMzMzM3IDE2LjAwMDJDOS4zMzMzNyAxMi4zMTgzIDEyLjMxODEgOS4zMzM1IDE2IDkuMzMzNUMxOS42ODE5IDkuMzMzNSAyMi42NjY3IDEyLjMxODMgMjIuNjY2NyAxNi4wMDAyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMzVfMjQyMzRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOCA4KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjxzcGFuIGNsYXNzPVwiZGFzaGVkLWRlc2NcIj5FeWUgdGVzdCB2aWRlbyBwcmV2aWV3IGlzIGF2YWlsYWJsZSBmb3IgMzAgZGF5cy4gQXVkaXQgZGF0YVxyXG4gICAgICAgICAgICAgICAgIHJlbWFpbnMgYWNjZXNzaWJsZSwgYnV0IHZpZGVvcyB3aWxsIG5vdCBiZSByZXRhaW5lZCBiZXlvbmQgdGhpcyBwZXJpb2QuPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbC0yIHB0LTIgdGV4dC1lbmQgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VFeWVUZXN0KClcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjUgMTVMMTUgMjVNMTUgMTVMMjUgMjVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgIDwvaDM+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcbjwhLS0gPGRpdiBjbGFzcz1cImNhcmQgbXktM1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB5LTFcIj5cclxuIFxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuXHJcbjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0nc3VwZXJhZG1pbicgJiYga2V5VHlwZSA9PT0ncm0nXCIgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGVsbGlwc2UxIG1pbi1oLTU1cHggcHktMSBweC0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGUgbXktMFwiPlJlZ2lvbmFsIE1hbmFnZXJzPC9oNT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC12YWx1ZVwiPnt7Um1MaXN0RGF0YSA/PyAnLS0nfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtdC01IHAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZWxsaXBzZTEgbWluLWgtNTVweCBweS0xIHB4LTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZSBteS0wXCI+Q2x1c3RlcnM8L2g1PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXZhbHVlXCI+e3tncm91cHM/Lmxlbmd0aCA/PyAnLS0nfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInVzZXJzPy5yb2xlID09PSdzdXBlcmFkbWluJyAmJiBrZXlUeXBlICE9PSdybScgfHwgdXNlcnM/LnJvbGUgPT09J2FkbWluJ1wiIGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgaC0xMDAgcC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBlbGxpcHNlMSBtaW4taC00NXB4ICBweS0xIHB4LTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJjYXJkLXRpdGxlXCI+Q2x1c3RlcnM8L2g1PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXZhbHVlXCI+e3sgZ3JvdXBzPy5sZW5ndGggPz8gJy0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGgtMTAwIHAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZWxsaXBzZTEgbWluLWgtNDVweCAgcHktMSBweC0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZVwiPlRvdGFsIFRhbmdvIEFJIEZpbGVzPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktNyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC12YWx1ZVwiPnt7IGV5ZVRlc3RDYXJkRGF0YT8udG90YWxGaWxlcyA/PyAnLScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgaC0xMDAgcC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBlbGxpcHNlMSBtaW4taC00NXB4IHB5LTEgcHgtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGVcIj5UcnVzdCBBdWRpdCBDb21wbGV0ZWQ8L2g1PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXZhbHVlXCI+e3sgZXllVGVzdENhcmREYXRhPy5jb21wbGV0ZWRGaWxlcyA/PyAnLScgfX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHB5LTAgYm9yZGVyLTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3ViXCI+e3sgKGV5ZVRlc3RDYXJkRGF0YT8uY29tcGxldGVkUmF0aW8gPz8gJy0nKSArICclJyB9fSA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRlc3Qtc3ViXCI+Q29tcGxldGVkPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMCBwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGVsbGlwc2UxIG1pbi1oLTQ1cHggIHB5LTEgcHgtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGVcIj5UYW5nbyBTY29yZTwvaDU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTcgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdmFsdWVcIj57eyBleWVUZXN0Q2FyZERhdGE/LnRhbmdvU2NvcmUgPz8gJy0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHB5LTAgYm9yZGVyLTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImV5ZVRlc3RDYXJkRGF0YT8udHJlbmRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8zMjE2XzExOClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgM0w2Ljc1IDcuNzVMNC4yNSA1LjI1TDAuNSA5TTExLjUgM0g4LjVNMTEuNSAzVjZcIiBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzMyMTZfMTE4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFleWVUZXN0Q2FyZERhdGE/LnRyZW5kXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTMgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzc2MF85Nzc2KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS41NzUgOUw2LjgyNDk1IDQuMjVMNC4zMjQ5NSA2Ljc1TDAuNTc0OTUxIDNNMTEuNTc1IDlIOC41NzQ5NU0xMS41NzUgOVY2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzc2MF85Nzc2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuMDc0OTUxMilcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPiBcclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3ViIG1zLTJcIj57eyBleWVUZXN0Q2FyZERhdGE/LnRhbmdvU2NvcmVUcmVuZCAhPT0gbnVsbCBcclxuICAgICAgPyAoZ2V0QWJzVmFsdWUoZXllVGVzdENhcmREYXRhLnRhbmdvU2NvcmVUcmVuZCkgfCBudW1iZXI6JzEuMC0wJzonZW4tVVMnKSArICclJyBcclxuICAgICAgOiAnLScgfX1cclxuIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRlc3Qtc3ViMVwiPnZzIHByZXZpb3VzIHdlZWs8L3NwYW4+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMCBwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGVsbGlwc2UxIG1pbi1oLTQ1cHggcHktMSBweC0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZVwiPlRydXN0IFNjb3JlPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktNyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC12YWx1ZVwiPnt7IChleWVUZXN0Q2FyZERhdGE/LnRydXN0U2NvcmUgJiYgZXllVGVzdENhcmREYXRhPy50cnVzdFNjb3JlICE9PSAnTkEnIFxyXG4gID8gZXllVGVzdENhcmREYXRhLnRydXN0U2NvcmUgKyAnJScgXHJcbiAgOiAnTkEnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cImNhcmQgbXQtM1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTNcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09ICdzdXBlcmFkbWluJyAmJiBrZXlUeXBlID09PSdybSdcIiBjbGFzcz1cInRpdGxlLXRleHQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgQXVkaXQgU3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbG9hZGluZ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPnt7IHRvdGFsSXRlbXMgfX0gVG90YWw8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQWRtaW4gKyBjbHVzdGVyIHByZXNlbnQg4oaSIFJNIFN1bW1hcnkgLS0+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJrZXlUeXBlID09PSdjbHVzdGVyJyAmJiB1c2Vycz8ucm9sZSA9PT0gJ3N1cGVyYWRtaW4nXCIgKGNsaWNrKT1cInR5cGVWYWwxKCdybScsJycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfNzQ1XzEyMTI4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI3LjgzMzQgMjEuMDAwM0gxNi4xNjY3TTE2LjE2NjcgMjEuMDAwM0wyMi4wMDAxIDI2LjgzMzdNMTYuMTY2NyAyMS4wMDAzTDIyLjAwMDEgMTUuMTY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF83NDVfMTIxMjhcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCIgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93Xzc0NV8xMjEyOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzQ1XzEyMTI4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09ICdhZG1pbicgJiYga2V5VHlwZSA9PT0nY2x1c3RlcicgfHwgdXNlcnM/LnJvbGUgPT09ICdzdXBlcmFkbWluJyAmJiBrZXlUeXBlID09PSdjbHVzdGVyJ1wiIGNsYXNzPVwidGl0bGUtdGV4dCBteS00IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgUk0gU3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2FkaW5nXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IHRleHQtY2FwaXRhbGl6ZVwiPnt7IGV5ZVRlc3REYXRhWzBdPy5STU5hbWUgPyBleWVUZXN0RGF0YVswXT8uUk1OYW1lIDogJycgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEFsbCBvdGhlciBjYXNlcyDihpIgRXllIFRlc3QgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cImtleVR5cGUgPT09J3N0b3JlJyAmJiAodXNlcnM/LnJvbGUgPT09ICdzdXBlcmFkbWluJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0eXBlVmFsMSgnY2x1c3RlcicsdGhpcy5ybUVtYWlsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF83NDVfMTIxMjgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yNy44MzM0IDIxLjAwMDNIMTYuMTY2N00xNi4xNjY3IDIxLjAwMDNMMjIuMDAwMSAyNi44MzM3TTE2LjE2NjcgMjEuMDAwM0wyMi4wMDAxIDE1LjE2N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF83NDVfMTIxMjhcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCIgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93Xzc0NV8xMjEyOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd183NDVfMTIxMjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJzaGFwZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJrZXlUeXBlID09PSdzdG9yZScgJiYgKHVzZXJzPy5yb2xlID09PSAnYWRtaW4nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInR5cGVWYWwxKCdjbHVzdGVyJyx0aGlzLmdyb3VwcylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfNzQ1XzEyMTI4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMVwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjcuODMzNCAyMS4wMDAzSDE2LjE2NjdNMTYuMTY2NyAyMS4wMDAzTDIyLjAwMDEgMjYuODMzN00xNi4xNjY3IDIxLjAwMDNMMjIuMDAwMSAxNS4xNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfNzQ1XzEyMTI4XCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd183NDVfMTIxMjhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzQ1XzEyMTI4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiISh1c2Vycz8ucm9sZSA9PT0gJ3N1cGVyYWRtaW4nICYmIGtleVR5cGUgPT09J3JtJykgJiYgISh1c2Vycz8ucm9sZSA9PT0gJ3N1cGVyYWRtaW4nICYmIGtleVR5cGUgPT09J2NsdXN0ZXInKSBcclxuICAgICAgICAgICAgICAgICYmICEodXNlcnM/LnJvbGUgPT09ICdhZG1pbicgJiYga2V5VHlwZSA9PT0nY2x1c3RlcicpXCIgY2xhc3M9XCJ0aXRsZS10ZXh0IG15LTQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEV5ZSBUZXN0XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbG9hZGluZ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPnt7IHRvdGFsSXRlbXMgfX0gVG90YWw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXJzPy5yb2xlID09PSdzdXBlcmFkbWluJyAmJiBrZXlUeXBlID09PSdybSdcIiBjbGFzcz1cInRleHQtc3ViIG15LTJcIj5CYXNlZCBvbiB7eyBoZWFkRGF0ZSB8IGRhdGU6ICdNTU0gZCcgfX0gLSB7e1xyXG4gICAgICAgICAgICAgICAgaGVhZERhdGVFbmQgfCBkYXRlOiAnTU1NIGQsIHknIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0nYWRtaW4nICYmIGtleVR5cGUgPT09J2NsdXN0ZXInXCIgY2xhc3M9XCJ0ZXh0LXN1YiBteS0yXCI+QmFzZWQgb24ge3sgaGVhZERhdGUgfCBkYXRlOiAnTU1NIGQnIH19IC0ge3tcclxuICAgICAgICAgICAgICAgIGhlYWREYXRlRW5kIHwgZGF0ZTogJ01NTSBkLCB5JyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09J3VzZXInICYmIGtleVR5cGUgPT09J3N0b3JlJ1wiIGNsYXNzPVwidGV4dC1zdWIgbXktMlwiPkJhc2VkIG9uIHt7IGhlYWREYXRlIHwgZGF0ZTogJ01NTSBkJyB9fSAtIHt7XHJcbiAgICAgICAgICAgICAgICBoZWFkRGF0ZUVuZCB8IGRhdGU6ICdNTU0gZCwgeScgfX08L3NwYW4+XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbWUtMlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5VHlwZSA9PT0gJ3JtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ1NlYXJjaCBieSBSTU5hbWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBrZXlUeXBlID09PSAnY2x1c3RlcidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdTZWFyY2ggYnkgQ2x1c3RlcidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdTZWFyY2gnXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIiAvPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09J3N1cGVyYWRtaW4nXCIgKGNsaWNrKT1cInNldHRpbmdzVmlldygpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0NVwiIGhlaWdodD1cIjQ2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNDUgNDZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfNzYwXzk5ODgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNzE5NzNcIiB5PVwiMS45ODA0N1wiIHdpZHRoPVwiNDAuMDRcIiBoZWlnaHQ9XCI0MC4wNFwiIHJ4PVwiNy4yOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjMuMTc0NzNcIiB5PVwiMi40MzU0N1wiIHdpZHRoPVwiMzkuMTNcIiBoZWlnaHQ9XCIzOS4xM1wiIHJ4PVwiNi44MjVcIiBzdHJva2U9XCIjRDBENUREXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMC45MVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF83NjBfOTk4OClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjIuNzM5NiAyNC4yNzQ5QzIzLjk5NjEgMjQuMjc0OSAyNS4wMTQ2IDIzLjI1NjMgMjUuMDE0NiAyMS45OTk5QzI1LjAxNDYgMjAuNzQzNCAyMy45OTYxIDE5LjcyNDkgMjIuNzM5NiAxOS43MjQ5QzIxLjQ4MzIgMTkuNzI0OSAyMC40NjQ2IDIwLjc0MzQgMjAuNDY0NiAyMS45OTk5QzIwLjQ2NDYgMjMuMjU2MyAyMS40ODMyIDI0LjI3NDkgMjIuNzM5NiAyNC4yNzQ5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS41MTk3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI4LjM1MTMgMjQuMjc0OUMyOC4yNTAzIDI0LjUwMzYgMjguMjIwMiAyNC43NTczIDI4LjI2NDggMjUuMDAzM0MyOC4zMDk0IDI1LjI0OTMgMjguNDI2NyAyNS40NzYzIDI4LjYwMTUgMjUuNjU1TDI4LjY0NyAyNS43MDA1QzI4Ljc4OCAyNS44NDE0IDI4Ljg5OTkgMjYuMDA4NyAyOC45NzYyIDI2LjE5MjhDMjkuMDUyNiAyNi4zNzY5IDI5LjA5MTkgMjYuNTc0MyAyOS4wOTE5IDI2Ljc3MzZDMjkuMDkxOSAyNi45NzI5IDI5LjA1MjYgMjcuMTcwMyAyOC45NzYyIDI3LjM1NDRDMjguODk5OSAyNy41Mzg1IDI4Ljc4OCAyNy43MDU4IDI4LjY0NyAyNy44NDY2QzI4LjUwNjIgMjcuOTg3NiAyOC4zMzg5IDI4LjA5OTUgMjguMTU0OCAyOC4xNzU4QzI3Ljk3MDcgMjguMjUyMiAyNy43NzMzIDI4LjI5MTQgMjcuNTc0IDI4LjI5MTRDMjcuMzc0NyAyOC4yOTE0IDI3LjE3NzMgMjguMjUyMiAyNi45OTMyIDI4LjE3NThDMjYuODA5MSAyOC4wOTk1IDI2LjY0MTggMjcuOTg3NiAyNi41MDA5IDI3Ljg0NjZMMjYuNDU1NCAyNy44MDExQzI2LjI3NjcgMjcuNjI2MyAyNi4wNDk3IDI3LjUwOSAyNS44MDM3IDI3LjQ2NDRDMjUuNTU3NyAyNy40MTk4IDI1LjMwNCAyNy40NDk5IDI1LjA3NTMgMjcuNTUwOUMyNC44NTEgMjcuNjQ3IDI0LjY1OTcgMjcuODA2NiAyNC41MjUgMjguMDEwMUMyNC4zOTAyIDI4LjIxMzUgMjQuMzE3OSAyOC40NTE5IDI0LjMxNjkgMjguNjk2VjI4LjgyNDlDMjQuMzE2OSAyOS4yMjcxIDI0LjE1NzIgMjkuNjEyOSAyMy44NzI3IDI5Ljg5NzNDMjMuNTg4MyAzMC4xODE3IDIzLjIwMjUgMzAuMzQxNSAyMi44MDAzIDMwLjM0MTVDMjIuMzk4IDMwLjM0MTUgMjIuMDEyMyAzMC4xODE3IDIxLjcyNzggMjkuODk3M0MyMS40NDM0IDI5LjYxMjkgMjEuMjgzNiAyOS4yMjcxIDIxLjI4MzYgMjguODI0OVYyOC43NTY2QzIxLjI3NzcgMjguNTA1NiAyMS4xOTY1IDI4LjI2MjIgMjEuMDUwNCAyOC4wNThDMjAuOTA0NCAyNy44NTM4IDIwLjcwMDMgMjcuNjk4MiAyMC40NjQ2IDI3LjYxMTVDMjAuMjM1OSAyNy41MTA2IDE5Ljk4MjIgMjcuNDgwNSAxOS43MzYyIDI3LjUyNTFDMTkuNDkwMiAyNy41Njk3IDE5LjI2MzIgMjcuNjg3IDE5LjA4NDQgMjcuODYxOEwxOS4wMzg5IDI3LjkwNzNDMTguODk4MSAyOC4wNDgzIDE4LjczMDggMjguMTYwMiAxOC41NDY3IDI4LjIzNjVDMTguMzYyNiAyOC4zMTI4IDE4LjE2NTIgMjguMzUyMSAxNy45NjU5IDI4LjM1MjFDMTcuNzY2NiAyOC4zNTIxIDE3LjU2OTIgMjguMzEyOCAxNy4zODUxIDI4LjIzNjVDMTcuMjAxIDI4LjE2MDIgMTcuMDMzNyAyOC4wNDgzIDE2Ljg5MjkgMjcuOTA3M0MxNi43NTE5IDI3Ljc2NjQgMTYuNjQgMjcuNTk5MiAxNi41NjM3IDI3LjQxNUMxNi40ODczIDI3LjIzMDkgMTYuNDQ4IDI3LjAzMzYgMTYuNDQ4IDI2LjgzNDJDMTYuNDQ4IDI2LjYzNDkgMTYuNDg3MyAyNi40Mzc2IDE2LjU2MzcgMjYuMjUzNUMxNi42NCAyNi4wNjkzIDE2Ljc1MTkgMjUuOTAyMSAxNi44OTI5IDI1Ljc2MTJMMTYuOTM4NCAyNS43MTU3QzE3LjExMzIgMjUuNTM3IDE3LjIzMDUgMjUuMzEgMTcuMjc1MSAyNS4wNjRDMTcuMzE5NyAyNC44MTggMTcuMjg5NiAyNC41NjQzIDE3LjE4ODYgMjQuMzM1NUMxNy4wOTI1IDI0LjExMTIgMTYuOTMyOSAyMy45MiAxNi43Mjk0IDIzLjc4NTJDMTYuNTI2IDIzLjY1MDUgMTYuMjg3NiAyMy41NzgyIDE2LjA0MzUgMjMuNTc3MkgxNS45MTQ2QzE1LjUxMjQgMjMuNTc3MiAxNS4xMjY2IDIzLjQxNzQgMTQuODQyMiAyMy4xMzNDMTQuNTU3NyAyMi44NDg2IDE0LjM5NzkgMjIuNDYyOCAxNC4zOTc5IDIyLjA2MDVDMTQuMzk3OSAyMS42NTgzIDE0LjU1NzcgMjEuMjcyNSAxNC44NDIyIDIwLjk4ODFDMTUuMTI2NiAyMC43MDM3IDE1LjUxMjQgMjAuNTQzOSAxNS45MTQ2IDIwLjU0MzlIMTUuOTgyOUMxNi4yMzM5IDIwLjUzOCAxNi40NzczIDIwLjQ1NjggMTYuNjgxNSAyMC4zMTA3QzE2Ljg4NTcgMjAuMTY0NiAxNy4wNDEzIDE5Ljk2MDUgMTcuMTI3OSAxOS43MjQ5QzE3LjIyODkgMTkuNDk2MSAxNy4yNTkgMTkuMjQyNCAxNy4yMTQ0IDE4Ljk5NjRDMTcuMTY5OCAxOC43NTA0IDE3LjA1MjUgMTguNTIzNCAxNi44Nzc3IDE4LjM0NDdMMTYuODMyMiAxOC4yOTkyQzE2LjY5MTIgMTguMTU4MyAxNi41NzkzIDE3Ljk5MTEgMTYuNTAzIDE3LjgwN0MxNi40MjY3IDE3LjYyMjggMTYuMzg3NCAxNy40MjU1IDE2LjM4NzQgMTcuMjI2MkMxNi4zODc0IDE3LjAyNjggMTYuNDI2NyAxNi44Mjk1IDE2LjUwMyAxNi42NDU0QzE2LjU3OTMgMTYuNDYxMiAxNi42OTEyIDE2LjI5NCAxNi44MzIyIDE2LjE1MzFDMTYuOTczMSAxNi4wMTIxIDE3LjE0MDMgMTUuOTAwMiAxNy4zMjQ0IDE1LjgyMzlDMTcuNTA4NiAxNS43NDc2IDE3LjcwNTkgMTUuNzA4MyAxNy45MDUyIDE1LjcwODNDMTguMTA0NiAxNS43MDgzIDE4LjMwMTkgMTUuNzQ3NiAxOC40ODYgMTUuODIzOUMxOC42NzAyIDE1LjkwMDIgMTguODM3NCAxNi4wMTIxIDE4Ljk3ODMgMTYuMTUzMUwxOS4wMjM4IDE2LjE5ODZDMTkuMjAyNSAxNi4zNzM0IDE5LjQyOTUgMTYuNDkwNyAxOS42NzU1IDE2LjUzNTNDMTkuOTIxNSAxNi41Nzk5IDIwLjE3NTIgMTYuNTQ5OCAyMC40MDM5IDE2LjQ0ODlIMjAuNDY0NkMyMC42ODg5IDE2LjM1MjcgMjAuODgwMiAxNi4xOTMxIDIxLjAxNDkgMTUuOTg5N0MyMS4xNDk3IDE1Ljc4NjIgMjEuMjIyIDE1LjU0NzggMjEuMjIyOSAxNS4zMDM4VjE1LjE3NDlDMjEuMjIyOSAxNC43NzI2IDIxLjM4MjcgMTQuMzg2OSAyMS42NjcyIDE0LjEwMjRDMjEuOTUxNiAxMy44MTggMjIuMzM3NCAxMy42NTgyIDIyLjczOTYgMTMuNjU4MkMyMy4xNDE5IDEzLjY1ODIgMjMuNTI3NiAxMy44MTggMjMuODEyMSAxNC4xMDI0QzI0LjA5NjUgMTQuMzg2OSAyNC4yNTYzIDE0Ljc3MjYgMjQuMjU2MyAxNS4xNzQ5VjE1LjI0MzFDMjQuMjU3MyAxNS40ODcxIDI0LjMyOTYgMTUuNzI1NiAyNC40NjQzIDE1LjkyOUMyNC41OTkgMTYuMTMyNSAyNC43OTAzIDE2LjI5MjEgMjUuMDE0NiAxNi4zODgyQzI1LjI0MzMgMTYuNDg5MSAyNS40OTcxIDE2LjUxOTMgMjUuNzQzMSAxNi40NzQ3QzI1Ljk4OTEgMTYuNDMwMSAyNi4yMTYxIDE2LjMxMjggMjYuMzk0OCAxNi4xMzhMMjYuNDQwMyAxNi4wOTI1QzI2LjU4MTEgMTUuOTUxNCAyNi43NDg0IDE1LjgzOTYgMjYuOTMyNSAxNS43NjMyQzI3LjExNjcgMTUuNjg2OSAyNy4zMTQgMTUuNjQ3NiAyNy41MTMzIDE1LjY0NzZDMjcuNzEyNiAxNS42NDc2IDI3LjkxIDE1LjY4NjkgMjguMDk0MSAxNS43NjMyQzI4LjI3ODIgMTUuODM5NiAyOC40NDU1IDE1Ljk1MTQgMjguNTg2NCAxNi4wOTI1QzI4LjcyNzQgMTYuMjMzMyAyOC44MzkyIDE2LjQwMDYgMjguOTE1NiAxNi41ODQ3QzI4Ljk5MTkgMTYuNzY4OCAyOS4wMzEyIDE2Ljk2NjIgMjkuMDMxMiAxNy4xNjU1QzI5LjAzMTIgMTcuMzY0OCAyOC45OTE5IDE3LjU2MjIgMjguOTE1NiAxNy43NDYzQzI4LjgzOTIgMTcuOTMwNCAyOC43Mjc0IDE4LjA5NzcgMjguNTg2NCAxOC4yMzg1TDI4LjU0MDkgMTguMjg0QzI4LjM2NiAxOC40NjI4IDI4LjI0ODggMTguNjg5OCAyOC4yMDQyIDE4LjkzNThDMjguMTU5NiAxOS4xODE4IDI4LjE4OTcgMTkuNDM1NSAyOC4yOTA2IDE5LjY2NDJWMTkuNzI0OUMyOC4zODY3IDE5Ljk0OTIgMjguNTQ2NCAyMC4xNDA0IDI4Ljc0OTggMjAuMjc1MkMyOC45NTMzIDIwLjQwOTkgMjkuMTkxNyAyMC40ODIyIDI5LjQzNTcgMjAuNDgzMkgyOS41NjQ2QzI5Ljk2NjkgMjAuNDgzMiAzMC4zNTI2IDIwLjY0MyAzMC42MzcxIDIwLjkyNzRDMzAuOTIxNSAyMS4yMTE5IDMxLjA4MTMgMjEuNTk3NiAzMS4wODEzIDIxLjk5OTlDMzEuMDgxMyAyMi40MDIxIDMwLjkyMTUgMjIuNzg3OSAzMC42MzcxIDIzLjA3MjNDMzAuMzUyNiAyMy4zNTY3IDI5Ljk2NjkgMjMuNTE2NSAyOS41NjQ2IDIzLjUxNjVIMjkuNDk2NEMyOS4yNTIzIDIzLjUxNzUgMjkuMDEzOSAyMy41ODk4IDI4LjgxMDUgMjMuNzI0NkMyOC42MDcgMjMuODU5MyAyOC40NDc0IDI0LjA1MDYgMjguMzUxMyAyNC4yNzQ5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS41MTk3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF83NjBfOTk4OFwiIHg9XCIwLjcxOTcyN1wiIHk9XCIwLjk4MDQ2OVwiIHdpZHRoPVwiNDQuMDRcIiBoZWlnaHQ9XCI0NC4wNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIiByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzYwXzk5ODhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93Xzc2MF85OTg4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF83NjBfOTk4OFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4LjJcIiBoZWlnaHQ9XCIxOC4yXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMy42Mzk2IDEyLjkwMDQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhbm9EYXRhICYmICFsb2FkaW5nXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJleHBvcnRYTFNYKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDE5IDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICA8cGF0aCBkPVwiTTcuNTMzNjkgMTIuODQ0MUgxNS4wMjQxTDEzLjU1NjggMTQuMzE3MkwxNC4zNTg3IDE1LjExOTFMMTcuMjAyNCAxMi4yNzU0TDE0LjM1ODcgOS40MzE2NEwxMy41NTY4IDEwLjIzMzZMMTUuMDI0MSAxMS43MDY2SDcuNTMzNjlWMTIuODQ0MVpcIiBmaWxsPVwiYmxhY2tcIi8+XHJcbiAgPHBhdGggZD1cIk0xMi42NTI2IDguODYzMVY2LjU4ODFDMTIuNjUzIDYuNTEzMjUgMTIuNjM4NyA2LjQzOTA0IDEyLjYxMDQgNi4zNjk3NUMxMi41ODIxIDYuMzAwNDUgMTIuNTQwNCA2LjIzNzQzIDEyLjQ4NzcgNi4xODQyOEw4LjUwNjQgMi4yMDMwM0M4LjQ1MzI2IDIuMTUwMzIgOC4zOTAyMyAyLjEwODYyIDguMzIwOTQgMi4wODAzMUM4LjI1MTY0IDIuMDUyMDEgOC4xNzc0NCAyLjAzNzY2IDguMTAyNTkgMi4wMzgxSDIuNDE1MDlDMi4xMTM0IDIuMDM4MSAxLjgyNDA4IDIuMTU3OTQgMS42MTA3NSAyLjM3MTI2QzEuMzk3NDMgMi41ODQ1OCAxLjI3NzU5IDIuODczOTEgMS4yNzc1OSAzLjE3NTZWMTYuODI1NkMxLjI3NzU5IDE3LjEyNzMgMS4zOTc0MyAxNy40MTY2IDEuNjEwNzUgMTcuNjI5OUMxLjgyNDA4IDE3Ljg0MzMgMi4xMTM0IDE3Ljk2MzEgMi40MTUwOSAxNy45NjMxSDExLjUxNTFDMTEuODE2OCAxNy45NjMxIDEyLjEwNjEgMTcuODQzMyAxMi4zMTk0IDE3LjYyOTlDMTIuNTMyNyAxNy40MTY2IDEyLjY1MjYgMTcuMTI3MyAxMi42NTI2IDE2LjgyNTZWMTUuNjg4MUgxMS41MTUxVjE2LjgyNTZIMi40MTUwOVYzLjE3NTZINi45NjUwOVY2LjU4ODFDNi45NjUwOSA2Ljg4OTc4IDcuMDg0OTMgNy4xNzkxMSA3LjI5ODI2IDcuMzkyNDNDNy41MTE1OCA3LjYwNTc1IDcuODAwOTEgNy43MjU2IDguMTAyNTkgNy43MjU2SDExLjUxNTFWOC44NjMxSDEyLjY1MjZaTTguMTAyNTkgNi41ODgxVjMuNDA4NzhMMTEuMjgxOSA2LjU4ODFIOC4xMDI1OVpcIiBmaWxsPVwiYmxhY2tcIi8+XHJcbjwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMlwiPkV4cG9ydDwvc3Bhbj4gPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibm9EYXRhXCIgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbm9kYXRhLXRhYmxlXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGVcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXN1YlwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgdGhpcyBleWUgdGVzdCB0YWJsZTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFub0RhdGEgJiYgIWxvYWRpbmdcIiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSAqbmdJZj1cImtleVR5cGUgPT09J3N0b3JlJ1wiIGNsYXNzPVwidy0xMDAgdGFibGUgYm90dG9tLWJvcmRlciB0ZXh0LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2RhdGUnKVwiPiBEYXRlIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnZGF0ZScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHdpZHRoPVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnZGF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidXNlcnM/LnJvbGUgPT09J3N1cGVyYWRtaW4nXCIgY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSTSBOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0nc3VwZXJhZG1pbicgfHwgdXNlcnM/LnJvbGUgPT09J2FkbWluJ1wiIGNsYXNzPVwidGV4dC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsdXN0ZXIgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0b3JlTmFtZScpXCI+U3RvcmUgTmFtZSA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlTmFtZScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnc3RvcmVOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzdG9yZUlkJylcIj5TdG9yZSBJRCA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlSWQnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB3aWR0aD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlSWQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0aGlzLnR5cGVWYWx1ZSA9PT0ncmVtb3RlJ1wiIGNsYXNzPVwidGV4dC1zdGFydFwiPkVuZ2FnZW1lbnQgSUQ8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0aGlzLnR5cGVWYWx1ZSAhPT0ncmVtb3RlJ1wiIGNsYXNzPVwidGV4dC1zdGFydFwiPk9wdG9tIElEPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidGhpcy50eXBlVmFsdWUgIT09J3JlbW90ZSdcIiBjbGFzcz1cInRleHQtc3RhcnRcIj5RdWV1ZSBJRDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdDb21wbGlhbmNlU2NvcmUnKVwiPlRhbmdvIFNjb3JlIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnQ29tcGxpYW5jZVNjb3JlJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdDb21wbGlhbmNlU2NvcmUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCd0cnVzdFNjb3JlJylcIj5UcnVzdCBTY29yZSA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3RydXN0U2NvcmUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3RydXN0U2NvcmUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4gPC90aD5cclxuIDx0aD48c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnY292ZXJlZFN0ZXBzQUknKVwiPlN0ZXBzIENvdmVyZWQgQnkgQUkgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjb3ZlcmVkU3RlcHNBSScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY292ZXJlZFN0ZXBzQUknID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4gPC90aD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInRoaXMudHlwZVZhbHVlICE9PSdyZW1vdGUnXCI+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU29ydCgndmlzaXRvcnNUeXBlJylcIj5WaXNpdG9yIFR5cGUgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICd2aXNpdG9yc1R5cGUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3Zpc2l0b3JzVHlwZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPiA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+VGVzdCBEdXJhdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIiAqbmdJZj1cInRoaXMudHlwZVZhbHVlICE9PSdyZW1vdGUnXCI+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU29ydCgnY29tbWVudCcpXCI+RXllIFRlc3QgU3RhdHVzIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnY29tbWVudCcgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY29tbWVudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj48c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Tb3J0KCdzdWJDb21tZW50JylcIj5Db21tZW50cyA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N1YkNvbW1lbnQnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N1YkNvbW1lbnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2F1ZGl0U3RhdHVzJylcIj5BdWRpdCBTdGF0dXMgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdhdWRpdFN0YXR1cycgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnYXVkaXRTdGF0dXMnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+QXVkaXRlZCBCeTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb2JqIG9mIGV5ZVRlc3REYXRhOyBsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy5kYXRlIHwgZGF0ZTonZGQgTU1NLCB5eXl5J319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0gJ3N1cGVyYWRtaW4nXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9iaj8uUk1OYW1lXCI+XHJcbiAgICA8IS0tIFNwbGl0IGFuZCBzaG93IHRoZSBmaXJzdCB2YWx1ZSAtLT5cclxuICAgIHt7IG9iai5STU5hbWUuc3BsaXQoJywnKVswXSB9fVxyXG5cclxuICAgIDwhLS0gU2hvdyArTiBiYWRnZSBpZiBtb3JlIHZhbHVlcyBleGlzdCAtLT5cclxuICAgIDxzcGFuICpuZ0lmPVwib2JqLlJNTmFtZS5zcGxpdCgnLCcpLmxlbmd0aCA+IDFcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQgbXMtMlwiPlxyXG4gICAgICAre3sgb2JqLlJNTmFtZS5zcGxpdCgnLCcpLmxlbmd0aCAtIDEgfX1cclxuICAgIDwvc3Bhbj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ1c2Vycz8ucm9sZSA9PT0nc3VwZXJhZG1pbicgfHwgdXNlcnM/LnJvbGUgPT09J2FkbWluJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9iaj8uY2x1c3Rlck5hbWVcIj5cclxuIHt7IG9iai5jbHVzdGVyTmFtZS5zcGxpdCgnLCcpWzBdIH19XHJcbiA8c3BhbiAqbmdJZj1cIm9iai5jbHVzdGVyTmFtZS5zcGxpdCgnLCcpLmxlbmd0aCA+IDFcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQgbXMtMlwiPlxyXG4gICAgICAre3sgb2JqLmNsdXN0ZXJOYW1lLnNwbGl0KCcsJykubGVuZ3RoIC0gMSB9fVxyXG4gICAgPC9zcGFuPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LnN0b3JlTmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy5zdG9yZUlkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0aGlzLnR5cGVWYWx1ZSA9PT0ncmVtb3RlJ1wiIGNsYXNzPVwiZW5nYWdlLXRleHRcIj57e29iaj8uZW5nYWdlbWVudElkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0aGlzLnR5cGVWYWx1ZSAhPT0ncmVtb3RlJ1wiPnt7b2JqPy5vcHR1bUlkID8gb2JqPy5vcHR1bUlkIDonJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudHlwZVZhbHVlICE9PSdyZW1vdGUnXCIgY2xhc3M9XCJlbmdhZ2UtdGV4dFwiPnt7b2JqPy5xdWV1ZUlkID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8ucXVldWVJZDonJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAge3sgb2JqPy5jb21wbGlhbmNlU2NvcmUgPz8gJy0tJyB9fVxyXG48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8udHJ1c3RTY29yZSA/PyAnLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LmNvdmVyZWRTdGVwc0FJID8gb2JqPy5jb3ZlcmVkU3RlcHNBSTonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIiAqbmdJZj1cInRoaXMudHlwZVZhbHVlICE9PSdyZW1vdGUnXCI+e3tvYmo/LnZpc2l0b3JzVHlwZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmo/LnZpc2l0b3JzVHlwZTonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/Lm1pbiA/IG9iaj8ubWluIDonMCd9fSBtaW5zIHt7b2JqPy5zZWMgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5zZWM6JzAnfX0gc2VjczwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudHlwZVZhbHVlICE9PSdyZW1vdGUnXCI+XHJcbiAgPHNwYW4gXHJcbiAgICBjbGFzcz1cImJhZGdlXCIgXHJcbiAgICBbbmdDbGFzc109XCJvYmo/LmNvbW1lbnQgPyAnYmFkZ2UtbGlnaHQtZGFuZ2VyJyA6ICdiYWRnZS1saWdodC1zdWNjZXNzJ1wiPlxyXG4gICAge3sgb2JqPy5jb21tZW50ID8gJ0Zha2UnIDogJ0dlbnVpbmUnIH19XHJcbiAgPC9zcGFuPlxyXG48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy5zdWJDb21tZW50ID8gb2JqPy5zdWJDb21tZW50OictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib2JqPy5hdWRpdFN0YXR1cyA9PT0nWWV0LXRvLUF1ZGl0J1wiPnt7b2JqPy5hdWRpdFN0YXR1c319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC13YXJuaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9iaj8uYXVkaXRTdGF0dXMgPT09J1JlLUF1ZGl0ZWQnXCI+e3tvYmo/LmF1ZGl0U3RhdHVzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib2JqPy5hdWRpdFN0YXR1cyA9PT0nQXVkaXRlZCdcIj57e29iaj8uYXVkaXRTdGF0dXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtaW5mb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvYmo/LmF1ZGl0U3RhdHVzID09PSdJbi1Qcm9ncmVzcydcIj57e29iaj8uYXVkaXRTdGF0dXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy5hdWRpdGVkQnk/b2JqPy5hdWRpdGVkQnk6XCItXCJ9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImV5ZVRlc3RWaWV3KG9iailcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC44MzM0OTYgOC4wMDAxNkMwLjgzMzQ5NiA4LjAwMDE2IDQuMTY2ODMgMS4zMzM1IDEwLjAwMDIgMS4zMzM1QzE1LjgzMzUgMS4zMzM1IDE5LjE2NjggOC4wMDAxNiAxOS4xNjY4IDguMDAwMTZDMTkuMTY2OCA4LjAwMDE2IDE1LjgzMzUgMTQuNjY2OCAxMC4wMDAyIDE0LjY2NjhDNC4xNjY4MyAxNC42NjY4IDAuODMzNDk2IDguMDAwMTYgMC44MzM0OTYgOC4wMDAxNlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC4wMDAyIDEwLjUwMDJDMTEuMzgwOSAxMC41MDAyIDEyLjUwMDIgOS4zODA4NyAxMi41MDAyIDguMDAwMTZDMTIuNTAwMiA2LjYxOTQ1IDExLjM4MDkgNS41MDAxNiAxMC4wMDAyIDUuNTAwMTZDOC42MTk0NSA1LjUwMDE2IDcuNTAwMTYgNi42MTk0NSA3LjUwMDE2IDguMDAwMTZDNy41MDAxNiA5LjM4MDg3IDguNjE5NDUgMTAuNTAwMiAxMC4wMDAyIDEwLjUwMDJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPHRhYmxlICpuZ0lmPVwia2V5VHlwZSA9PT0ncm0nXCIgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnUk1OYW1lJylcIj4gUk0gTmFtZSA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ1JNTmFtZScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHdpZHRoPVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnUk1OYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnY2x1c3RlckNvdW50JylcIj4gQ2x1c3RlcnMgQ291bnQgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjbHVzdGVyQ291bnQnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NsdXN0ZXJDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0b3Jlc0NvdW50JylcIj5TdG9yZXMgQ291bnQgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZXNDb3VudCcgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnc3RvcmVzQ291bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBUYW5nbyBBSSBGaWxlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICBUcnVzdCBBdWRpdCBDb21wbGV0ZWQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhbmdvIFNjb3JlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdCBTY29yZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1zdGFydFwiPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvYmogb2YgZXllVGVzdERhdGE7IGxldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LlJNTmFtZSA/IG9iaj8uUk1OYW1lOictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8uY2x1c3RlckNvdW50ID8gb2JqPy5jbHVzdGVyQ291bnQ6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy5zdG9yZXNDb3VudCA/IG9iaj8uc3RvcmVzQ291bnQ6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b2JqPy50b3RhbEZpbGVzID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8uY29tcGxldGVkRmlsZXMgPz8gJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmouY29tcGxpYW5jZVNjb3JlID8/ICctLSd9fVxyXG4gXHJcbjwvdGQ+XHJcbjx0ZD5cclxuICB7eyBvYmo/LnRydXN0U2NvcmUgPz8gJy0tJyB9fVxyXG48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ0eXBlVmFsKCdjbHVzdGVyJyxvYmopXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuODMzNDk2IDguMDAwMTZDMC44MzM0OTYgOC4wMDAxNiA0LjE2NjgzIDEuMzMzNSAxMC4wMDAyIDEuMzMzNUMxNS44MzM1IDEuMzMzNSAxOS4xNjY4IDguMDAwMTYgMTkuMTY2OCA4LjAwMDE2QzE5LjE2NjggOC4wMDAxNiAxNS44MzM1IDE0LjY2NjggMTAuMDAwMiAxNC42NjY4QzQuMTY2ODMgMTQuNjY2OCAwLjgzMzQ5NiA4LjAwMDE2IDAuODMzNDk2IDguMDAwMTZaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuMDAwMiAxMC41MDAyQzExLjM4MDkgMTAuNTAwMiAxMi41MDAyIDkuMzgwODcgMTIuNTAwMiA4LjAwMDE2QzEyLjUwMDIgNi42MTk0NSAxMS4zODA5IDUuNTAwMTYgMTAuMDAwMiA1LjUwMDE2QzguNjE5NDUgNS41MDAxNiA3LjUwMDE2IDYuNjE5NDUgNy41MDAxNiA4LjAwMDE2QzcuNTAwMTYgOS4zODA4NyA4LjYxOTQ1IDEwLjUwMDIgMTAuMDAwMiAxMC41MDAyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDx0YWJsZSAqbmdJZj1cImtleVR5cGUgPT09J2NsdXN0ZXInXCIgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnY2x1c3Rlck5hbWUnKVwiPiBDbHVzdGVycyBOYW1lIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnY2x1c3Rlck5hbWUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NsdXN0ZXJOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnc3RvcmVzQ291bnQnKVwiPlN0b3JlcyBDb3VudCA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3Jlc0NvdW50JyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZXNDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIFRhbmdvIEFJIEZpbGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0IEF1ZGl0IENvbXBsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYW5nbyBTY29yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdCBTY29yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXN0YXJ0XCI+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9iaiBvZiBleWVUZXN0RGF0YTsgbGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8uY2x1c3Rlck5hbWUgPyBvYmo/LmNsdXN0ZXJOYW1lOictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8uc3RvcmVzQ291bnQgPyBvYmo/LnN0b3Jlc0NvdW50OictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e29iaj8udG90YWxGaWxlcyA/PyAnLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmo/LmNvbXBsZXRlZEZpbGVzID8/ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAge3sgb2JqPy5jb21wbGlhbmNlU2NvcmUgPz8gICctLScgfX1cclxuPC90ZD5cclxuPHRkPlxyXG4gIHt7IG9iaj8udHJ1c3RTY29yZSA/PyAnLS0nIH19XHJcbjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInR5cGVWYWwoJ3N0b3JlJyxvYmopXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuODMzNDk2IDguMDAwMTZDMC44MzM0OTYgOC4wMDAxNiA0LjE2NjgzIDEuMzMzNSAxMC4wMDAyIDEuMzMzNUMxNS44MzM1IDEuMzMzNSAxOS4xNjY4IDguMDAwMTYgMTkuMTY2OCA4LjAwMDE2QzE5LjE2NjggOC4wMDAxNiAxNS44MzM1IDE0LjY2NjggMTAuMDAwMiAxNC42NjY4QzQuMTY2ODMgMTQuNjY2OCAwLjgzMzQ5NiA4LjAwMDE2IDAuODMzNDk2IDguMDAwMTZaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuMDAwMiAxMC41MDAyQzExLjM4MDkgMTAuNTAwMiAxMi41MDAyIDkuMzgwODcgMTIuNTAwMiA4LjAwMDE2QzEyLjUwMDIgNi42MTk0NSAxMS4zODA5IDUuNTAwMTYgMTAuMDAwMiA1LjUwMDE2QzguNjE5NDUgNS41MDAxNiA3LjUwMDE2IDYuNjE5NDUgNy41MDAxNiA4LjAwMDE2QzcuNTAwMTYgOS4zODA4NyA4LjYxOTQ1IDEwLjUwMDIgMTAuMDAwMiAxMC41MDAyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXJcIiAqbmdJZj1cIiFub0RhdGEgJiYgIWxvYWRpbmdcIj5cclxuICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJwYWdlU2l6ZVwiIFtjdXJyZW50UGFnZV09XCJvZmZzZXRcIiBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAgICAgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwicGFnZVNpemVcIiAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==