tango-app-ui-ticket-user 3.0.0 → 3.0.2-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/contact-details/contact-details.component.mjs +107 -0
- package/esm2022/lib/components/edge-cameraview/edge-cameraview.component.mjs +56 -0
- package/esm2022/lib/components/edgeapp-log/edgeapp-log.component.mjs +85 -0
- package/esm2022/lib/components/edit-details/edit-details.component.mjs +106 -0
- package/esm2022/lib/components/infratickets/infratickets.component.mjs +362 -0
- package/esm2022/lib/components/store-activity/store-activity.component.mjs +224 -0
- package/esm2022/lib/components/store-info/store-info.component.mjs +161 -0
- package/esm2022/lib/components/takeremote/takeremote.component.mjs +92 -0
- package/esm2022/lib/components/tango-ticket-users/tango-ticket-users.component.mjs +35 -5
- package/esm2022/lib/components/tickets/tickets.component.mjs +389 -0
- package/esm2022/lib/services/data.service.mjs +42 -0
- package/esm2022/lib/services/ticket-infra.service.mjs +106 -0
- package/esm2022/lib/tango-ticket-users-routing.module.mjs +16 -2
- package/esm2022/lib/tango-ticket-users.module.mjs +37 -6
- package/fesm2022/tango-app-ui-ticket-user.mjs +1726 -13
- package/fesm2022/tango-app-ui-ticket-user.mjs.map +1 -1
- package/lib/components/contact-details/contact-details.component.d.ts +28 -0
- package/lib/components/edge-cameraview/edge-cameraview.component.d.ts +16 -0
- package/lib/components/edgeapp-log/edgeapp-log.component.d.ts +22 -0
- package/lib/components/edit-details/edit-details.component.d.ts +25 -0
- package/lib/components/infratickets/infratickets.component.d.ts +84 -0
- package/lib/components/store-activity/store-activity.component.d.ts +53 -0
- package/lib/components/store-info/store-info.component.d.ts +40 -0
- package/lib/components/takeremote/takeremote.component.d.ts +26 -0
- package/lib/components/tango-ticket-users/tango-ticket-users.component.d.ts +11 -1
- package/lib/components/tickets/tickets.component.d.ts +91 -0
- package/lib/services/data.service.d.ts +12 -0
- package/lib/services/ticket-infra.service.d.ts +40 -0
- package/lib/tango-ticket-users.module.d.ts +16 -3
- package/package.json +1 -1
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { Component, HostListener, Input } from '@angular/core';
|
|
2
|
+
import dayjs from 'dayjs';
|
|
3
|
+
import 'dayjs/locale/en';
|
|
4
|
+
import utc from 'dayjs/plugin/utc';
|
|
5
|
+
import timezone from 'dayjs/plugin/timezone';
|
|
6
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../../services/ticket-infra.service";
|
|
9
|
+
import * as i2 from "../../services/data.service";
|
|
10
|
+
import * as i3 from "tango-app-ui-shared";
|
|
11
|
+
import * as i4 from "@angular/common";
|
|
12
|
+
import * as i5 from "@angular/forms";
|
|
13
|
+
import * as i6 from "ngx-daterangepicker-material";
|
|
14
|
+
dayjs.extend(utc);
|
|
15
|
+
dayjs.extend(timezone);
|
|
16
|
+
export class StoreActivityComponent {
|
|
17
|
+
service;
|
|
18
|
+
dataservice;
|
|
19
|
+
cd;
|
|
20
|
+
gs;
|
|
21
|
+
selectCard;
|
|
22
|
+
state;
|
|
23
|
+
filteredIssue = 'Camera Issues';
|
|
24
|
+
selectedIssue = 'internet';
|
|
25
|
+
updated = true;
|
|
26
|
+
noData = false;
|
|
27
|
+
loading = true;
|
|
28
|
+
storeTicket;
|
|
29
|
+
viewTickets;
|
|
30
|
+
resolvedIssue = true;
|
|
31
|
+
issueObject = ['Store Operation Issue', 'Internet Issue', 'Camera Issue', 'System Issue', 'Application Issue'];
|
|
32
|
+
dropDown = false;
|
|
33
|
+
dropdownItems = ['All', 'Store Operation Issue', 'Internet Issue', 'Camera Issue', 'System Issue', 'Application Issue'];
|
|
34
|
+
selectedDateRange = {};
|
|
35
|
+
ticketId;
|
|
36
|
+
dateRangeFilter;
|
|
37
|
+
ticketCard;
|
|
38
|
+
viewTicketList;
|
|
39
|
+
headerFilter;
|
|
40
|
+
user;
|
|
41
|
+
destroy$ = new Subject();
|
|
42
|
+
storeId;
|
|
43
|
+
dayjs = dayjs;
|
|
44
|
+
constructor(service, dataservice, cd, gs) {
|
|
45
|
+
this.service = service;
|
|
46
|
+
this.dataservice = dataservice;
|
|
47
|
+
this.cd = cd;
|
|
48
|
+
this.gs = gs;
|
|
49
|
+
dataservice.data$.subscribe((data) => {
|
|
50
|
+
this.state = data;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
onClick(event) {
|
|
54
|
+
const target = event.target;
|
|
55
|
+
if (!target.closest('.dropdown')) {
|
|
56
|
+
this.dropDown = false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
ngOnInit() {
|
|
60
|
+
this.gs.dataRangeValue.pipe(takeUntil(this.destroy$)).subscribe((data) => {
|
|
61
|
+
if (data != null) {
|
|
62
|
+
this.user = JSON.parse(localStorage.getItem('user-info') || "");
|
|
63
|
+
this.headerFilter = data;
|
|
64
|
+
this.storeTicketcard();
|
|
65
|
+
this.storeTicketList();
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
ngOnDestroy() {
|
|
70
|
+
this.destroy$.next(true);
|
|
71
|
+
this.destroy$.complete();
|
|
72
|
+
}
|
|
73
|
+
storeTicketcard() {
|
|
74
|
+
let data = {
|
|
75
|
+
storeId: this.storeId,
|
|
76
|
+
fromDate: this.headerFilter?.date?.startDate,
|
|
77
|
+
toDate: this.headerFilter?.date?.endDate,
|
|
78
|
+
};
|
|
79
|
+
this.service.storeTicketcard(data).subscribe({
|
|
80
|
+
next: (res) => {
|
|
81
|
+
if (res && res?.code == 200) {
|
|
82
|
+
this.ticketCard = res.data.data;
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
error(err) {
|
|
86
|
+
},
|
|
87
|
+
complete() {
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
storeTicketList() {
|
|
92
|
+
let data = {
|
|
93
|
+
storeId: this.storeId,
|
|
94
|
+
fromDate: this.headerFilter?.date?.startDate,
|
|
95
|
+
toDate: this.headerFilter?.date?.endDate,
|
|
96
|
+
filter: this.filteredIssue,
|
|
97
|
+
export: false
|
|
98
|
+
};
|
|
99
|
+
this.service.storeTicketList(data).subscribe({
|
|
100
|
+
next: (res) => {
|
|
101
|
+
if (res && res.code == 200) {
|
|
102
|
+
this.storeTicket = res.data.data;
|
|
103
|
+
this.ticketId = this.storeTicket[0]?.ticketId;
|
|
104
|
+
this.viewTicket();
|
|
105
|
+
this.loading = false;
|
|
106
|
+
this.noData = false;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.noData = true;
|
|
110
|
+
this.loading = false;
|
|
111
|
+
}
|
|
112
|
+
this.cd.detectChanges();
|
|
113
|
+
},
|
|
114
|
+
error: (err) => {
|
|
115
|
+
this.noData = true;
|
|
116
|
+
this.loading = false;
|
|
117
|
+
},
|
|
118
|
+
complete: () => {
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
viewTicket() {
|
|
123
|
+
let data = {
|
|
124
|
+
"ticketId": this.ticketId
|
|
125
|
+
};
|
|
126
|
+
this.service.viewTicket(data).subscribe({
|
|
127
|
+
next: (res) => {
|
|
128
|
+
if (res && res.code == 200 && Array.isArray(res.data.ticketActivity)) {
|
|
129
|
+
this.viewTickets = res?.data;
|
|
130
|
+
this.viewTicketList = res?.data?.ticketActivity.slice().reverse();
|
|
131
|
+
// this.viewTicketList.forEach((e: any) => {
|
|
132
|
+
// e.timeStamp = this.getRelativeTime(e.timeStamp);
|
|
133
|
+
// });
|
|
134
|
+
this.cd.detectChanges();
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
error: (err) => {
|
|
138
|
+
},
|
|
139
|
+
complete: () => {
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
exportStoreListasXlsx() {
|
|
144
|
+
let data = {
|
|
145
|
+
storeId: this.storeId,
|
|
146
|
+
fromDate: this.headerFilter?.date?.startDate,
|
|
147
|
+
toDate: this.headerFilter?.date?.endDate,
|
|
148
|
+
filter: this.filteredIssue,
|
|
149
|
+
export: true
|
|
150
|
+
};
|
|
151
|
+
this.service.storeTicketListExport(data).subscribe({
|
|
152
|
+
next: (res) => {
|
|
153
|
+
let excelData = res;
|
|
154
|
+
this.dataservice.saveAsExcelFile(excelData, 'store');
|
|
155
|
+
},
|
|
156
|
+
error: (err) => {
|
|
157
|
+
},
|
|
158
|
+
complete() {
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
ShowTicket(index, value) {
|
|
163
|
+
this.selectCard = index ? index : 0;
|
|
164
|
+
this.ticketId = value;
|
|
165
|
+
this.viewTicket();
|
|
166
|
+
}
|
|
167
|
+
FilterIssue(value) {
|
|
168
|
+
this.filteredIssue = value;
|
|
169
|
+
this.storeTicketList();
|
|
170
|
+
}
|
|
171
|
+
selectItem(value) {
|
|
172
|
+
this.filteredIssue = value;
|
|
173
|
+
this.dropDown = false;
|
|
174
|
+
}
|
|
175
|
+
openDropdown(event) {
|
|
176
|
+
event.stopPropagation();
|
|
177
|
+
this.dropDown = !this.dropDown;
|
|
178
|
+
}
|
|
179
|
+
ranges = {
|
|
180
|
+
'Today': [this.dayjs(), this.dayjs()],
|
|
181
|
+
'Yesterday': [this.dayjs().subtract(1, 'days'), this.dayjs().subtract(1, 'days')],
|
|
182
|
+
'This Week': [this.dayjs().subtract(6, 'days'), this.dayjs()],
|
|
183
|
+
'Last Week': [this.dayjs().subtract(14, 'days').startOf('days'), this.dayjs().subtract(8, 'days').endOf('days')],
|
|
184
|
+
'This Month': [this.dayjs().startOf('month'), this.dayjs().endOf('month')],
|
|
185
|
+
'Last Month': [
|
|
186
|
+
this.dayjs().subtract(1, 'month').startOf('month'),
|
|
187
|
+
this.dayjs().subtract(1, 'month').endOf('month')
|
|
188
|
+
]
|
|
189
|
+
};
|
|
190
|
+
datechange(event) {
|
|
191
|
+
if (event && event.startDate && event.endDate) {
|
|
192
|
+
if (this.dayjs(event.startDate).isValid() && this.dayjs(event.endDate).isValid()) {
|
|
193
|
+
// Dates are valid, proceed with formatting
|
|
194
|
+
this.selectedDateRange.startDate = this.dayjs(event.startDate).utc().format('DD-MM-YYYY');
|
|
195
|
+
this.selectedDateRange.endDate = this.dayjs(event.endDate).utc().format('DD-MM-YYYY');
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// Dates are not valid, handle the scenario accordingly
|
|
199
|
+
console.error('Invalid dates provided:', event.startDate, event.endDate);
|
|
200
|
+
// If you want to fallback to stored filters when the dates are invalid, you can keep the existing logic
|
|
201
|
+
const storedFilters = JSON.parse(localStorage.getItem('dateRangeFilters') || '{}');
|
|
202
|
+
if (storedFilters.startDate && storedFilters.endDate) {
|
|
203
|
+
this.selectedDateRange.startDate = this.dayjs(storedFilters.startDate).format('DD-MM-YYYY');
|
|
204
|
+
this.selectedDateRange.endDate = this.dayjs(storedFilters.endDate).format('DD-MM-YYYY');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
console.error('Invalid event object:', event);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: StoreActivityComponent, deps: [{ token: i1.TicketsService }, { token: i2.DataService }, { token: i0.ChangeDetectorRef }, { token: i3.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
213
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: StoreActivityComponent, selector: "lib-store-activity", inputs: { storeId: "storeId" }, host: { listeners: { "document:click": "onClick($event)" } }, ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title flex-column\"> \r\n <span class=\"card-label\">\r\n Activity \r\n </span>\r\n <span class=\"text-sub\">\r\n An overview of the store issues and the downtime for 02 July, 2023\r\n </span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"position-relative\">\r\n <button type=\"button\" (click)=\"openDropdown($event)\"\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=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M5 10.0264H15M2.5 5.02637H17.5M7.5 15.0264H12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"ms-2\">Filter</span> </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-200px position-absolute top-50px end-0 z-1\">\r\n <ul *ngFor=\"let item of dropdownItems\" class=\"list-unstyled\">\r\n <li [ngClass]=\"this.filteredIssue == item ? 'active' : ''\" class=\"camera px-5 items fw-semibold cursor-pointer py-2\" (click)=\"selectItem(item)\">{{item}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"btn btn-default btn-outline\" (click)=\"exportStoreListasXlsx()\">\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M17.5 12.5264V15.8597C17.5 16.3017 17.3244 16.7257 17.0118 17.0382C16.6993 17.3508 16.2754 17.5264 15.8333 17.5264H4.16667C3.72464 17.5264 3.30072 17.3508 2.98816 17.0382C2.67559 16.7257 2.5 16.3017 2.5 15.8597V12.5264M14.1667 6.69303L10 2.52637M10 2.52637L5.83333 6.69303M10 2.52637V12.5264\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span> Export\r\n </div>\r\n <div class=\"d-flex align-items-center position-relative my-1 ms-3\">\r\n <span 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\" type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\" [alwaysShowCalendars]=\"false\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"d-flex\">\r\n <div *ngFor=\"let issue of ticketCard\" class=\"card card-view p-5 me-5\">\r\n <span class=\"title fw-bold\">{{issue.count}}</span>\r\n <span class=\"sub-title fw-semibold\">{{issue.name}}</span>\r\n </div>\r\n </div>\r\n <div class=\"rounded-3 border border-gray border-1 mt-5\">\r\n <div *ngIf=\"!loading && !noData\" class=\"row p-5\">\r\n <div class=\"col-sm-6\">\r\n <div *ngFor=\"let data of storeTicket;let index = index\" class=\"issuecard w-100 mb-4 cursor-pointer\" (click)=\"ShowTicket(index,data?.ticketId)\" [ngClass]=\"selectCard == index ? 'active' : ''\">\r\n <div class=\"maincard-label fw-bold d-flex justify-content-between mb-5\"><span> <img src='./assets/tango/Images/ticket.svg'> {{data?.ticketId}}</span> <span class=\"badge text-success\"\r\n [ngClass]=\"data.status == 'closed' ? 'badge-light-success' :(data.status == 'inprogress' ? 'badge-light-primary':'badge-light-warning')\">{{data.status}}</span>\r\n </div>\r\n <div *ngIf=\"data.issueStatus === 'notidentified'\" class=\"mb-5 contenttext\">\r\n We have not received data from your store. We are currently investigating the issue.\r\n </div>\r\n <div *ngIf=\"data.issueStatus ==='identified'\" class=\"mb-5 contenttext\">Store is currently encountering a <span class=\"fw-bold-700\">{{data.primaryIssue}}</span> which is \r\n <span *ngFor=\"let secondary of data.secondaryIssue; let last = last\" class=\"fw-bold-700\">{{secondary?.name}}<ng-container *ngIf=\"!last\"> ,</ng-container> </span>.</div>\r\n \r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"profile d-flex align-items-centre justify-content-centre\">\r\n <img class=\"\" src=\"./assets/tango/Images/gropmodal.png\" alt=\"\">\r\n </div>\r\n <div class=\"d-flex justify-content-between\" > \r\n <span class=\"contenttext px-3\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M14 10C14 10.3536 13.8595 10.6928 13.6095 10.9428C13.3594 11.1929 13.0203 11.3333 12.6667 11.3333H4.66667L2 14V3.33333C2 2.97971 2.14048 2.64057 2.39052 2.39052C2.64057 2.14048 2.97971 2 3.33333 2H12.6667C13.0203 2 13.3594 2.14048 13.6095 2.39052C13.8595 2.64057 14 2.97971 14 3.33333V10Z\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> {{data.comments}} </span>\r\n <span class=\"contenttext px-3\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M10.6667 1.33398V4.00065M5.33333 1.33398V4.00065M2 6.66732H14M3.33333 2.66732H12.6667C13.403 2.66732 14 3.26427 14 4.00065V13.334C14 14.0704 13.403 14.6673 12.6667 14.6673H3.33333C2.59695 14.6673 2 14.0704 2 13.334V4.00065C2 3.26427 2.59695 2.66732 3.33333 2.66732Z\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> {{data.Date}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <div class=\"maincard-label fw-bold d-flex justify-content-between\">\r\n <span><img src='./assets/tango/Images/ticket.svg'>{{viewTickets?.ticketId}}</span>\r\n <span class=\"badge badge-light-primary\">{{viewTickets?.status}}</span>\r\n </div>\r\n <div *ngFor=\"let activity of viewTicketList\" class=\"\"> \r\n <!-- User code starts here -->\r\n <div *ngIf=\"activity.actionBy == 'User'\" class=\"d-flex mt-10 ms-5\">\r\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\r\n <div class=\"d-flex align-items-centre justify-content-centre\">\r\n <img class=\"msgprofile\" src='https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8c3RvcmV8ZW58MHx8MHx8fDA%3D'>\r\n </div>\r\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\r\n </div> \r\n <div class=\"py-3\">\r\n <div class=\"d-flex mb-3\">\r\n <span class=\"headingtext\">Olivia Rhye</span>\r\n <span class=\"timingtext px-3\">Now</span>\r\n </div>\r\n <div *ngFor=\"let user of activity.reasons; let j =index\">\r\n <span class=\"profile-label font-bold-400\">User has replied to the issue</span>\r\n <!-- <div *ngIf=\"resolvedIssue\" class=\"profile-label fw-bold-400 mt-5\">Issue has been <span class=\"fw-bold-700\">resolved</span>.\r\n <div class=\"\"> It takes 7 more days to resolve.</div>\r\n </div> -->\r\n <div *ngIf=\"user.primaryIssue === 'Camera Issues' \">\r\n <span class=\"profile-label fw-bold-400\">Are all CCTV cameras functioning properly?</span>\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <span class=\"\">Camera 1</span>\r\n <div class=\"d-flex align-items-centre justify-content-centre rounded-3 overflow-hidden\">\r\n <img class=\"w-100\" src='https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8c3RvcmV8ZW58MHx8MHx8fDA%3D'>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <span class=\"\">Camera 2</span>\r\n <div class=\"d-flex align-items-centre justify-content-centre rounded-3 overflow-hidden\">\r\n <img class=\"w-100\" src='https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8c3RvcmV8ZW58MHx8MHx8fDA%3D'>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <span class=\"\">Camera 3</span>\r\n <div class=\"d-flex align-items-centre justify-content-centre rounded-3 overflow-hidden\">\r\n <img class=\"w-100\" src='https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8c3RvcmV8ZW58MHx8MHx8fDA%3D'>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"profile-label fw-bold-400 mt-5\">\r\n The above camera streaming are not working due <span class=\"fw-bold-700\">power issue</span> to the camera.\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"contenttext fw-semibold mt-3\">\r\n We're currently encountering an <span class=\"fw-bold-700\">{{user.primaryIssue}}</span>\r\n </div>\r\n <div *ngFor=\"let issue of user.secondaryIssue; let k =index\" class=\"mt-3\">\r\n <span class=\"profile-label fw-bold-400\">The following are the relevant problem facing</span>\r\n <ul class=\"timingtext fw-bold-400 mt-3\">\r\n <li>{{issue.name}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div> \r\n </div>\r\n <!-- User code ends here -->\r\n </div>\r\n <!-- Tango code starts here -->\r\n <div *ngIf=\"activity.actionBy == 'Tango'\" class=\"d-flex mt-10 ms-5\">\r\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\r\n <div class=\"d-flex align-items-centre justify-content-centre\">\r\n <img class=\"msgprofile\" src=\"./assets/tango/Images/tangoprofile.png\">\r\n </div>\r\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\r\n </div> \r\n <div class=\"py-3\">\r\n <div class=\"d-flex mb-3\">\r\n <span class=\"headingtext\">Tango</span>\r\n <span class=\"timingtext px-3\">Now</span>\r\n </div>\r\n <div *ngIf=\"activity.actionType !== 'defaultInfra'\" class=\"mb-3\">\r\n <span class=\"profile-label fw-bold-400\">tango has replied to the issue</span>\r\n <!-- <div *ngIf=\"updated\" class=\"textupdates fw-bold-400 mt-3\">Thank you for the Update.<span *ngIf=\"\">The ticket will be closed when the data is processed.</span></div> -->\r\n \r\n <div class=\"mt-3\">\r\n <span class=\"textupdates fw-bold-400\">Please follow the below steps to resolve the above issue</span>\r\n <div *ngFor=\"let data of activity.reasons; let index=index\" class=\"mt-5\">\r\n <span class=\"fw-semibold\">{{data?.primaryIssue}}</span>\r\n <ul *ngFor=\"let issue of data?.secondaryIssue\" class=\"mt-3 timingtext fw-bold-400\">\r\n <li>{{issue?.name}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"activity.actionType === 'defaultInfra'\" class=\"profile-label fw-bold-400\">We have not received data from your store. We are currently investigating the issue</div>\r\n </div> \r\n </div>\r\n <!-- Tango code ends here -->\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"loading\" >\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <div 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-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> \r\n\r\n</div>\r\n", styles: [".card-label{font-size:16px!important;line-height:24px!important}.card-view{width:250px}.card-view .title{color:var(--Gray-900, #101828);font-size:20px;line-height:30px}.card-view .sub-title{color:var(--Gray-700, #344054);font-size:14px;line-height:20px}.issuecard{width:240px;border-radius:10px;border:1px solid var(--Gray-200, #EAECF0);padding:16px}.issuecard label{color:var(--Black, #101828);font-size:14px;line-height:20px}.issuecard.active,.card-view.active{border:none!important;background:var(--Primary-25, #F6FCFF);box-shadow:0 0 0 4px #e9f7ff}.contenttext{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.maincard-content{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.maincard-label{color:var(--Gray-900, #101828);font-size:16px;line-height:24px}.profile{width:24px;height:24px;overflow:hidden;border-radius:200px}.fw-bold-700{font-weight:700!important}.fw-bold-400{font-weight:400!important}.msgprofile{width:48px!important;height:48px!important;border-radius:200px;overflow:hidden}.timingtext{color:var(--Gray-500, #667085);font-size:12px;line-height:18px}.profile-label{font-size:16px;color:var(--Gray-500, #667085);line-height:24px}.w-45{width:49%}.textupdates{color:var(--Gray-700, #344054);font-size:16px;line-height:24px}.textupdates1{color:var(--Gray-700, #344054);font-size:14px;line-height:24px}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.daterangepicker{display:block!important;top:153.85px!important;left:900px!important;right:0}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!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 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}: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}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.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"] }] });
|
|
214
|
+
}
|
|
215
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: StoreActivityComponent, decorators: [{
|
|
216
|
+
type: Component,
|
|
217
|
+
args: [{ selector: 'lib-store-activity', template: "<div class=\"card\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title flex-column\"> \r\n <span class=\"card-label\">\r\n Activity \r\n </span>\r\n <span class=\"text-sub\">\r\n An overview of the store issues and the downtime for 02 July, 2023\r\n </span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"position-relative\">\r\n <button type=\"button\" (click)=\"openDropdown($event)\"\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=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M5 10.0264H15M2.5 5.02637H17.5M7.5 15.0264H12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"ms-2\">Filter</span> </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-200px position-absolute top-50px end-0 z-1\">\r\n <ul *ngFor=\"let item of dropdownItems\" class=\"list-unstyled\">\r\n <li [ngClass]=\"this.filteredIssue == item ? 'active' : ''\" class=\"camera px-5 items fw-semibold cursor-pointer py-2\" (click)=\"selectItem(item)\">{{item}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"btn btn-default btn-outline\" (click)=\"exportStoreListasXlsx()\">\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M17.5 12.5264V15.8597C17.5 16.3017 17.3244 16.7257 17.0118 17.0382C16.6993 17.3508 16.2754 17.5264 15.8333 17.5264H4.16667C3.72464 17.5264 3.30072 17.3508 2.98816 17.0382C2.67559 16.7257 2.5 16.3017 2.5 15.8597V12.5264M14.1667 6.69303L10 2.52637M10 2.52637L5.83333 6.69303M10 2.52637V12.5264\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span> Export\r\n </div>\r\n <div class=\"d-flex align-items-center position-relative my-1 ms-3\">\r\n <span 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\" type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\" [alwaysShowCalendars]=\"false\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"d-flex\">\r\n <div *ngFor=\"let issue of ticketCard\" class=\"card card-view p-5 me-5\">\r\n <span class=\"title fw-bold\">{{issue.count}}</span>\r\n <span class=\"sub-title fw-semibold\">{{issue.name}}</span>\r\n </div>\r\n </div>\r\n <div class=\"rounded-3 border border-gray border-1 mt-5\">\r\n <div *ngIf=\"!loading && !noData\" class=\"row p-5\">\r\n <div class=\"col-sm-6\">\r\n <div *ngFor=\"let data of storeTicket;let index = index\" class=\"issuecard w-100 mb-4 cursor-pointer\" (click)=\"ShowTicket(index,data?.ticketId)\" [ngClass]=\"selectCard == index ? 'active' : ''\">\r\n <div class=\"maincard-label fw-bold d-flex justify-content-between mb-5\"><span> <img src='./assets/tango/Images/ticket.svg'> {{data?.ticketId}}</span> <span class=\"badge text-success\"\r\n [ngClass]=\"data.status == 'closed' ? 'badge-light-success' :(data.status == 'inprogress' ? 'badge-light-primary':'badge-light-warning')\">{{data.status}}</span>\r\n </div>\r\n <div *ngIf=\"data.issueStatus === 'notidentified'\" class=\"mb-5 contenttext\">\r\n We have not received data from your store. We are currently investigating the issue.\r\n </div>\r\n <div *ngIf=\"data.issueStatus ==='identified'\" class=\"mb-5 contenttext\">Store is currently encountering a <span class=\"fw-bold-700\">{{data.primaryIssue}}</span> which is \r\n <span *ngFor=\"let secondary of data.secondaryIssue; let last = last\" class=\"fw-bold-700\">{{secondary?.name}}<ng-container *ngIf=\"!last\"> ,</ng-container> </span>.</div>\r\n \r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"profile d-flex align-items-centre justify-content-centre\">\r\n <img class=\"\" src=\"./assets/tango/Images/gropmodal.png\" alt=\"\">\r\n </div>\r\n <div class=\"d-flex justify-content-between\" > \r\n <span class=\"contenttext px-3\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M14 10C14 10.3536 13.8595 10.6928 13.6095 10.9428C13.3594 11.1929 13.0203 11.3333 12.6667 11.3333H4.66667L2 14V3.33333C2 2.97971 2.14048 2.64057 2.39052 2.39052C2.64057 2.14048 2.97971 2 3.33333 2H12.6667C13.0203 2 13.3594 2.14048 13.6095 2.39052C13.8595 2.64057 14 2.97971 14 3.33333V10Z\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> {{data.comments}} </span>\r\n <span class=\"contenttext px-3\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M10.6667 1.33398V4.00065M5.33333 1.33398V4.00065M2 6.66732H14M3.33333 2.66732H12.6667C13.403 2.66732 14 3.26427 14 4.00065V13.334C14 14.0704 13.403 14.6673 12.6667 14.6673H3.33333C2.59695 14.6673 2 14.0704 2 13.334V4.00065C2 3.26427 2.59695 2.66732 3.33333 2.66732Z\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> {{data.Date}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <div class=\"maincard-label fw-bold d-flex justify-content-between\">\r\n <span><img src='./assets/tango/Images/ticket.svg'>{{viewTickets?.ticketId}}</span>\r\n <span class=\"badge badge-light-primary\">{{viewTickets?.status}}</span>\r\n </div>\r\n <div *ngFor=\"let activity of viewTicketList\" class=\"\"> \r\n <!-- User code starts here -->\r\n <div *ngIf=\"activity.actionBy == 'User'\" class=\"d-flex mt-10 ms-5\">\r\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\r\n <div class=\"d-flex align-items-centre justify-content-centre\">\r\n <img class=\"msgprofile\" src='https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8c3RvcmV8ZW58MHx8MHx8fDA%3D'>\r\n </div>\r\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\r\n </div> \r\n <div class=\"py-3\">\r\n <div class=\"d-flex mb-3\">\r\n <span class=\"headingtext\">Olivia Rhye</span>\r\n <span class=\"timingtext px-3\">Now</span>\r\n </div>\r\n <div *ngFor=\"let user of activity.reasons; let j =index\">\r\n <span class=\"profile-label font-bold-400\">User has replied to the issue</span>\r\n <!-- <div *ngIf=\"resolvedIssue\" class=\"profile-label fw-bold-400 mt-5\">Issue has been <span class=\"fw-bold-700\">resolved</span>.\r\n <div class=\"\"> It takes 7 more days to resolve.</div>\r\n </div> -->\r\n <div *ngIf=\"user.primaryIssue === 'Camera Issues' \">\r\n <span class=\"profile-label fw-bold-400\">Are all CCTV cameras functioning properly?</span>\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <span class=\"\">Camera 1</span>\r\n <div class=\"d-flex align-items-centre justify-content-centre rounded-3 overflow-hidden\">\r\n <img class=\"w-100\" src='https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8c3RvcmV8ZW58MHx8MHx8fDA%3D'>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <span class=\"\">Camera 2</span>\r\n <div class=\"d-flex align-items-centre justify-content-centre rounded-3 overflow-hidden\">\r\n <img class=\"w-100\" src='https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8c3RvcmV8ZW58MHx8MHx8fDA%3D'>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <span class=\"\">Camera 3</span>\r\n <div class=\"d-flex align-items-centre justify-content-centre rounded-3 overflow-hidden\">\r\n <img class=\"w-100\" src='https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8c3RvcmV8ZW58MHx8MHx8fDA%3D'>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"profile-label fw-bold-400 mt-5\">\r\n The above camera streaming are not working due <span class=\"fw-bold-700\">power issue</span> to the camera.\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"contenttext fw-semibold mt-3\">\r\n We're currently encountering an <span class=\"fw-bold-700\">{{user.primaryIssue}}</span>\r\n </div>\r\n <div *ngFor=\"let issue of user.secondaryIssue; let k =index\" class=\"mt-3\">\r\n <span class=\"profile-label fw-bold-400\">The following are the relevant problem facing</span>\r\n <ul class=\"timingtext fw-bold-400 mt-3\">\r\n <li>{{issue.name}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div> \r\n </div>\r\n <!-- User code ends here -->\r\n </div>\r\n <!-- Tango code starts here -->\r\n <div *ngIf=\"activity.actionBy == 'Tango'\" class=\"d-flex mt-10 ms-5\">\r\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\r\n <div class=\"d-flex align-items-centre justify-content-centre\">\r\n <img class=\"msgprofile\" src=\"./assets/tango/Images/tangoprofile.png\">\r\n </div>\r\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\r\n </div> \r\n <div class=\"py-3\">\r\n <div class=\"d-flex mb-3\">\r\n <span class=\"headingtext\">Tango</span>\r\n <span class=\"timingtext px-3\">Now</span>\r\n </div>\r\n <div *ngIf=\"activity.actionType !== 'defaultInfra'\" class=\"mb-3\">\r\n <span class=\"profile-label fw-bold-400\">tango has replied to the issue</span>\r\n <!-- <div *ngIf=\"updated\" class=\"textupdates fw-bold-400 mt-3\">Thank you for the Update.<span *ngIf=\"\">The ticket will be closed when the data is processed.</span></div> -->\r\n \r\n <div class=\"mt-3\">\r\n <span class=\"textupdates fw-bold-400\">Please follow the below steps to resolve the above issue</span>\r\n <div *ngFor=\"let data of activity.reasons; let index=index\" class=\"mt-5\">\r\n <span class=\"fw-semibold\">{{data?.primaryIssue}}</span>\r\n <ul *ngFor=\"let issue of data?.secondaryIssue\" class=\"mt-3 timingtext fw-bold-400\">\r\n <li>{{issue?.name}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"activity.actionType === 'defaultInfra'\" class=\"profile-label fw-bold-400\">We have not received data from your store. We are currently investigating the issue</div>\r\n </div> \r\n </div>\r\n <!-- Tango code ends here -->\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"loading\" >\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <div 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-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> \r\n\r\n</div>\r\n", styles: [".card-label{font-size:16px!important;line-height:24px!important}.card-view{width:250px}.card-view .title{color:var(--Gray-900, #101828);font-size:20px;line-height:30px}.card-view .sub-title{color:var(--Gray-700, #344054);font-size:14px;line-height:20px}.issuecard{width:240px;border-radius:10px;border:1px solid var(--Gray-200, #EAECF0);padding:16px}.issuecard label{color:var(--Black, #101828);font-size:14px;line-height:20px}.issuecard.active,.card-view.active{border:none!important;background:var(--Primary-25, #F6FCFF);box-shadow:0 0 0 4px #e9f7ff}.contenttext{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.maincard-content{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.maincard-label{color:var(--Gray-900, #101828);font-size:16px;line-height:24px}.profile{width:24px;height:24px;overflow:hidden;border-radius:200px}.fw-bold-700{font-weight:700!important}.fw-bold-400{font-weight:400!important}.msgprofile{width:48px!important;height:48px!important;border-radius:200px;overflow:hidden}.timingtext{color:var(--Gray-500, #667085);font-size:12px;line-height:18px}.profile-label{font-size:16px;color:var(--Gray-500, #667085);line-height:24px}.w-45{width:49%}.textupdates{color:var(--Gray-700, #344054);font-size:16px;line-height:24px}.textupdates1{color:var(--Gray-700, #344054);font-size:14px;line-height:24px}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.daterangepicker{display:block!important;top:153.85px!important;left:900px!important;right:0}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!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 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}: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}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}\n"] }]
|
|
218
|
+
}], ctorParameters: () => [{ type: i1.TicketsService }, { type: i2.DataService }, { type: i0.ChangeDetectorRef }, { type: i3.GlobalStateService }], propDecorators: { storeId: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], onClick: [{
|
|
221
|
+
type: HostListener,
|
|
222
|
+
args: ['document:click', ['$event']]
|
|
223
|
+
}] } });
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYWN0aXZpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tdGlja2V0LXVzZXIvc3JjL2xpYi9jb21wb25lbnRzL3N0b3JlLWFjdGl2aXR5L3N0b3JlLWFjdGl2aXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXRpY2tldC11c2VyL3NyYy9saWIvY29tcG9uZW50cy9zdG9yZS1hY3Rpdml0eS9zdG9yZS1hY3Rpdml0eS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBRXJGLE9BQVEsS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMzQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBSzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQUUxQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7QUFPdEIsTUFBTSxPQUFPLHNCQUFzQjtJQXlCYjtJQUNWO0lBQ0E7SUFDQTtJQTNCVixVQUFVLENBQUs7SUFDZixLQUFLLENBQUs7SUFDVixhQUFhLEdBQU8sZUFBZSxDQUFDO0lBQ3BDLGFBQWEsR0FBTyxVQUFVLENBQUU7SUFDaEMsT0FBTyxHQUFXLElBQUksQ0FBQztJQUN2QixNQUFNLEdBQVcsS0FBSyxDQUFDO0lBQ3ZCLE9BQU8sR0FBVyxJQUFJLENBQUM7SUFDdkIsV0FBVyxDQUFLO0lBQ2hCLFdBQVcsQ0FBSztJQUNoQixhQUFhLEdBQVcsSUFBSSxD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QkFBc0Isd0pDcEJuQyxtNWdCQWtOQTs7MkZEOUxhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0I7OEtBMkJyQixPQUFPO3NCQUFmLEtBQUs7Z0JBWU4sT0FBTztzQkFETixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LEhvc3RMaXN0ZW5lcixJbnB1dCxPbkRlc3Ryb3ksT25Jbml0LE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgIGRheWpzIGZyb20gJ2RheWpzJztcclxuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4nO1xyXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xyXG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpY2tldC1pbmZyYS5zZXJ2aWNlJztcclxuLy8gaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAncHJvamVjdHMvdGFuZ28tYXBwLXNoYXJlZC9zcmMvcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuXHJcbmRheWpzLmV4dGVuZCh1dGMpO1xyXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zdG9yZS1hY3Rpdml0eScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3N0b3JlLWFjdGl2aXR5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc3RvcmUtYWN0aXZpdHkuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdG9yZUFjdGl2aXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSB7XHJcbiAgc2VsZWN0Q2FyZDphbnk7XHJcbiAgc3RhdGU6YW55O1xyXG4gIGZpbHRlcmVkSXNzdWU6YW55ID0gJ0NhbWVyYSBJc3N1ZXMnO1xyXG4gIHNlbGVjdGVkSXNzdWU6YW55ID0gJ2ludGVybmV0JyA7XHJcbiAgdXBkYXRlZDpib29sZWFuID0gdHJ1ZTtcclxuICBub0RhdGE6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIGxvYWRpbmc6Ym9vbGVhbiA9IHRydWU7XHJcbiAgc3RvcmVUaWNrZXQ6YW55O1xyXG4gIHZpZXdUaWNrZXRzOmFueTtcclxuICByZXNvbHZlZElzc3VlOmJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzc3VlT2JqZWN0OmFueVtdID0gWydTdG9yZSBPcGVyYXRpb24gSXNzdWUnLCdJbnRlcm5ldCBJc3N1ZScsJ0NhbWVyYSBJc3N1ZScsJ1N5c3RlbSBJc3N1ZScsJ0FwcGxpY2F0aW9uIElzc3VlJ11cclxuICBkcm9wRG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRyb3Bkb3duSXRlbXM6YW55W10gPSBbJ0FsbCcsJ1N0b3JlIE9wZXJhdGlvbiBJc3N1ZScsJ0ludGVybmV0IElzc3VlJywnQ2FtZXJhIElzc3VlJyAsJ1N5c3RlbSBJc3N1ZScsJ0FwcGxpY2F0aW9uIElzc3VlJ11cclxuXHJcbiAgc2VsZWN0ZWREYXRlUmFuZ2U6IGFueSA9IHt9O1xyXG4gIHRpY2tldElkOiBhbnk7XHJcbiAgZGF0ZVJhbmdlRmlsdGVyOiBhbnk7XHJcbiAgdGlja2V0Q2FyZDogYW55O1xyXG4gIHZpZXdUaWNrZXRMaXN0OiBhbnk7XHJcbiAgaGVhZGVyRmlsdGVyOiBhbnk7XHJcbiAgdXNlcjogYW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBJbnB1dCgpIHN0b3JlSWQgOiBhbnk7XHJcbmRheWpzID1kYXlqc1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTpUaWNrZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0YXNlcnZpY2U6RGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkIDpDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZ3M6R2xvYmFsU3RhdGVTZXJ2aWNlKXtcclxuICAgIGRhdGFzZXJ2aWNlLmRhdGEkLnN1YnNjcmliZSgoZGF0YTphbnkpPT57XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBkYXRhO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrIChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3RcclxuICAgICAgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYoIXRhcmdldC5jbG9zZXN0KCcuZHJvcGRvd24nKSkge1xyXG4gICAgICB0aGlzLmRyb3BEb3duID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpe1xyXG5cclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmKGRhdGEhPW51bGwpe1xyXG4gICAgICAgIHRoaXMudXNlcj0gIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpfHxcIlwiKVxyXG4gICAgICAgIHRoaXMuaGVhZGVyRmlsdGVyID0gZGF0YTtcclxuICAgICAgICB0aGlzLnN0b3JlVGlja2V0Y2FyZCgpO1xyXG4gICAgICAgIHRoaXMuc3RvcmVUaWNrZXRMaXN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdG9yZVRpY2tldGNhcmQoKXtcclxuICAgIGxldCBkYXRhID17XHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuc3RvcmVJZCxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRmlsdGVyPy5kYXRlPy5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJGaWx0ZXI/LmRhdGU/LmVuZERhdGUsXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2Uuc3RvcmVUaWNrZXRjYXJkKGRhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KHJlczphbnkpPT57XHJcbiAgICAgICAgaWYocmVzICYmIHJlcz8uY29kZSA9PSAyMDApe1xyXG4gICAgICAgICAgIHRoaXMudGlja2V0Q2FyZCA9IHJlcy5kYXRhLmRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcihlcnIpIHtcclxuICAgICAgICBcclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGUoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc3RvcmVUaWNrZXRMaXN0KCl7XHJcbiAgICBsZXQgZGF0YSA9e1xyXG4gICAgICBzdG9yZUlkOnRoaXMuc3RvcmVJZCxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRmlsdGVyPy5kYXRlPy5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJGaWx0ZXI/LmRhdGU/LmVuZERhdGUsXHJcbiAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJlZElzc3VlLFxyXG4gICAgICBleHBvcnQ6ZmFsc2VcclxuICAgIH0gXHJcbiAgICB0aGlzLnNlcnZpY2Uuc3RvcmVUaWNrZXRMaXN0KGRhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KHJlczphbnkpPT4ge1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PSAyMDApe1xyXG4gICAgICAgICAgdGhpcy5zdG9yZVRpY2tldCA9IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgIHRoaXMudGlja2V0SWQgPSB0aGlzLnN0b3JlVGlja2V0WzBdPy50aWNrZXRJZDtcclxuICAgICAgICAgIHRoaXMudmlld1RpY2tldCgpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nPWZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZz1mYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOihlcnIpPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nPWZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTooKT0+IHtcclxuICAgICAgICBcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB2aWV3VGlja2V0KCl7XHJcbiAgICBsZXQgZGF0YSA9IHsgXHJcbiAgICAgIFwidGlja2V0SWRcIjp0aGlzLnRpY2tldElkXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2Uudmlld1RpY2tldChkYXRhKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXMuZGF0YS50aWNrZXRBY3Rpdml0eSkpe1xyXG4gICAgICAgICAgdGhpcy52aWV3VGlja2V0cyA9IHJlcz8uZGF0YTtcclxuICAgICAgICAgIHRoaXMudmlld1RpY2tldExpc3QgPSByZXM/LmRhdGE/LnRpY2tldEFjdGl2aXR5LnNsaWNlKCkucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgLy8gdGhpcy52aWV3VGlja2V0TGlzdC5mb3JFYWNoKChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgZS50aW1lU3RhbXAgPSB0aGlzLmdldFJlbGF0aXZlVGltZShlLnRpbWVTdGFtcCk7XHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycik9PntcclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGU6KCk9PntcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBleHBvcnRTdG9yZUxpc3Rhc1hsc3goKXtcclxuICAgIGxldCBkYXRhID17XHJcbiAgICAgIHN0b3JlSWQ6dGhpcy5zdG9yZUlkLFxyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJGaWx0ZXI/LmRhdGU/LnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckZpbHRlcj8uZGF0ZT8uZW5kRGF0ZSxcclxuICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlcmVkSXNzdWUsXHJcbiAgICAgIGV4cG9ydDogdHJ1ZVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXJ2aWNlLnN0b3JlVGlja2V0TGlzdEV4cG9ydChkYXRhKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgICAgIGxldCBleGNlbERhdGEgPSByZXM7XHJcbiAgICAgICAgdGhpcy5kYXRhc2VydmljZS5zYXZlQXNFeGNlbEZpbGUoZXhjZWxEYXRhLCdzdG9yZScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOihlcnIpPT4ge1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZSgpIHtcclxuICAgICAgICBcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBTaG93VGlja2V0KGluZGV4OmFueSx2YWx1ZTphbnkpe1xyXG4gICAgdGhpcy5zZWxlY3RDYXJkID0gaW5kZXggPyBpbmRleCA6IDA7XHJcbiAgICB0aGlzLnRpY2tldElkID0gdmFsdWU7XHJcbiAgICB0aGlzLnZpZXdUaWNrZXQoKTtcclxuICB9XHJcblxyXG4gIEZpbHRlcklzc3VlKHZhbHVlOmFueSl7XHJcbiAgICAgdGhpcy5maWx0ZXJlZElzc3VlID0gdmFsdWU7XHJcbiAgICAgdGhpcy5zdG9yZVRpY2tldExpc3QoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEl0ZW0odmFsdWU6YW55KXtcclxuICAgIHRoaXMuZmlsdGVyZWRJc3N1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5kcm9wRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb3BlbkRyb3Bkb3duKGV2ZW50Ok1vdXNlRXZlbnQpe1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmRyb3BEb3duID0gIXRoaXMuZHJvcERvd247XHJcbiAgfVxyXG5cclxuXHJcbiAgcmFuZ2VzOiBhbnkgPSB7XHJcbiAgICAnVG9kYXknOiBbdGhpcy5kYXlqcygpLCB0aGlzLmRheWpzKCldLFxyXG4gICAgJ1llc3RlcmRheSc6IFt0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheXMnKSwgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsICdkYXlzJyldLFxyXG4gICAgJ1RoaXMgV2Vlayc6IFt0aGlzLmRheWpzKCkuc3VidHJhY3QoNiwgJ2RheXMnKSwgdGhpcy5kYXlqcygpXSxcclxuICAgICdMYXN0IFdlZWsnOiBbdGhpcy5kYXlqcygpLnN1YnRyYWN0KDE0LCAnZGF5cycpLnN0YXJ0T2YoJ2RheXMnKSwgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDgsICdkYXlzJykuZW5kT2YoJ2RheXMnKV0sXHJcbiAgICAnVGhpcyBNb250aCc6IFt0aGlzLmRheWpzKCkuc3RhcnRPZignbW9udGgnKSwgdGhpcy5kYXlqcygpLmVuZE9mKCdtb250aCcpXSxcclxuICAgICdMYXN0IE1vbnRoJzogW1xyXG4gICAgICB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ21vbnRoJykuc3RhcnRPZignbW9udGgnKSxcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsICdtb250aCcpLmVuZE9mKCdtb250aCcpXHJcbiAgICBdXHJcbiAgfTtcclxuXHJcbiAgZGF0ZWNoYW5nZShldmVudDogYW55KSB7XHJcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LnN0YXJ0RGF0ZSAmJiBldmVudC5lbmREYXRlKSB7XHJcbiAgICBpZiAodGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSAmJiB0aGlzLmRheWpzKGV2ZW50LmVuZERhdGUpLmlzVmFsaWQoKSkge1xyXG4gICAgICAvLyBEYXRlcyBhcmUgdmFsaWQsIHByb2NlZWQgd2l0aCBmb3JtYXR0aW5nXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlID0gdGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLnV0YygpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUgPSB0aGlzLmRheWpzKGV2ZW50LmVuZERhdGUpLnV0YygpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRGF0ZXMgYXJlIG5vdCB2YWxpZCwgaGFuZGxlIHRoZSBzY2VuYXJpbyBhY2NvcmRpbmdseVxyXG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGRhdGVzIHByb3ZpZGVkOicsIGV2ZW50LnN0YXJ0RGF0ZSwgZXZlbnQuZW5kRGF0ZSk7XHJcbiAgICAgIC8vIElmIHlvdSB3YW50IHRvIGZhbGxiYWNrIHRvIHN0b3JlZCBmaWx0ZXJzIHdoZW4gdGhlIGRhdGVzIGFyZSBpbnZhbGlkLCB5b3UgY2FuIGtlZXAgdGhlIGV4aXN0aW5nIGxvZ2ljXHJcbiAgICAgIGNvbnN0IHN0b3JlZEZpbHRlcnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYXRlUmFuZ2VGaWx0ZXJzJykgfHwgJ3t9Jyk7XHJcbiAgICAgIGlmIChzdG9yZWRGaWx0ZXJzLnN0YXJ0RGF0ZSAmJiBzdG9yZWRGaWx0ZXJzLmVuZERhdGUpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSA9IHRoaXMuZGF5anMoc3RvcmVkRmlsdGVycy5zdGFydERhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSA9IHRoaXMuZGF5anMoc3RvcmVkRmlsdGVycy5lbmREYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGV2ZW50IG9iamVjdDonLCBldmVudCk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgZmxleC1jb2x1bW5cIj4gICAgXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgQWN0aXZpdHkgXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YlwiPlxyXG4gICAgICAgICAgICAgICAgQW4gb3ZlcnZpZXcgb2YgdGhlIHN0b3JlIGlzc3VlcyBhbmQgdGhlIGRvd250aW1lIGZvciAwMiBKdWx5LCAyMDIzXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMC4wMjY0SDE1TTIuNSA1LjAyNjM3SDE3LjVNNy41IDE1LjAyNjRIMTIuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yXCI+RmlsdGVyPC9zcGFuPiA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wRG93blwiIGNsYXNzPVwiY2FyZCBweS0xIHctMjAwcHggcG9zaXRpb24tYWJzb2x1dGUgdG9wLTUwcHggZW5kLTAgei0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkcm9wZG93bkl0ZW1zXCIgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ0aGlzLmZpbHRlcmVkSXNzdWUgPT0gaXRlbSA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cImNhbWVyYSBweC01IGl0ZW1zIGZ3LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIHB5LTJcIiAoY2xpY2spPVwic2VsZWN0SXRlbShpdGVtKVwiPnt7aXRlbX19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZVwiIChjbGljayk9XCJleHBvcnRTdG9yZUxpc3Rhc1hsc3goKVwiPlxyXG4gICAgICAgICAgICA8c3Bhbj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41MjY0VjE1Ljg1OTdDMTcuNSAxNi4zMDE3IDE3LjMyNDQgMTYuNzI1NyAxNy4wMTE4IDE3LjAzODJDMTYuNjk5MyAxNy4zNTA4IDE2LjI3NTQgMTcuNTI2NCAxNS44MzMzIDE3LjUyNjRINC4xNjY2N0MzLjcyNDY0IDE3LjUyNjQgMy4zMDA3MiAxNy4zNTA4IDIuOTg4MTYgMTcuMDM4MkMyLjY3NTU5IDE2LjcyNTcgMi41IDE2LjMwMTcgMi41IDE1Ljg1OTdWMTIuNTI2NE0xNC4xNjY3IDYuNjkzMDNMMTAgMi41MjYzN00xMCAyLjUyNjM3TDUuODMzMzMgNi42OTMwM00xMCAyLjUyNjM3VjEyLjUyNjRcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4gRXhwb3J0XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0XCIgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBuZ3hEYXRlcmFuZ2VwaWNrZXJNZCBbZHJvcHNdPVwiJ2Rvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICBbb3BlbnNdPVwiJ3JpZ2h0J1wiIFtyYW5nZXNdPVwicmFuZ2VzXCIgW3Nob3dDdXN0b21SYW5nZUxhYmVsXT1cInRydWVcIiBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2tlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2VdPVwidHJ1ZVwiIFtzaG93Q2FuY2VsXT1cInRydWVcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVJhbmdlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cInsgZm9ybWF0OiAnREQtTU0tWVlZWScsIGZpcnN0RGF5OiAxLCBtb250aE5hbWVzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAoZGF0ZXNVcGRhdGVkKT1cImRhdGVjaGFuZ2UoJGV2ZW50KVwiIG5hbWU9XCJkYXRlcmFuZ2VcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgPC9kaXY+XHJcbiAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpc3N1ZSBvZiB0aWNrZXRDYXJkXCIgY2xhc3M9XCJjYXJkIGNhcmQtdmlldyBwLTUgbWUtNVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlIGZ3LWJvbGRcIj57e2lzc3VlLmNvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ViLXRpdGxlIGZ3LXNlbWlib2xkXCI+e3tpc3N1ZS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLTMgYm9yZGVyIGJvcmRlci1ncmF5IGJvcmRlci0xIG10LTVcIj5cclxuICAgICAgICA8ZGl2ICAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiAgY2xhc3M9XCJyb3cgcC01XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBzdG9yZVRpY2tldDtsZXQgaW5kZXggPSBpbmRleFwiIGNsYXNzPVwiaXNzdWVjYXJkIHctMTAwIG1iLTQgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiU2hvd1RpY2tldChpbmRleCxkYXRhPy50aWNrZXRJZClcIiBbbmdDbGFzc109XCJzZWxlY3RDYXJkID09IGluZGV4ID8gJ2FjdGl2ZScgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1sYWJlbCBmdy1ib2xkIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi01XCI+PHNwYW4+IDxpbWcgc3JjPScuL2Fzc2V0cy90YW5nby9JbWFnZXMvdGlja2V0LnN2Zyc+IHt7ZGF0YT8udGlja2V0SWR9fTwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0YS5zdGF0dXMgPT0gJ2Nsb3NlZCcgPyAnYmFkZ2UtbGlnaHQtc3VjY2VzcycgOihkYXRhLnN0YXR1cyA9PSAnaW5wcm9ncmVzcycgPyAnYmFkZ2UtbGlnaHQtcHJpbWFyeSc6J2JhZGdlLWxpZ2h0LXdhcm5pbmcnKVwiPnt7ZGF0YS5zdGF0dXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGEuaXNzdWVTdGF0dXMgPT09ICdub3RpZGVudGlmaWVkJ1wiIGNsYXNzPVwibWItNSBjb250ZW50dGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXZSBoYXZlIG5vdCByZWNlaXZlZCBkYXRhIGZyb20geW91ciBzdG9yZS4gV2UgYXJlIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nIHRoZSBpc3N1ZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5pc3N1ZVN0YXR1cyA9PT0naWRlbnRpZmllZCdcIiBjbGFzcz1cIm1iLTUgY29udGVudHRleHRcIj5TdG9yZSBpcyBjdXJyZW50bHkgZW5jb3VudGVyaW5nIGEgPHNwYW4gY2xhc3M9XCJmdy1ib2xkLTcwMFwiPnt7ZGF0YS5wcmltYXJ5SXNzdWV9fTwvc3Bhbj4gd2hpY2ggaXMgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBzZWNvbmRhcnkgb2YgZGF0YS5zZWNvbmRhcnlJc3N1ZTsgbGV0IGxhc3QgPSBsYXN0XCIgY2xhc3M9XCJmdy1ib2xkLTcwMFwiPnt7c2Vjb25kYXJ5Py5uYW1lfX08bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4gLDwvbmctY29udGFpbmVyPiA8L3NwYW4+LjwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50cmUganVzdGlmeS1jb250ZW50LWNlbnRyZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSW1hZ2VzL2dyb3Btb2RhbC5wbmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCIgPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250ZW50dGV4dCBweC0zXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDEwQzE0IDEwLjM1MzYgMTMuODU5NSAxMC42OTI4IDEzLjYwOTUgMTAuOTQyOEMxMy4zNTk0IDExLjE5MjkgMTMuMDIwMyAxMS4zMzMzIDEyLjY2NjcgMTEuMzMzM0g0LjY2NjY3TDIgMTRWMy4zMzMzM0MyIDIuOTc5NzEgMi4xNDA0OCAyLjY0MDU3IDIuMzkwNTIgMi4zOTA1MkMyLjY0MDU3IDIuMTQwNDggMi45Nzk3MSAyIDMuMzMzMzMgMkgxMi42NjY3QzEzLjAyMDMgMiAxMy4zNTk0IDIuMTQwNDggMTMuNjA5NSAyLjM5MDUyQzEzLjg1OTUgMi42NDA1NyAxNCAyLjk3OTcxIDE0IDMuMzMzMzNWMTBaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiB7e2RhdGEuY29tbWVudHN9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbnRlbnR0ZXh0IHB4LTNcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC42NjY3IDEuMzMzOThWNC4wMDA2NU01LjMzMzMzIDEuMzMzOThWNC4wMDA2NU0yIDYuNjY3MzJIMTRNMy4zMzMzMyAyLjY2NzMySDEyLjY2NjdDMTMuNDAzIDIuNjY3MzIgMTQgMy4yNjQyNyAxNCA0LjAwMDY1VjEzLjMzNEMxNCAxNC4wNzA0IDEzLjQwMyAxNC42NjczIDEyLjY2NjcgMTQuNjY3M0gzLjMzMzMzQzIuNTk2OTUgMTQuNjY3MyAyIDE0LjA3MDQgMiAxMy4zMzRWNC4wMDA2NUMyIDMuMjY0MjcgMi41OTY5NSAyLjY2NzMyIDMuMzMzMzMgMi42NjczMlpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4ge3tkYXRhLkRhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbmNhcmQtbGFiZWwgZnctYm9sZCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aW1nIHNyYz0nLi9hc3NldHMvdGFuZ28vSW1hZ2VzL3RpY2tldC5zdmcnPnt7dmlld1RpY2tldHM/LnRpY2tldElkfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+e3t2aWV3VGlja2V0cz8uc3RhdHVzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGl2aXR5IG9mIHZpZXdUaWNrZXRMaXN0XCIgY2xhc3M9XCJcIj4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgIDwhLS0gVXNlciBjb2RlIHN0YXJ0cyBoZXJlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2aXR5LmFjdGlvbkJ5ID09ICdVc2VyJ1wiIGNsYXNzPVwiZC1mbGV4IG10LTEwIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHBlLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50cmUganVzdGlmeS1jb250ZW50LWNlbnRyZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1zZ3Byb2ZpbGVcIiBzcmM9J2h0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNDQxOTg2MzAwOTE3LTY0Njc0YmQ2MDBkOD93PTUwMCZhdXRvPWZvcm1hdCZmaXQ9Y3JvcCZxPTYwJml4bGliPXJiLTQuMC4zJml4aWQ9TTN3eE1qQTNmREI4TUh4elpXRnlZMmg4TW54OGMzUnZjbVY4Wlc1OE1IeDhNSHg4ZkRBJTNEJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgaC0xMDAgbXQtMyBib3JkZXIgYm9yZGVyLTEgYm9yZGVyLWdyYXlcIiBzdHlsZT1cIndpZHRoOjBweFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZ3RleHRcIj5PbGl2aWEgUmh5ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1pbmd0ZXh0IHB4LTNcIj5Ob3c8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdXNlciBvZiBhY3Rpdml0eS5yZWFzb25zOyBsZXQgaiA9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9maWxlLWxhYmVsIGZvbnQtYm9sZC00MDBcIj5Vc2VyIGhhcyByZXBsaWVkIHRvIHRoZSBpc3N1ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInJlc29sdmVkSXNzdWVcIiBjbGFzcz1cInByb2ZpbGUtbGFiZWwgZnctYm9sZC00MDAgbXQtNVwiPklzc3VlIGhhcyBiZWVuIDxzcGFuIGNsYXNzPVwiZnctYm9sZC03MDBcIj5yZXNvbHZlZDwvc3Bhbj4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj4gSXQgdGFrZXMgNyBtb3JlIGRheXMgdG8gcmVzb2x2ZS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyLnByaW1hcnlJc3N1ZSA9PT0gJ0NhbWVyYSBJc3N1ZXMnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZmlsZS1sYWJlbCBmdy1ib2xkLTQwMFwiPkFyZSBhbGwgQ0NUViBjYW1lcmFzIGZ1bmN0aW9uaW5nIHByb3Blcmx5Pzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXCI+Q2FtZXJhIDE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50cmUganVzdGlmeS1jb250ZW50LWNlbnRyZSByb3VuZGVkLTMgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMDBcIiBzcmM9J2h0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNDQxOTg2MzAwOTE3LTY0Njc0YmQ2MDBkOD93PTUwMCZhdXRvPWZvcm1hdCZmaXQ9Y3JvcCZxPTYwJml4bGliPXJiLTQuMC4zJml4aWQ9TTN3eE1qQTNmREI4TUh4elpXRnlZMmg4TW54OGMzUnZjbVY4Wlc1OE1IeDhNSHg4ZkRBJTNEJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJcIj5DYW1lcmEgMjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudHJlIGp1c3RpZnktY29udGVudC1jZW50cmUgcm91bmRlZC0zIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMFwiIHNyYz0naHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tL3Bob3RvLTE0NDE5ODYzMDA5MTctNjQ2NzRiZDYwMGQ4P3c9NTAwJmF1dG89Zm9ybWF0JmZpdD1jcm9wJnE9NjAmaXhsaWI9cmItNC4wLjMmaXhpZD1NM3d4TWpBM2ZEQjhNSHh6WldGeVkyaDhNbng4YzNSdmNtVjhaVzU4TUh4OE1IeDhmREElM0QnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJcIj5DYW1lcmEgMzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudHJlIGp1c3RpZnktY29udGVudC1jZW50cmUgcm91bmRlZC0zIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMFwiIHNyYz0naHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tL3Bob3RvLTE0NDE5ODYzMDA5MTctNjQ2NzRiZDYwMGQ4P3c9NTAwJmF1dG89Zm9ybWF0JmZpdD1jcm9wJnE9NjAmaXhsaWI9cmItNC4wLjMmaXhpZD1NM3d4TWpBM2ZEQjhNSHh6WldGeVkyaDhNbng4YzNSdmNtVjhaVzU4TUh4OE1IeDhmREElM0QnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtbGFiZWwgZnctYm9sZC00MDAgbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYWJvdmUgY2FtZXJhIHN0cmVhbWluZyBhcmUgbm90IHdvcmtpbmcgZHVlIDxzcGFuIGNsYXNzPVwiZnctYm9sZC03MDBcIj5wb3dlciBpc3N1ZTwvc3Bhbj4gdG8gdGhlIGNhbWVyYS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudHRleHQgZnctc2VtaWJvbGQgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZSdyZSBjdXJyZW50bHkgZW5jb3VudGVyaW5nIGFuIDxzcGFuIGNsYXNzPVwiZnctYm9sZC03MDBcIj57e3VzZXIucHJpbWFyeUlzc3VlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXNzdWUgb2YgdXNlci5zZWNvbmRhcnlJc3N1ZTsgbGV0IGsgPWluZGV4XCIgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZmlsZS1sYWJlbCBmdy1ib2xkLTQwMFwiPlRoZSBmb2xsb3dpbmcgYXJlIHRoZSByZWxldmFudCBwcm9ibGVtIGZhY2luZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidGltaW5ndGV4dCBmdy1ib2xkLTQwMCBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+e3tpc3N1ZS5uYW1lfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVXNlciBjb2RlIGVuZHMgaGVyZSAtLT5cclxuICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVGFuZ28gY29kZSBzdGFydHMgaGVyZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZpdHkuYWN0aW9uQnkgPT0gJ1RhbmdvJ1wiIGNsYXNzPVwiZC1mbGV4IG10LTEwIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHBlLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50cmUganVzdGlmeS1jb250ZW50LWNlbnRyZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1zZ3Byb2ZpbGVcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JbWFnZXMvdGFuZ29wcm9maWxlLnBuZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMCBoLTEwMCBtdC0zIGJvcmRlciBib3JkZXItMSBib3JkZXItZ3JheVwiIHN0eWxlPVwid2lkdGg6MHB4XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZ3RleHRcIj5UYW5nbzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1pbmd0ZXh0IHB4LTNcIj5Ob3c8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZpdHkuYWN0aW9uVHlwZSAhPT0gJ2RlZmF1bHRJbmZyYSdcIiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZmlsZS1sYWJlbCBmdy1ib2xkLTQwMFwiPnRhbmdvIGhhcyByZXBsaWVkIHRvIHRoZSBpc3N1ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInVwZGF0ZWRcIiBjbGFzcz1cInRleHR1cGRhdGVzIGZ3LWJvbGQtNDAwIG10LTNcIj5UaGFuayB5b3UgZm9yIHRoZSBVcGRhdGUuPHNwYW4gKm5nSWY9XCJcIj5UaGUgdGlja2V0IHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIGRhdGEgaXMgcHJvY2Vzc2VkLjwvc3Bhbj48L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHR1cGRhdGVzIGZ3LWJvbGQtNDAwXCI+UGxlYXNlIGZvbGxvdyB0aGUgYmVsb3cgc3RlcHMgdG8gcmVzb2x2ZSB0aGUgYWJvdmUgaXNzdWU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2YgYWN0aXZpdHkucmVhc29uczsgbGV0IGluZGV4PWluZGV4XCIgY2xhc3M9XCJtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3tkYXRhPy5wcmltYXJ5SXNzdWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdGb3I9XCJsZXQgaXNzdWUgb2YgZGF0YT8uc2Vjb25kYXJ5SXNzdWVcIiBjbGFzcz1cIm10LTMgdGltaW5ndGV4dCBmdy1ib2xkLTQwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPnt7aXNzdWU/Lm5hbWV9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2aXR5LmFjdGlvblR5cGUgPT09ICdkZWZhdWx0SW5mcmEnXCIgY2xhc3M9XCJwcm9maWxlLWxhYmVsIGZ3LWJvbGQtNDAwXCI+V2UgaGF2ZSBub3QgcmVjZWl2ZWQgZGF0YSBmcm9tIHlvdXIgc3RvcmUuIFdlIGFyZSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZyB0aGUgaXNzdWU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBUYW5nbyBjb2RlIGVuZHMgaGVyZSAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICA8L2Rpdj5cclxuIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCIgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICBcclxuXHJcbjwvZGl2PlxyXG4iXX0=
|