tango-app-ui-manage-tickets 3.7.0-beta.33 → 3.7.0-beta.35
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/audit-mapping-list/audit-mapping-list.component.mjs +14 -26
- package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +356 -0
- package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +441 -0
- package/esm2022/lib/components/start-audit/start-audit.component.mjs +13 -12
- package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +66 -35
- package/esm2022/lib/services/audit.service.mjs +5 -3
- package/esm2022/lib/tango-manage-tickets-routing.module.mjs +7 -2
- package/esm2022/lib/tango-manage-tickets.module.mjs +8 -2
- package/fesm2022/tango-app-ui-manage-tickets.mjs +894 -91
- package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -1
- package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +1 -0
- package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +47 -0
- package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
- package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +7 -1
- package/lib/services/audit.service.d.ts +1 -0
- package/lib/tango-manage-tickets.module.d.ts +10 -8
- package/package.json +1 -1
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { Component, ViewChild, Input } from '@angular/core';
|
|
2
|
+
import * as LZString from 'lz-string';
|
|
3
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
6
|
+
import * as i2 from "@angular/router";
|
|
7
|
+
import * as i3 from "../../services/timer.service";
|
|
8
|
+
import * as i4 from "../../services/audit.service";
|
|
9
|
+
import * as i5 from "tango-app-ui-shared";
|
|
10
|
+
import * as i6 from "@angular/common";
|
|
11
|
+
export class AuditReportPopupComponent {
|
|
12
|
+
modalService;
|
|
13
|
+
activeModal;
|
|
14
|
+
router;
|
|
15
|
+
timerService;
|
|
16
|
+
cd;
|
|
17
|
+
apiservice;
|
|
18
|
+
route;
|
|
19
|
+
toast;
|
|
20
|
+
Retagjunkcount = 0;
|
|
21
|
+
Retagemployeecount = 0;
|
|
22
|
+
Retagcustomercount = 0;
|
|
23
|
+
demographicCount;
|
|
24
|
+
retagjunkdata;
|
|
25
|
+
retagemployeedata;
|
|
26
|
+
retagcustomerdata;
|
|
27
|
+
totalfiles;
|
|
28
|
+
auth = false;
|
|
29
|
+
submitauth = false;
|
|
30
|
+
Errormsg = '';
|
|
31
|
+
selectedType;
|
|
32
|
+
confirmerror;
|
|
33
|
+
destroy$ = new Subject();
|
|
34
|
+
timePassed = 0;
|
|
35
|
+
subscription = null;
|
|
36
|
+
formattedTime = '00:00:00';
|
|
37
|
+
category = [];
|
|
38
|
+
constructor(modalService, activeModal, router, timerService, cd, apiservice, route, toast) {
|
|
39
|
+
this.modalService = modalService;
|
|
40
|
+
this.activeModal = activeModal;
|
|
41
|
+
this.router = router;
|
|
42
|
+
this.timerService = timerService;
|
|
43
|
+
this.cd = cd;
|
|
44
|
+
this.apiservice = apiservice;
|
|
45
|
+
this.route = route;
|
|
46
|
+
this.toast = toast;
|
|
47
|
+
}
|
|
48
|
+
ngOnInit() {
|
|
49
|
+
let filedata = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
50
|
+
this.totalfiles = filedata;
|
|
51
|
+
this.apiservice.getAuditconfig(filedata?.filedetails?.clientId).pipe(takeUntil(this.destroy$)).subscribe({
|
|
52
|
+
next: (res) => {
|
|
53
|
+
if (res && res?.code == 200) {
|
|
54
|
+
this.category = res.data.footfallDirectoryConfigs.taggingLimitation;
|
|
55
|
+
this.category.map((data) => {
|
|
56
|
+
let filterData = JSON.parse(sessionStorage.getItem(data?.type) || '{}');
|
|
57
|
+
data.value = filterData;
|
|
58
|
+
data.count = data?.value?.length;
|
|
59
|
+
});
|
|
60
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ ngOnInit ~ this.category:", this.category);
|
|
61
|
+
let stringifydata = sessionStorage.getItem('audit') || '{}';
|
|
62
|
+
const decompressedData = LZString.decompress(stringifydata);
|
|
63
|
+
var customer = JSON.parse(decompressedData || '{}');
|
|
64
|
+
this.Retagcustomercount = customer.length;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
this.setTimer();
|
|
69
|
+
}
|
|
70
|
+
setTimer() {
|
|
71
|
+
this.subscription = this.timerService.getTimePassed().subscribe(time => {
|
|
72
|
+
this.timePassed = time;
|
|
73
|
+
this.formattedTime = this.timerService.formatTime(time);
|
|
74
|
+
this.cd.detectChanges();
|
|
75
|
+
});
|
|
76
|
+
this.timerService.startTimer();
|
|
77
|
+
document.addEventListener('mousemove', this.handleGlobalMouseEvent);
|
|
78
|
+
document.addEventListener('click', this.handleGlobalMouseEvent);
|
|
79
|
+
document.addEventListener('mouseenter', this.handleGlobalMouseEvent);
|
|
80
|
+
document.addEventListener('scroll', this.handleGlobalMouseEvent);
|
|
81
|
+
}
|
|
82
|
+
handleGlobalMouseEvent = () => {
|
|
83
|
+
this.timerService.startTimer();
|
|
84
|
+
};
|
|
85
|
+
ngOnDestroy() {
|
|
86
|
+
this.destroy$.next(true);
|
|
87
|
+
this.destroy$.complete();
|
|
88
|
+
document.removeEventListener('mousemove', this.handleGlobalMouseEvent);
|
|
89
|
+
document.removeEventListener('click', this.handleGlobalMouseEvent);
|
|
90
|
+
document.removeEventListener('mouseenter', this.handleGlobalMouseEvent);
|
|
91
|
+
document.removeEventListener('scroll', this.handleGlobalMouseEvent);
|
|
92
|
+
this.timerService.clearTimer();
|
|
93
|
+
}
|
|
94
|
+
changebrand() {
|
|
95
|
+
this.auth = true;
|
|
96
|
+
var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
97
|
+
let junkimage = [];
|
|
98
|
+
let employeeimage = [];
|
|
99
|
+
let customerimage = [];
|
|
100
|
+
this.retagjunkdata.map((e) => {
|
|
101
|
+
delete e.img_path;
|
|
102
|
+
delete e.selected;
|
|
103
|
+
delete e.count;
|
|
104
|
+
delete e.dropped;
|
|
105
|
+
delete e.mappedid;
|
|
106
|
+
junkimage.push(e);
|
|
107
|
+
});
|
|
108
|
+
this.retagemployeedata.map((e) => {
|
|
109
|
+
delete e.img_path;
|
|
110
|
+
delete e.selected;
|
|
111
|
+
delete e.count;
|
|
112
|
+
delete e.dropped;
|
|
113
|
+
delete e.mappedid;
|
|
114
|
+
employeeimage.push(e);
|
|
115
|
+
});
|
|
116
|
+
this.retagcustomerdata.map((e) => {
|
|
117
|
+
if (e.count > 1) {
|
|
118
|
+
delete e.img_path;
|
|
119
|
+
delete e.selected;
|
|
120
|
+
delete e.dropped;
|
|
121
|
+
var result = e.mappedid;
|
|
122
|
+
e.mappedid = result;
|
|
123
|
+
e.count = result.length;
|
|
124
|
+
e.mappedid.forEach((e1) => { delete e1.img_path; });
|
|
125
|
+
customerimage.push(e);
|
|
126
|
+
}
|
|
127
|
+
if (e.demographic === 'd' && e.count === 1) {
|
|
128
|
+
delete e.img_path;
|
|
129
|
+
delete e.selected;
|
|
130
|
+
delete e.dropped;
|
|
131
|
+
var result = e.mappedid;
|
|
132
|
+
e.mappedid = result;
|
|
133
|
+
e.count = result.length;
|
|
134
|
+
e.mappedid.forEach((e1) => { delete e1.img_path; });
|
|
135
|
+
customerimage.push(e);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
var obj = {
|
|
139
|
+
auditId: totalfile?.auditId ? totalfile?.auditId : totalfile?.filedetails?.auditId,
|
|
140
|
+
storeId: totalfile?.filedetails?.store_id,
|
|
141
|
+
auditType: totalfile?.filedetails?.type,
|
|
142
|
+
fileDate: totalfile?.filedetails?.file_date,
|
|
143
|
+
beforeCount: totalfile?.totalfiles,
|
|
144
|
+
junkCount: this.Retagjunkcount,
|
|
145
|
+
junk: junkimage ? junkimage : [],
|
|
146
|
+
employeeCount: this.Retagemployeecount,
|
|
147
|
+
employee: employeeimage ? employeeimage : [],
|
|
148
|
+
customerCount: this.Retagcustomercount,
|
|
149
|
+
zoneName: totalfile?.filedetails?.zoneName ? totalfile?.filedetails?.zoneName : '',
|
|
150
|
+
moduleType: this.selectedType,
|
|
151
|
+
customer: customerimage ? customerimage : [],
|
|
152
|
+
timeSpent: this.timePassed
|
|
153
|
+
};
|
|
154
|
+
this.apiservice.saveaudit(obj).pipe(takeUntil(this.destroy$)).subscribe({
|
|
155
|
+
next: (res) => {
|
|
156
|
+
if (res && res.code == 200) {
|
|
157
|
+
this.toast.getSuccessToast(res?.data?.result);
|
|
158
|
+
this.auth = false;
|
|
159
|
+
this.timerService.resetTimer();
|
|
160
|
+
sessionStorage.removeItem('timeSpent');
|
|
161
|
+
this.closepopup();
|
|
162
|
+
sessionStorage.removeItem('employee');
|
|
163
|
+
sessionStorage.removeItem('junk');
|
|
164
|
+
sessionStorage.removeItem('audit');
|
|
165
|
+
sessionStorage.removeItem('totalfiles');
|
|
166
|
+
sessionStorage.removeItem('retag');
|
|
167
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.auth = false;
|
|
171
|
+
if (res && res.code == 203) {
|
|
172
|
+
this.Errormsg = res.error;
|
|
173
|
+
const modalRef = this.modalService.open(this.confirmerror);
|
|
174
|
+
modalRef.result.then((result) => {
|
|
175
|
+
if (result.isConfirmed) {
|
|
176
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
error: (err) => {
|
|
183
|
+
const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Invalid status code: undefined';
|
|
184
|
+
this.toast.getErrorToast(errorMessage);
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
nextfile() {
|
|
189
|
+
this.auth = true;
|
|
190
|
+
let totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
191
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ totalfile:", totalfile);
|
|
192
|
+
let revisedDetail = [];
|
|
193
|
+
let stringifydata = sessionStorage.getItem('audit') || '{}';
|
|
194
|
+
const decompressedData = LZString.decompress(stringifydata);
|
|
195
|
+
var customer = JSON.parse(decompressedData || '{}');
|
|
196
|
+
customer.map((customerData) => {
|
|
197
|
+
if (customerData.count > 1) {
|
|
198
|
+
// console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ customerData:", customerData)
|
|
199
|
+
let duplicateData = customerData.mappedid.filter((data) => data.img_name != customerData?.img_name);
|
|
200
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ duplicateData:", duplicateData);
|
|
201
|
+
let duplicateImage = [];
|
|
202
|
+
duplicateData.map((dupData) => {
|
|
203
|
+
duplicateImage.push({
|
|
204
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${dupData?.img_name}`,
|
|
205
|
+
"tempId": dupData?.img_name,
|
|
206
|
+
"filePath": dupData?.img_path,
|
|
207
|
+
"isChecked": true
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
let newObj = {
|
|
211
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${customerData?.img_name}`,
|
|
212
|
+
"clientId": totalfile?.filedetails?.clientId,
|
|
213
|
+
"storeId": totalfile?.filedetails?.storeId,
|
|
214
|
+
"tempId": customerData?.img_name,
|
|
215
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
216
|
+
"timeRange": "11AM-12PM",
|
|
217
|
+
"processType": "footfall",
|
|
218
|
+
"revopsType": "duplicate",
|
|
219
|
+
"filePath": customerData?.img_path,
|
|
220
|
+
"status": "submitted",
|
|
221
|
+
"description": "",
|
|
222
|
+
"isChecked": true,
|
|
223
|
+
"type": "tagging-reflect",
|
|
224
|
+
"parent": null,
|
|
225
|
+
"isParent": true,
|
|
226
|
+
"duplicateImage": duplicateImage
|
|
227
|
+
};
|
|
228
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ newObj:", newObj);
|
|
229
|
+
revisedDetail.push(newObj);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ customerData:", customerData)
|
|
233
|
+
let newObj = {
|
|
234
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${customerData?.img_name}`,
|
|
235
|
+
"clientId": totalfile?.filedetails?.clientId,
|
|
236
|
+
"storeId": totalfile?.filedetails?.storeId,
|
|
237
|
+
"tempId": customerData?.img_name,
|
|
238
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
239
|
+
"timeRange": "11AM-12PM",
|
|
240
|
+
"processType": "footfall",
|
|
241
|
+
"revopsType": "duplicate",
|
|
242
|
+
"filePath": customerData?.img_path,
|
|
243
|
+
"status": "submitted",
|
|
244
|
+
"description": "",
|
|
245
|
+
"isChecked": true,
|
|
246
|
+
"type": "tagging-reflect",
|
|
247
|
+
"parent": null,
|
|
248
|
+
"isParent": true,
|
|
249
|
+
"duplicateImage": []
|
|
250
|
+
};
|
|
251
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ newObj:", newObj);
|
|
252
|
+
revisedDetail.push(newObj);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
let count = [];
|
|
256
|
+
this.category.map((data) => {
|
|
257
|
+
count.push({
|
|
258
|
+
name: data.name,
|
|
259
|
+
value: data.count,
|
|
260
|
+
type: data.type
|
|
261
|
+
});
|
|
262
|
+
let filterData = JSON.parse(sessionStorage.getItem(data?.type) || '[]');
|
|
263
|
+
filterData.map((otherData) => {
|
|
264
|
+
let otherObj = {
|
|
265
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${otherData?.img_name}`,
|
|
266
|
+
"clientId": totalfile?.filedetails?.clientId,
|
|
267
|
+
"storeId": totalfile?.filedetails?.storeId,
|
|
268
|
+
"tempId": otherData?.img_name,
|
|
269
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
270
|
+
"processType": "footfall",
|
|
271
|
+
"revopsType": data?.type,
|
|
272
|
+
"filePath": otherData?.img_path,
|
|
273
|
+
"status": "submitted",
|
|
274
|
+
"description": "",
|
|
275
|
+
"isChecked": true,
|
|
276
|
+
"type": "tagging-reflect",
|
|
277
|
+
"parent": null,
|
|
278
|
+
"isParent": false,
|
|
279
|
+
"duplicateImage": []
|
|
280
|
+
};
|
|
281
|
+
revisedDetail.push(otherObj);
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
var obj = {
|
|
285
|
+
"type": "tangoreview",
|
|
286
|
+
"mode": "web",
|
|
287
|
+
"revicedFootfall": this.Retagcustomercount,
|
|
288
|
+
"revicedPerc": Math.round((this.Retagcustomercount / totalfile?.totalfiles) * 100) + "%",
|
|
289
|
+
count: count,
|
|
290
|
+
revisedDetail: revisedDetail
|
|
291
|
+
};
|
|
292
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ obj:", obj);
|
|
293
|
+
// return
|
|
294
|
+
let payload = {
|
|
295
|
+
storeId: totalfile?.filedetails?.storeId,
|
|
296
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
297
|
+
mappingInfo: obj
|
|
298
|
+
};
|
|
299
|
+
this.apiservice.saveaudit(payload).pipe(takeUntil(this.destroy$)).subscribe({
|
|
300
|
+
next: (res) => {
|
|
301
|
+
if (res && res.code == 200) {
|
|
302
|
+
this.auth = false;
|
|
303
|
+
this.timerService.resetTimer();
|
|
304
|
+
sessionStorage.removeItem('timeSpent');
|
|
305
|
+
this.closepopup();
|
|
306
|
+
sessionStorage.removeItem('employee');
|
|
307
|
+
sessionStorage.removeItem('junk');
|
|
308
|
+
sessionStorage.removeItem('audit');
|
|
309
|
+
sessionStorage.removeItem('totalfiles');
|
|
310
|
+
sessionStorage.removeItem('retag');
|
|
311
|
+
var obj = {
|
|
312
|
+
totalfiles: {}
|
|
313
|
+
};
|
|
314
|
+
obj.totalfiles.queueName = totalfile?.filedetails?.queueName;
|
|
315
|
+
sessionStorage.setItem('totalfiles', JSON.stringify(obj));
|
|
316
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
this.auth = false;
|
|
320
|
+
if (res && res.code == 203) {
|
|
321
|
+
this.Errormsg = res.error;
|
|
322
|
+
const modalRef = this.modalService.open(this.confirmerror);
|
|
323
|
+
modalRef.result.then((result) => {
|
|
324
|
+
if (result.isConfirmed) {
|
|
325
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
error: (err) => {
|
|
332
|
+
const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Invalid status code: undefined';
|
|
333
|
+
this.toast.getErrorToast(errorMessage);
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
closepopup() {
|
|
338
|
+
this.activeModal.close();
|
|
339
|
+
}
|
|
340
|
+
reviewdata() {
|
|
341
|
+
this.router.navigate(["/manage/tickets/mapping-list"]);
|
|
342
|
+
this.activeModal.close();
|
|
343
|
+
}
|
|
344
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditReportPopupComponent, deps: [{ token: i1.NgbModal }, { token: i1.NgbActiveModal }, { token: i2.Router }, { token: i3.TimerService }, { token: i0.ChangeDetectorRef }, { token: i4.AuditService }, { token: i2.ActivatedRoute }, { token: i5.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
345
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditReportPopupComponent, selector: "lib-audit-report-popup", inputs: { selectedType: "selectedType" }, viewQueries: [{ propertyName: "confirmerror", first: true, predicate: ["confirmerror"], descendants: true }], ngImport: i0, template: "<div class=\"modal-body mt-5\">\r\n <div class=\" d-flex align-items-center\">\r\n <div class=\"d-flex justify-content-between w-75\">\r\n <div class=\"d-flex flex-column ms-5\">\r\n <a class=\"btn btn-outline btn-sm py-2 mx-2\" (click)=\"reviewdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span><span class=\"ms-3\">Back to Review</span></a>\r\n </div>\r\n\r\n </div>\r\n <div class=\"d-flex justify-content-between w-100\">\r\n <span class=\"fs-2 text-dark fw-bolder my-3 audit-test\">Audit Report</span>\r\n \r\n </div>\r\n <div class=\"btn btn-sm btn-icon btn-active-color-primary me-10\" (click)=\"closepopup()\" data-bs-dismiss=\"modal\">\r\n <span class=\"svg-icon svg-icon-1\">\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=\"6\" y=\"17.3137\" width=\"16\" height=\"2\" rx=\"1\" transform=\"rotate(-45 6 17.3137)\"\r\n fill=\"black\"></rect>\r\n <rect x=\"7.41422\" y=\"6\" width=\"16\" height=\"2\" rx=\"1\" transform=\"rotate(45 7.41422 6)\" fill=\"black\">\r\n </rect>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body \">\r\n <div class=\" align-items-center text-center mt-5 mb-5 fs-4\">\r\n <span class=\"text-gray-400 me-2\"> Before Count</span>\r\n <span class=\"fw-bold me-10\"> {{totalfiles?.totalfiles}} </span>\r\n <span class=\"text-gray-400 me-2\"> After Count </span>\r\n <span class=\"fw-bold me-10\"> {{Retagcustomercount}} </span>\r\n </div>\r\n <div class=\" mt-5 mx-20 p-10\">\r\n <div *ngFor=\"let item of category\">\r\n <div class=\"d-flex flex-stack \" >\r\n <span class=\"text-gray-500\">{{item.name}}</span>\r\n <button type=\"button\"\r\n class=\"text-dark fs-4 btn btn-icon btn-sm h-auto btn-color-gray-400 btn-active-color-primary justify-content-end\">\r\n {{item.count}} </button>\r\n </div>\r\n <div class=\"separator separator-dashed my-3\"></div>\r\n </div>\r\n \r\n\r\n <div class=\"d-flex flex-stack\">\r\n\r\n <span class=\"text-gray-500\">CUSTOMER</span>\r\n\r\n <button type=\"button\"\r\n class=\"text-dark fs-4 btn btn-icon btn-sm h-auto btn-color-gray-400 btn-active-color-primary justify-content-end\">\r\n {{Retagcustomercount}} </button>\r\n\r\n </div>\r\n\r\n <div class=\"separator separator-dashed my-3\"></div>\r\n\r\n \r\n <div class=\"mt-10 text-center\">\r\n <button class=\"btn btn-primary btn-sm py-2 mx-5 px-8 mt-2\" [disabled]=\"auth\" (click)=\"nextfile()\" > Submit\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmerror let-modal>\r\n <div class=\"w-400px h-auto p-10 card\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-label\">{{Errormsg}}</div>\r\n </div>\r\n <div class=\"card-body mt-5\">\r\n <div class=\"w-100 d-flex mt-5\">\r\n <button class=\"btn btn-outline w-50 me-2\" (click)=\"modal.close('isDenied')\">Cancel</button>\r\n <button class=\"btn btn-primary w-50 ms-2\" (click)=\"modal.close('isConfirmed')\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.audit-test{font-family:Inter;font-style:normal;font-weight:600!important;font-size:22px!important;line-height:27px;color:#000}.text-gray-500{font-family:Inter;font-style:normal;font-weight:500!important;font-size:14px!important;line-height:17px;color:#5e6278}.ms-25{margin-left:16rem}.text-gray-400{font-family:Inter;font-style:normal;font-weight:500;font-size:14px!important;line-height:17px;letter-spacing:-.02em;color:#676e76}::ng-deep .custom-container .mat-mdc-dialog-container .mdc-dialog__surface{border-radius:10px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
346
|
+
}
|
|
347
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditReportPopupComponent, decorators: [{
|
|
348
|
+
type: Component,
|
|
349
|
+
args: [{ selector: 'lib-audit-report-popup', template: "<div class=\"modal-body mt-5\">\r\n <div class=\" d-flex align-items-center\">\r\n <div class=\"d-flex justify-content-between w-75\">\r\n <div class=\"d-flex flex-column ms-5\">\r\n <a class=\"btn btn-outline btn-sm py-2 mx-2\" (click)=\"reviewdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span><span class=\"ms-3\">Back to Review</span></a>\r\n </div>\r\n\r\n </div>\r\n <div class=\"d-flex justify-content-between w-100\">\r\n <span class=\"fs-2 text-dark fw-bolder my-3 audit-test\">Audit Report</span>\r\n \r\n </div>\r\n <div class=\"btn btn-sm btn-icon btn-active-color-primary me-10\" (click)=\"closepopup()\" data-bs-dismiss=\"modal\">\r\n <span class=\"svg-icon svg-icon-1\">\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=\"6\" y=\"17.3137\" width=\"16\" height=\"2\" rx=\"1\" transform=\"rotate(-45 6 17.3137)\"\r\n fill=\"black\"></rect>\r\n <rect x=\"7.41422\" y=\"6\" width=\"16\" height=\"2\" rx=\"1\" transform=\"rotate(45 7.41422 6)\" fill=\"black\">\r\n </rect>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body \">\r\n <div class=\" align-items-center text-center mt-5 mb-5 fs-4\">\r\n <span class=\"text-gray-400 me-2\"> Before Count</span>\r\n <span class=\"fw-bold me-10\"> {{totalfiles?.totalfiles}} </span>\r\n <span class=\"text-gray-400 me-2\"> After Count </span>\r\n <span class=\"fw-bold me-10\"> {{Retagcustomercount}} </span>\r\n </div>\r\n <div class=\" mt-5 mx-20 p-10\">\r\n <div *ngFor=\"let item of category\">\r\n <div class=\"d-flex flex-stack \" >\r\n <span class=\"text-gray-500\">{{item.name}}</span>\r\n <button type=\"button\"\r\n class=\"text-dark fs-4 btn btn-icon btn-sm h-auto btn-color-gray-400 btn-active-color-primary justify-content-end\">\r\n {{item.count}} </button>\r\n </div>\r\n <div class=\"separator separator-dashed my-3\"></div>\r\n </div>\r\n \r\n\r\n <div class=\"d-flex flex-stack\">\r\n\r\n <span class=\"text-gray-500\">CUSTOMER</span>\r\n\r\n <button type=\"button\"\r\n class=\"text-dark fs-4 btn btn-icon btn-sm h-auto btn-color-gray-400 btn-active-color-primary justify-content-end\">\r\n {{Retagcustomercount}} </button>\r\n\r\n </div>\r\n\r\n <div class=\"separator separator-dashed my-3\"></div>\r\n\r\n \r\n <div class=\"mt-10 text-center\">\r\n <button class=\"btn btn-primary btn-sm py-2 mx-5 px-8 mt-2\" [disabled]=\"auth\" (click)=\"nextfile()\" > Submit\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmerror let-modal>\r\n <div class=\"w-400px h-auto p-10 card\">\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-label\">{{Errormsg}}</div>\r\n </div>\r\n <div class=\"card-body mt-5\">\r\n <div class=\"w-100 d-flex mt-5\">\r\n <button class=\"btn btn-outline w-50 me-2\" (click)=\"modal.close('isDenied')\">Cancel</button>\r\n <button class=\"btn btn-primary w-50 ms-2\" (click)=\"modal.close('isConfirmed')\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.audit-test{font-family:Inter;font-style:normal;font-weight:600!important;font-size:22px!important;line-height:27px;color:#000}.text-gray-500{font-family:Inter;font-style:normal;font-weight:500!important;font-size:14px!important;line-height:17px;color:#5e6278}.ms-25{margin-left:16rem}.text-gray-400{font-family:Inter;font-style:normal;font-weight:500;font-size:14px!important;line-height:17px;letter-spacing:-.02em;color:#676e76}::ng-deep .custom-container .mat-mdc-dialog-container .mdc-dialog__surface{border-radius:10px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}\n"] }]
|
|
350
|
+
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i1.NgbActiveModal }, { type: i2.Router }, { type: i3.TimerService }, { type: i0.ChangeDetectorRef }, { type: i4.AuditService }, { type: i2.ActivatedRoute }, { type: i5.ToastService }], propDecorators: { selectedType: [{
|
|
351
|
+
type: Input
|
|
352
|
+
}], confirmerror: [{
|
|
353
|
+
type: ViewChild,
|
|
354
|
+
args: ['confirmerror']
|
|
355
|
+
}] } });
|
|
356
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1yZXBvcnQtcG9wdXAvYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1yZXBvcnQtcG9wdXAvYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBMkMsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFHdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVF4RCxNQUFNLE9BQU8seUJBQXlCO0lBb0JqQjtJQUNWO0lBQ0E7SUFBd0I7SUFBb0M7SUFDNUQ7SUFBa0M7SUFBK0I7SUFyQjFFLGNBQWMsR0FBUSxDQUFDLENBQUM7SUFDeEIsa0JBQWtCLEdBQVEsQ0FBQyxDQUFDO0lBQzVCLGtCQUFrQixHQUFRLENBQUMsQ0FBQztJQUM1QixnQkFBZ0IsQ0FBTTtJQUN0QixhQUFhLENBQU07SUFDbkIsaUJBQWlCLENBQU07SUFDdkIsaUJBQWlCLENBQU07SUFDdkIsVUFBVSxDQUFNO0lBQ2hCLElBQUksR0FBWSxLQUFLLENBQUM7SUFDdEIsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixRQUFRLEdBQVEsRUFBRSxDQUFDO0lBQ1YsWUFBWSxDQUFNO0lBQ0EsWUFBWSxDQUFNO0lBQzVCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLFVBQVUsR0FB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LEVBQUUsS0FBSyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLGdDQUFnQyxDQUFDO2dCQUNsSCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6QyxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUE7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQXpWVSx5QkFBeUI7NEZBQXpCLHlCQUF5QixzTkNkdEMsZ2lJQWdGYzs7NEZEbEVELHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx3QkFBd0I7NlFBaUJ6QixZQUFZO3NCQUFwQixLQUFLO2dCQUNxQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgdmlld0NoaWxkLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXVkaXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXVkaXQuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIExaU3RyaW5nIGZyb20gJ2x6LXN0cmluZyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGltZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hdWRpdC1yZXBvcnQtcG9wdXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdWRpdC1yZXBvcnQtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hdWRpdC1yZXBvcnQtcG9wdXAuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBSZXRhZ2p1bmtjb3VudDogYW55ID0gMDtcclxuICBSZXRhZ2VtcGxveWVlY291bnQ6IGFueSA9IDA7XHJcbiAgUmV0YWdjdXN0b21lcmNvdW50OiBhbnkgPSAwO1xyXG4gIGRlbW9ncmFwaGljQ291bnQ6IGFueTtcclxuICByZXRhZ2p1bmtkYXRhOiBhbnk7XHJcbiAgcmV0YWdlbXBsb3llZWRhdGE6IGFueTtcclxuICByZXRhZ2N1c3RvbWVyZGF0YTogYW55O1xyXG4gIHRvdGFsZmlsZXM6IGFueTtcclxuICBhdXRoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3VibWl0YXV0aDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEVycm9ybXNnOiBhbnkgPSAnJztcclxuICBASW5wdXQoKSBzZWxlY3RlZFR5cGU6IGFueTtcclxuICBAVmlld0NoaWxkKCdjb25maXJtZXJyb3InKSBjb25maXJtZXJyb3I6IGFueTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICB0aW1lUGFzc2VkOiBudW1iZXIgPSAwO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgZm9ybWF0dGVkVGltZTogc3RyaW5nID0gJzAwOjAwOjAwJztcclxuICBjYXRlZ29yeTogYW55ID0gW11cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgdGltZXJTZXJ2aWNlOiBUaW1lclNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIGFwaXNlcnZpY2U6IEF1ZGl0U2VydmljZSwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgbGV0IGZpbGVkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9JylcclxuICAgIHRoaXMudG90YWxmaWxlcyA9IGZpbGVkYXRhO1xyXG4gICAgdGhpcy5hcGlzZXJ2aWNlLmdldEF1ZGl0Y29uZmlnKGZpbGVkYXRhPy5maWxlZGV0YWlscz8uY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnkgPSByZXMuZGF0YS5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3MudGFnZ2luZ0xpbWl0YXRpb25cclxuXHJcblxyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyRGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShkYXRhPy50eXBlKSB8fCAne30nKVxyXG4gICAgICAgICAgICBkYXRhLnZhbHVlID0gZmlsdGVyRGF0YVxyXG4gICAgICAgICAgICBkYXRhLmNvdW50ID0gZGF0YT8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IEF1ZGl0UmVwb3J0UG9wdXBDb21wb25lbnQgfiBuZ09uSW5pdCB+IHRoaXMuY2F0ZWdvcnk6XCIsIHRoaXMuY2F0ZWdvcnkpXHJcbiAgICAgICAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgICAgICAgY29uc3QgZGVjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmRlY29tcHJlc3Moc3RyaW5naWZ5ZGF0YSk7XHJcbiAgICAgICAgICB2YXIgY3VzdG9tZXIgPSBKU09OLnBhcnNlKGRlY29tcHJlc3NlZERhdGEgfHwgJ3t9JylcclxuICAgICAgICAgIHRoaXMuUmV0YWdjdXN0b21lcmNvdW50ID0gY3VzdG9tZXIubGVuZ3RoXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5zZXRUaW1lcigpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGltZXIoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMudGltZXJTZXJ2aWNlLmdldFRpbWVQYXNzZWQoKS5zdWJzY3JpYmUodGltZSA9PiB7XHJcbiAgICAgIHRoaXMudGltZVBhc3NlZCA9IHRpbWU7XHJcbiAgICAgIHRoaXMuZm9ybWF0dGVkVGltZSA9IHRoaXMudGltZXJTZXJ2aWNlLmZvcm1hdFRpbWUodGltZSk7XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRpbWVyU2VydmljZS5zdGFydFRpbWVyKCk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlR2xvYmFsTW91c2VFdmVudCA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMudGltZXJTZXJ2aWNlLnN0YXJ0VGltZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIHRoaXMudGltZXJTZXJ2aWNlLmNsZWFyVGltZXIoKVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlYnJhbmQoKSB7XHJcbiAgICB0aGlzLmF1dGggPSB0cnVlO1xyXG4gICAgdmFyIHRvdGFsZmlsZTogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9Jyk7XHJcblxyXG4gICAgbGV0IGp1bmtpbWFnZTogYW55ID0gW107XHJcbiAgICBsZXQgZW1wbG95ZWVpbWFnZTogYW55ID0gW107XHJcbiAgICBsZXQgY3VzdG9tZXJpbWFnZTogYW55ID0gW107XHJcblxyXG4gICAgdGhpcy5yZXRhZ2p1bmtkYXRhLm1hcCgoZTogYW55KSA9PiB7XHJcbiAgICAgIGRlbGV0ZSBlLmltZ19wYXRoOyBkZWxldGUgZS5zZWxlY3RlZDsgZGVsZXRlIGUuY291bnQ7XHJcbiAgICAgIGRlbGV0ZSBlLmRyb3BwZWQ7IGRlbGV0ZSBlLm1hcHBlZGlkO1xyXG4gICAgICBqdW5raW1hZ2UucHVzaChlKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLnJldGFnZW1wbG95ZWVkYXRhLm1hcCgoZTogYW55KSA9PiB7XHJcbiAgICAgIGRlbGV0ZSBlLmltZ19wYXRoOyBkZWxldGUgZS5zZWxlY3RlZDsgZGVsZXRlIGUuY291bnQ7XHJcbiAgICAgIGRlbGV0ZSBlLmRyb3BwZWQ7IGRlbGV0ZSBlLm1hcHBlZGlkO1xyXG4gICAgICBlbXBsb3llZWltYWdlLnB1c2goZSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMucmV0YWdjdXN0b21lcmRhdGEubWFwKChlOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIGlmIChlLmNvdW50ID4gMSkge1xyXG4gICAgICAgIGRlbGV0ZSBlLmltZ19wYXRoO1xyXG4gICAgICAgIGRlbGV0ZSBlLnNlbGVjdGVkO1xyXG4gICAgICAgIGRlbGV0ZSBlLmRyb3BwZWQ7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGUubWFwcGVkaWQ7XHJcbiAgICAgICAgZS5tYXBwZWRpZCA9IHJlc3VsdFxyXG4gICAgICAgIGUuY291bnQgPSByZXN1bHQubGVuZ3RoXHJcbiAgICAgICAgZS5tYXBwZWRpZC5mb3JFYWNoKChlMTogYW55KSA9PiB7IGRlbGV0ZSBlMS5pbWdfcGF0aCB9KVxyXG4gICAgICAgIGN1c3RvbWVyaW1hZ2UucHVzaChlKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlLmRlbW9ncmFwaGljID09PSAnZCcgJiYgZS5jb3VudCA9PT0gMSkge1xyXG4gICAgICAgIGRlbGV0ZSBlLmltZ19wYXRoO1xyXG4gICAgICAgIGRlbGV0ZSBlLnNlbGVjdGVkO1xyXG4gICAgICAgIGRlbGV0ZSBlLmRyb3BwZWQ7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGUubWFwcGVkaWQ7XHJcbiAgICAgICAgZS5tYXBwZWRpZCA9IHJlc3VsdFxyXG4gICAgICAgIGUuY291bnQgPSByZXN1bHQubGVuZ3RoXHJcbiAgICAgICAgZS5tYXBwZWRpZC5mb3JFYWNoKChlMTogYW55KSA9PiB7IGRlbGV0ZSBlMS5pbWdfcGF0aCB9KVxyXG4gICAgICAgIGN1c3RvbWVyaW1hZ2UucHVzaChlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdmFyIG9iajogYW55ID0ge1xyXG4gICAgICBhdWRpdElkOiB0b3RhbGZpbGU/LmF1ZGl0SWQgPyB0b3RhbGZpbGU/LmF1ZGl0SWQgOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5hdWRpdElkLFxyXG4gICAgICBzdG9yZUlkOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZV9pZCxcclxuICAgICAgYXVkaXRUeXBlOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy50eXBlLFxyXG4gICAgICBmaWxlRGF0ZTogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uZmlsZV9kYXRlLFxyXG4gICAgICBiZWZvcmVDb3VudDogdG90YWxmaWxlPy50b3RhbGZpbGVzLFxyXG4gICAgICBqdW5rQ291bnQ6IHRoaXMuUmV0YWdqdW5rY291bnQsXHJcbiAgICAgIGp1bms6IGp1bmtpbWFnZSA/IGp1bmtpbWFnZSA6IFtdLFxyXG4gICAgICBlbXBsb3llZUNvdW50OiB0aGlzLlJldGFnZW1wbG95ZWVjb3VudCxcclxuICAgICAgZW1wbG95ZWU6IGVtcGxveWVlaW1hZ2UgPyBlbXBsb3llZWltYWdlIDogW10sXHJcbiAgICAgIGN1c3RvbWVyQ291bnQ6IHRoaXMuUmV0YWdjdXN0b21lcmNvdW50LFxyXG4gICAgICB6b25lTmFtZTogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uem9uZU5hbWUgPyB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy56b25lTmFtZSA6ICcnLFxyXG4gICAgICBtb2R1bGVUeXBlOiB0aGlzLnNlbGVjdGVkVHlwZSxcclxuICAgICAgY3VzdG9tZXI6IGN1c3RvbWVyaW1hZ2UgPyBjdXN0b21lcmltYWdlIDogW10sXHJcbiAgICAgIHRpbWVTcGVudDogdGhpcy50aW1lUGFzc2VkXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcGlzZXJ2aWNlLnNhdmVhdWRpdChvYmopLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzPy5kYXRhPy5yZXN1bHQpXHJcbiAgICAgICAgICB0aGlzLmF1dGggPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudGltZXJTZXJ2aWNlLnJlc2V0VGltZXIoKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGltZVNwZW50JylcclxuICAgICAgICAgIHRoaXMuY2xvc2Vwb3B1cCgpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlbXBsb3llZScpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdqdW5rJylcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1ZGl0JylcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RvdGFsZmlsZXMnKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgncmV0YWcnKVxyXG5cclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90aWNrZXRzJ10sIHsgcXVlcnlQYXJhbXM6IHsgdHlwZTogJ2Zvb3RmYWxsJyB9IH0pXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmF1dGggPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRXJyb3Jtc2cgPSByZXMuZXJyb3JcclxuICAgICAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuY29uZmlybWVycm9yKVxyXG4gICAgICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RpY2tldHMnXSwgeyBxdWVyeVBhcmFtczogeyB0eXBlOiAnZm9vdGZhbGwnIH0gfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5lcnJvcj8uZXJyb3IgfHwgZXJyPy5tZXNzYWdlIHx8ICdJbnZhbGlkIHN0YXR1cyBjb2RlOiB1bmRlZmluZWQnO1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnJvck1lc3NhZ2UpO1xyXG4gICAgICB9LFxyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgbmV4dGZpbGUoKSB7XHJcbiAgICB0aGlzLmF1dGggPSB0cnVlO1xyXG4gICAgbGV0IHRvdGFsZmlsZTogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9Jyk7XHJcbiAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH4gbmV4dGZpbGUgfiB0b3RhbGZpbGU6XCIsIHRvdGFsZmlsZSlcclxuICAgIGxldCByZXZpc2VkRGV0YWlsOiBhbnkgPSBbXVxyXG4gICAgbGV0IHN0cmluZ2lmeWRhdGEgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhdWRpdCcpIHx8ICd7fSdcclxuICAgIGNvbnN0IGRlY29tcHJlc3NlZERhdGEgPSBMWlN0cmluZy5kZWNvbXByZXNzKHN0cmluZ2lmeWRhdGEpO1xyXG4gICAgdmFyIGN1c3RvbWVyID0gSlNPTi5wYXJzZShkZWNvbXByZXNzZWREYXRhIHx8ICd7fScpXHJcbiAgICBjdXN0b21lci5tYXAoKGN1c3RvbWVyRGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChjdXN0b21lckRhdGEuY291bnQgPiAxKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5leHRmaWxlIH4gY3VzdG9tZXJEYXRhOlwiLCBjdXN0b21lckRhdGEpXHJcbiAgICAgICAgbGV0IGR1cGxpY2F0ZURhdGEgPSBjdXN0b21lckRhdGEubWFwcGVkaWQuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuaW1nX25hbWUgIT0gY3VzdG9tZXJEYXRhPy5pbWdfbmFtZSlcclxuICAgICAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH4gbmV4dGZpbGUgfiBkdXBsaWNhdGVEYXRhOlwiLCBkdXBsaWNhdGVEYXRhKVxyXG4gICAgICAgIGxldCBkdXBsaWNhdGVJbWFnZTogYW55ID0gW11cclxuICAgICAgICBkdXBsaWNhdGVEYXRhLm1hcCgoZHVwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBkdXBsaWNhdGVJbWFnZS5wdXNoKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJpZFwiOiBgJHt0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkfV8ke3RvdGFsZmlsZT8uZmlsZWRldGFpbHM/LkRhdGV9XyR7ZHVwRGF0YT8uaW1nX25hbWV9YCxcclxuICAgICAgICAgICAgICBcInRlbXBJZFwiOiBkdXBEYXRhPy5pbWdfbmFtZSxcclxuICAgICAgICAgICAgICBcImZpbGVQYXRoXCI6IGR1cERhdGE/LmltZ19wYXRoLFxyXG4gICAgICAgICAgICAgIFwiaXNDaGVja2VkXCI6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCBuZXdPYmo6IGFueSA9IHtcclxuICAgICAgICAgIFwiaWRcIjogYCR7dG90YWxmaWxlPy5maWxlZGV0YWlscz8uc3RvcmVJZH1fJHt0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlfV8ke2N1c3RvbWVyRGF0YT8uaW1nX25hbWV9YCxcclxuICAgICAgICAgIFwiY2xpZW50SWRcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uY2xpZW50SWQsXHJcbiAgICAgICAgICBcInN0b3JlSWRcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uc3RvcmVJZCxcclxuICAgICAgICAgIFwidGVtcElkXCI6IGN1c3RvbWVyRGF0YT8uaW1nX25hbWUsXHJcbiAgICAgICAgICBcImRhdGVTdHJpbmdcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZSxcclxuICAgICAgICAgIFwidGltZVJhbmdlXCI6IFwiMTFBTS0xMlBNXCIsXHJcbiAgICAgICAgICBcInByb2Nlc3NUeXBlXCI6IFwiZm9vdGZhbGxcIixcclxuICAgICAgICAgIFwicmV2b3BzVHlwZVwiOiBcImR1cGxpY2F0ZVwiLFxyXG4gICAgICAgICAgXCJmaWxlUGF0aFwiOiBjdXN0b21lckRhdGE/LmltZ19wYXRoLFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjogXCJzdWJtaXR0ZWRcIixcclxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgIFwiaXNDaGVja2VkXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJ0YWdnaW5nLXJlZmxlY3RcIixcclxuICAgICAgICAgIFwicGFyZW50XCI6IG51bGwsXHJcbiAgICAgICAgICBcImlzUGFyZW50XCI6IHRydWUsXHJcbiAgICAgICAgICBcImR1cGxpY2F0ZUltYWdlXCI6IGR1cGxpY2F0ZUltYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IEF1ZGl0UmVwb3J0UG9wdXBDb21wb25lbnQgfiBuZXh0ZmlsZSB+IG5ld09iajpcIiwgbmV3T2JqKVxyXG4gICAgICAgIHJldmlzZWREZXRhaWwucHVzaChuZXdPYmopXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5leHRmaWxlIH4gY3VzdG9tZXJEYXRhOlwiLCBjdXN0b21lckRhdGEpXHJcbiAgICAgICAgbGV0IG5ld09iajogYW55ID0ge1xyXG4gICAgICAgICAgXCJpZFwiOiBgJHt0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkfV8ke3RvdGFsZmlsZT8uZmlsZWRldGFpbHM/LkRhdGV9XyR7Y3VzdG9tZXJEYXRhPy5pbWdfbmFtZX1gLFxyXG4gICAgICAgICAgXCJjbGllbnRJZFwiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5jbGllbnRJZCxcclxuICAgICAgICAgIFwic3RvcmVJZFwiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkLFxyXG4gICAgICAgICAgXCJ0ZW1wSWRcIjogY3VzdG9tZXJEYXRhPy5pbWdfbmFtZSxcclxuICAgICAgICAgIFwiZGF0ZVN0cmluZ1wiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlLFxyXG4gICAgICAgICAgXCJ0aW1lUmFuZ2VcIjogXCIxMUFNLTEyUE1cIixcclxuICAgICAgICAgIFwicHJvY2Vzc1R5cGVcIjogXCJmb290ZmFsbFwiLFxyXG4gICAgICAgICAgXCJyZXZvcHNUeXBlXCI6IFwiZHVwbGljYXRlXCIsXHJcbiAgICAgICAgICBcImZpbGVQYXRoXCI6IGN1c3RvbWVyRGF0YT8uaW1nX3BhdGgsXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiBcInN1Ym1pdHRlZFwiLFxyXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgXCJpc0NoZWNrZWRcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcInRhZ2dpbmctcmVmbGVjdFwiLFxyXG4gICAgICAgICAgXCJwYXJlbnRcIjogbnVsbCxcclxuICAgICAgICAgIFwiaXNQYXJlbnRcIjogdHJ1ZSxcclxuICAgICAgICAgIFwiZHVwbGljYXRlSW1hZ2VcIjogW11cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5leHRmaWxlIH4gbmV3T2JqOlwiLCBuZXdPYmopXHJcbiAgICAgICAgcmV2aXNlZERldGFpbC5wdXNoKG5ld09iailcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9KVxyXG4gICAgbGV0IGNvdW50OiBhbnkgPSBbXVxyXG4gICAgdGhpcy5jYXRlZ29yeS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBjb3VudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXHJcbiAgICAgICAgdmFsdWU6IGRhdGEuY291bnQsXHJcbiAgICAgICAgdHlwZTogZGF0YS50eXBlXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBmaWx0ZXJEYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGRhdGE/LnR5cGUpIHx8ICdbXScpXHJcblxyXG4gICAgICBmaWx0ZXJEYXRhLm1hcCgob3RoZXJEYXRhOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgbGV0IG90aGVyT2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICBcImlkXCI6IGAke3RvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWR9XyR7dG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZX1fJHtvdGhlckRhdGE/LmltZ19uYW1lfWAsXHJcbiAgICAgICAgICBcImNsaWVudElkXCI6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LmNsaWVudElkLFxyXG4gICAgICAgICAgXCJzdG9yZUlkXCI6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWQsXHJcbiAgICAgICAgICBcInRlbXBJZFwiOiBvdGhlckRhdGE/LmltZ19uYW1lLFxyXG4gICAgICAgICAgXCJkYXRlU3RyaW5nXCI6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LkRhdGUsXHJcbiAgICAgICAgICBcInByb2Nlc3NUeXBlXCI6IFwiZm9vdGZhbGxcIixcclxuICAgICAgICAgIFwicmV2b3BzVHlwZVwiOiBkYXRhPy50eXBlLFxyXG4gICAgICAgICAgXCJmaWxlUGF0aFwiOiBvdGhlckRhdGE/LmltZ19wYXRoLFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjogXCJzdWJtaXR0ZWRcIixcclxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgIFwiaXNDaGVja2VkXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJ0YWdnaW5nLXJlZmxlY3RcIixcclxuICAgICAgICAgIFwicGFyZW50XCI6IG51bGwsXHJcbiAgICAgICAgICBcImlzUGFyZW50XCI6IGZhbHNlLFxyXG4gICAgICAgICAgXCJkdXBsaWNhdGVJbWFnZVwiOiBbXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXZpc2VkRGV0YWlsLnB1c2gob3RoZXJPYmopXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG5cclxuXHJcblxyXG5cclxuICAgIHZhciBvYmo6IGFueSA9IHtcclxuICAgICAgXCJ0eXBlXCI6IFwidGFuZ29yZXZpZXdcIixcclxuICAgICAgXCJtb2RlXCI6IFwid2ViXCIsXHJcbiAgICAgIFwicmV2aWNlZEZvb3RmYWxsXCI6IHRoaXMuUmV0YWdjdXN0b21lcmNvdW50LFxyXG5cclxuICAgICAgXCJyZXZpY2VkUGVyY1wiOiBNYXRoLnJvdW5kKCh0aGlzLlJldGFnY3VzdG9tZXJjb3VudCAvIHRvdGFsZmlsZT8udG90YWxmaWxlcykgKiAxMDApICsgXCIlXCIsXHJcbiAgICAgIGNvdW50OiBjb3VudCxcclxuICAgICAgcmV2aXNlZERldGFpbDogcmV2aXNlZERldGFpbFxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5leHRmaWxlIH4gb2JqOlwiLCBvYmopXHJcbiAgICAvLyByZXR1cm5cclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBzdG9yZUlkOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkLFxyXG4gICAgICBcImRhdGVTdHJpbmdcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZSxcclxuICAgICAgbWFwcGluZ0luZm86IG9ialxyXG4gICAgfVxyXG4gICAgdGhpcy5hcGlzZXJ2aWNlLnNhdmVhdWRpdChwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuYXV0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50aW1lclNlcnZpY2UucmVzZXRUaW1lcigpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd0aW1lU3BlbnQnKVxyXG4gICAgICAgICAgdGhpcy5jbG9zZXBvcHVwKClcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VtcGxveWVlJylcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2p1bmsnKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnYXVkaXQnKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndG90YWxmaWxlcycpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdyZXRhZycpXHJcbiAgICAgICAgICB2YXIgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIHRvdGFsZmlsZXM6IHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqLnRvdGFsZmlsZXMucXVldWVOYW1lID0gdG90YWxmaWxlPy5maWxlZGV0YWlscz8ucXVldWVOYW1lXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0b3RhbGZpbGVzJywgSlNPTi5zdHJpbmdpZnkob2JqKSlcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90aWNrZXRzJ10sIHsgcXVlcnlQYXJhbXM6IHsgdHlwZTogJ2Zvb3RmYWxsJyB9IH0pXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmF1dGggPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRXJyb3Jtc2cgPSByZXMuZXJyb3JcclxuICAgICAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuY29uZmlybWVycm9yKVxyXG4gICAgICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RpY2tldHMnXSwgeyBxdWVyeVBhcmFtczogeyB0eXBlOiAnZm9vdGZhbGwnIH0gfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8uZXJyb3I/LmVycm9yIHx8IGVycj8ubWVzc2FnZSB8fCAnSW52YWxpZCBzdGF0dXMgY29kZTogdW5kZWZpbmVkJztcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgfSxcclxuICAgIH0pXHJcblxyXG4gIH1cclxuICBjbG9zZXBvcHVwKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcmV2aWV3ZGF0YSgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvdGlja2V0cy9tYXBwaW5nLWxpc3RcIl0pXHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBtdC01XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctNzVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBidG4tc20gcHktMiBteC0yXCIgKGNsaWNrKT1cInJldmlld2RhdGEoKVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tcHJpbWFyeSBzdmctaWNvbi0yeFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNS44MzM3IDEwLjAwMDFINC4xNjY5OU00LjE2Njk5IDEwLjAwMDFMMTAuMDAwMyAxNS44MzM0TTQuMTY2OTkgMTAuMDAwMUwxMC4wMDAzIDQuMTY2NzVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48c3BhbiBjbGFzcz1cIm1zLTNcIj5CYWNrIHRvIFJldmlldzwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMiB0ZXh0LWRhcmsgZnctYm9sZGVyIG15LTMgYXVkaXQtdGVzdFwiPkF1ZGl0IFJlcG9ydDwvc3Bhbj5cclxuICAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnkgbWUtMTBcIiAoY2xpY2spPVwiY2xvc2Vwb3B1cCgpXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjZcIiB5PVwiMTcuMzEzN1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCIgdHJhbnNmb3JtPVwicm90YXRlKC00NSA2IDE3LjMxMzcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI3LjQxNDIyXCIgeT1cIjZcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSA3LjQxNDIyIDYpXCIgZmlsbD1cImJsYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCIgYWxpZ24taXRlbXMtY2VudGVyIHRleHQtY2VudGVyIG10LTUgbWItNSBmcy00XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTQwMCBtZS0yXCI+IEJlZm9yZSBDb3VudDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIG1lLTEwXCI+IHt7dG90YWxmaWxlcz8udG90YWxmaWxlc319IDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIG1lLTJcIj4gQWZ0ZXIgQ291bnQgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWJvbGQgbWUtMTBcIj4ge3tSZXRhZ2N1c3RvbWVyY291bnR9fSA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIiBtdC01IG14LTIwIHAtMTBcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIFwiID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JheS01MDBcIj57e2l0ZW0ubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrIGZzLTQgYnRuIGJ0bi1pY29uIGJ0bi1zbSBoLWF1dG8gIGJ0bi1jb2xvci1ncmF5LTQwMCBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnkganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmNvdW50fX0gPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3Igc2VwYXJhdG9yLWRhc2hlZCBteS0zXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2tcIj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPkNVU1RPTUVSPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrIGZzLTQgYnRuIGJ0bi1pY29uIGJ0bi1zbSBoLWF1dG8gYnRuLWNvbG9yLWdyYXktNDAwIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeSBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICB7e1JldGFnY3VzdG9tZXJjb3VudH19IDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvciBzZXBhcmF0b3ItZGFzaGVkIG15LTNcIj48L2Rpdj5cclxuXHJcbiAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMTAgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gcHktMiBteC01IHB4LTggbXQtMlwiICBbZGlzYWJsZWRdPVwiYXV0aFwiIChjbGljayk9XCJuZXh0ZmlsZSgpXCIgPiBTdWJtaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29uZmlybWVycm9yIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJ3LTQwMHB4IGgtYXV0byBwLTEwIGNhcmRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWxcIj57e0Vycm9ybXNnfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IG10LTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctNTAgbWUtMlwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgnaXNEZW5pZWQnKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTUwIG1zLTJcIiAoY2xpY2spPVwibW9kYWwuY2xvc2UoJ2lzQ29uZmlybWVkJylcIj5Db25maXJtPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|