@sachin9822/reports-lib 0.0.149 → 0.0.151

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +22 -8
  2. package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +254 -0
  3. package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +463 -0
  4. package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +33 -53
  5. package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +348 -0
  6. package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +28 -77
  7. package/esm2020/lib/models/accounting-report/accounting-report-entry-model.mjs +2 -0
  8. package/esm2020/lib/models/accounting-report/accounting-report-model.mjs +2 -0
  9. package/esm2020/lib/models/branch-activity-receive-report/branch-activity-receive.model.mjs +2 -0
  10. package/esm2020/lib/models/cancellation-transaction-report/cancellation-transaction.model.mjs +2 -0
  11. package/esm2020/lib/reports-lib.module.mjs +18 -5
  12. package/esm2020/lib/services/config.service.mjs +4 -3
  13. package/esm2020/lib/services/report.service.mjs +91 -1
  14. package/esm2020/lib/shared/export-generic.service.mjs +324 -0
  15. package/esm2020/lib/shared/export.service.mjs +2 -2
  16. package/esm2020/lib/shared/metadata/metadata.component.mjs +50 -0
  17. package/esm2020/lib/shared/page-size-selector/page-size-selector.component.mjs +2 -2
  18. package/esm2020/lib/shared/search-filter/search-filter.component.mjs +402 -23
  19. package/esm2020/lib/shared/shared.module.mjs +8 -6
  20. package/esm2020/public-api.mjs +7 -1
  21. package/fesm2015/sachin9822-reports-lib.mjs +2119 -294
  22. package/fesm2015/sachin9822-reports-lib.mjs.map +1 -1
  23. package/fesm2020/sachin9822-reports-lib.mjs +2083 -269
  24. package/fesm2020/sachin9822-reports-lib.mjs.map +1 -1
  25. package/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.d.ts +5 -2
  26. package/lib/components/accounting-report/accounting-report.component.d.ts +56 -0
  27. package/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.d.ts +52 -0
  28. package/lib/components/branch-activity-send-report/branch-activity-send-report.component.d.ts +4 -31
  29. package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +99 -0
  30. package/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.d.ts +4 -32
  31. package/lib/models/accounting-report/accounting-report-entry-model.d.ts +24 -0
  32. package/lib/models/accounting-report/accounting-report-model.d.ts +8 -0
  33. package/lib/models/branch-activity-receive-report/branch-activity-receive.model.d.ts +18 -0
  34. package/lib/models/cancellation-transaction-report/cancellation-transaction.model.d.ts +44 -0
  35. package/lib/reports-lib.module.d.ts +13 -10
  36. package/lib/services/report.service.d.ts +18 -0
  37. package/lib/shared/export-generic.service.d.ts +47 -0
  38. package/lib/shared/metadata/metadata.component.d.ts +24 -0
  39. package/lib/shared/search-filter/search-filter.component.d.ts +3 -0
  40. package/lib/shared/shared.module.d.ts +5 -3
  41. package/package.json +1 -1
  42. package/public-api.d.ts +6 -0
@@ -0,0 +1,463 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { ReportService } from '../../services/report.service';
3
+ import { formatDate } from '@angular/common';
4
+ import { ComponentLoadingStates } from '../../models/component-loading-states';
5
+ import * as XLSX from 'xlsx';
6
+ import { saveAs } from 'file-saver';
7
+ import * as ExcelJS from 'exceljs';
8
+ import * as FileSaver from 'file-saver';
9
+ import jsPDF from 'jspdf';
10
+ import 'jspdf-autotable';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "ag-grid-angular";
13
+ import * as i2 from "@angular/common";
14
+ import * as i3 from "../../shared/page-size-selector/page-size-selector.component";
15
+ import * as i4 from "../../shared/metadata/metadata.component";
16
+ import * as i5 from "@ng-bootstrap/ng-bootstrap";
17
+ import * as i6 from "../../shared/loader/loader.component";
18
+ import * as i7 from "../../shared/search-filter/search-filter.component";
19
+ export class BranchActivityReceiveReportComponent {
20
+ constructor() {
21
+ this.data = [];
22
+ this.dataMap = {};
23
+ this.filteredData = {};
24
+ this.user = "kaushik.kulsange@xpressmoney.tech";
25
+ this.ReportName = "Branch Activity Receive";
26
+ this.reportService = inject(ReportService);
27
+ this.ComponentLoadingState = ComponentLoadingStates;
28
+ this.loadingState = ComponentLoadingStates.Complete;
29
+ this.searchText = '';
30
+ this.gridApis = [];
31
+ this.showReport = false;
32
+ this.noDataFound = false;
33
+ this.columnDefs = [
34
+ { field: 'businessDateTime', headerName: 'Business Date', flex: 1, headerClass: 'ag-header-cell', minWidth: 70, width: 70, tooltipField: 'businessDateTime' },
35
+ { field: 'transactionDateAndTime', headerName: 'Receive Date', flex: 2, headerClass: 'ag-header-cell', wrapText: true, autoHeight: true, tooltipField: 'transactionDateAndTime' },
36
+ { field: 'transactionNumber', headerName: 'Transaction Number', flex: 1.8, headerClass: 'ag-header-cell', width: 130, cellClass: 'ag-left-cols-cell compact-cell-transaction', tooltipField: 'transactionNumber' },
37
+ { field: 'product', headerName: 'Product', flex: 0.5, headerClass: 'ag-header-cell', minWidth: 50, width: 60, tooltipField: 'product' },
38
+ { field: 'senderName', headerName: 'Sender Name', flex: 1, headerClass: 'ag-header-cell', width: 130, tooltipField: 'senderName' },
39
+ { field: 'sendAgentCode', headerName: 'Send ClientCode', flex: 1, headerClass: 'ag-header-cell', minWidth: 70, width: 70, tooltipField: 'sendAgentCode' },
40
+ { field: 'receiverName', headerName: 'Receiver Name', flex: 1, headerClass: 'ag-header-cell', width: 130, tooltipField: 'receiverName' },
41
+ { field: 'receiveAgentBranchCode', headerName: 'ReceiveClient BranchCode', headerClass: 'ag-header-cell', flex: 1, maxWidth: 120, tooltipField: 'receiveAgentBranchCode' },
42
+ { field: 'payOutCurrency', headerName: 'Receive CcyCode', flex: 1, headerClass: 'ag-header-cell', maxWidth: 90, tooltipField: 'payOutCurrency' },
43
+ { field: 'amountPaid', headerName: 'Amount Paid', flex: 1, headerClass: 'ag-header-cell', width: 100, valueFormatter: this.currencyFormatter.bind(this), cellClass: 'ag-right-aligned-cell compact-cell', tooltipField: 'amountPaid' },
44
+ { field: 'status', headerName: 'Transaction Status', flex: 1, headerClass: 'ag-header-cell', tooltipField: 'status' }
45
+ ];
46
+ this.defaultColDef = {
47
+ sortable: true,
48
+ filter: false,
49
+ resizable: true,
50
+ minwidth: 40,
51
+ wrapHeaderText: true,
52
+ autoHeaderHeight: true,
53
+ suppressSizeToFit: false,
54
+ wrapText: true
55
+ };
56
+ }
57
+ ngOnInit() {
58
+ this.loadImageAsBase64('/assets/reports-lib/assets/images/XMLogo.png').then(base64 => {
59
+ this.logoBase64 = base64;
60
+ });
61
+ }
62
+ onGridReady(params, id) {
63
+ params.api.sizeColumnsToFit();
64
+ this.gridApis[id] = params.api;
65
+ }
66
+ onGridSizeChanged(params) {
67
+ params.api.sizeColumnsToFit();
68
+ }
69
+ // Currency Formatter
70
+ currencyFormatter(params) {
71
+ if (params.value == null || params.value === '')
72
+ return '';
73
+ const number = parseFloat(params.value);
74
+ if (isNaN(number))
75
+ return params.value;
76
+ return number.toLocaleString('en-US', {
77
+ minimumFractionDigits: 3,
78
+ maximumFractionDigits: 3
79
+ });
80
+ }
81
+ handleExport(option) {
82
+ this.selectedExportOption = option;
83
+ const data = [];
84
+ if (Object.keys(this.filteredData).length == 0) {
85
+ return;
86
+ }
87
+ switch (this.selectedExportOption) {
88
+ case 'excel':
89
+ this.exportExcel(data);
90
+ break;
91
+ case 'pdf':
92
+ this.exportPDF(data);
93
+ break;
94
+ case 'csv':
95
+ this.exportCSV(data);
96
+ break;
97
+ default:
98
+ alert('Please select an export format.');
99
+ }
100
+ }
101
+ // ------------------------ Utility ------------------------
102
+ loadImageAsBase64(imagePath) {
103
+ return new Promise((resolve, reject) => {
104
+ const img = new Image();
105
+ img.crossOrigin = 'anonymous';
106
+ img.src = imagePath;
107
+ img.onload = () => {
108
+ // Scale up canvas resolution (2x or more)
109
+ const scale = 2;
110
+ const canvas = document.createElement('canvas');
111
+ canvas.width = img.width * scale;
112
+ canvas.height = img.height * scale;
113
+ const ctx = canvas.getContext('2d');
114
+ if (ctx) {
115
+ ctx.scale(scale, scale); // Draw image at higher quality
116
+ ctx.drawImage(img, 0, 0);
117
+ const base64 = canvas.toDataURL('image/png', 1.0); // 1.0 = highest quality
118
+ resolve(base64);
119
+ }
120
+ else {
121
+ reject('Failed to get canvas context.');
122
+ }
123
+ };
124
+ img.onerror = () => reject('Failed to load image: ' + imagePath);
125
+ });
126
+ }
127
+ exportPDF(data) {
128
+ const currencyFields = ['payoutAmount', 'payinAmount', 'totalPayinAmount', 'tax', 'transactionCommissionAmount'];
129
+ data = Object.values(this.dataMap)[0];
130
+ const doc = new jsPDF({
131
+ orientation: 'landscape',
132
+ unit: 'mm',
133
+ format: [400, 210]
134
+ });
135
+ const pageWidth = doc.internal.pageSize.width;
136
+ //Title
137
+ const title = `Branch Activity Send`;
138
+ doc.setFontSize(15);
139
+ doc.setFont('helvetica', 'bold');
140
+ const textWidth = doc.getTextWidth(title);
141
+ doc.text(title, doc.internal.pageSize.width / 2, 15, { align: 'center' });
142
+ //Add Image
143
+ if (this.logoBase64) {
144
+ doc.addImage(this.logoBase64, 'PNG', 15, 5, 25, 20);
145
+ }
146
+ //Info block
147
+ const infoY = 30;
148
+ const leftMargin = 15;
149
+ const lineHeight = 7;
150
+ const infoLines = [
151
+ ['Report User And Time:', this.user],
152
+ ['Report Time', this.reportDate]
153
+ // ['Report Period:', `${this.fromDate} - ${this.toDate}`]
154
+ ];
155
+ doc.setFontSize(10);
156
+ infoLines.forEach(([label, value], i) => {
157
+ const y = infoY + i * lineHeight;
158
+ // Draw label in bold
159
+ doc.setFont('helvetica', 'bold');
160
+ doc.text(label, leftMargin, y);
161
+ // Draw value in normal font right after label
162
+ const labelWidth = doc.getTextWidth(label + ' ');
163
+ doc.setFont('helvetica', 'normal');
164
+ doc.text(value, leftMargin + labelWidth, y);
165
+ });
166
+ const filteredColumns = this.columnDefs.filter(col => !(col.headerName?.toLowerCase().includes('sr. no') || col.field?.toLowerCase().includes('srno') || col.field?.toLowerCase().includes('serial')));
167
+ // Prepare headers with Sr No
168
+ const headers = ['Sr No', ...filteredColumns.map(col => col.headerName || col.field)];
169
+ let Rows = [];
170
+ for (const [key, reports] of Object.entries(this.dataMap)) {
171
+ Rows.push([{ content: key, colSpan: 15 }]);
172
+ const rows = reports.map((row, index) => {
173
+ const rowData = filteredColumns.map(col => {
174
+ let value = row[col.field];
175
+ if (currencyFields.includes(col.field) && value != null) {
176
+ value = parseFloat(value).toFixed(3);
177
+ }
178
+ return value ?? '';
179
+ });
180
+ Rows.push([index + 1, ...rowData]);
181
+ return [index + 1, ...rowData];
182
+ });
183
+ // Rows.push(rows);
184
+ }
185
+ // Prepare rows with Sr No
186
+ const rows = data.map((row, index) => {
187
+ const rowData = filteredColumns.map(col => {
188
+ let value = row[col.field];
189
+ return value ?? '';
190
+ });
191
+ return [index + 1, ...rowData];
192
+ });
193
+ // Generate dynamic column styles for auto-width
194
+ const columnStyles = {};
195
+ headers.forEach((_, i) => {
196
+ columnStyles[i] = { cellWidth: 'auto' };
197
+ });
198
+ columnStyles[2] = { cellWidth: 40 };
199
+ // Render Table
200
+ doc.autoTable({
201
+ head: [headers],
202
+ body: Rows,
203
+ startY: infoY + infoLines.length * lineHeight + 5,
204
+ theme: 'grid',
205
+ headStyles: {
206
+ fillColor: [220, 220, 220],
207
+ textColor: 0,
208
+ fontStyle: 'bold',
209
+ fontSize: 9,
210
+ halign: 'center'
211
+ },
212
+ bdyStyles: {
213
+ fontSize: 8,
214
+ fillColor: [255, 255, 255],
215
+ textColor: [0, 0, 0]
216
+ },
217
+ styles: {
218
+ cellPadding: 2,
219
+ overflow: 'linebreak',
220
+ minCellHeight: 6
221
+ },
222
+ columnStyles: columnStyles
223
+ });
224
+ doc.save("Branch-Activity-Send-Report.pdf");
225
+ }
226
+ exportExcel(data) {
227
+ const currencyFields = ['payoutAmount', 'payinAmount', 'totalPayinAmount', 'tax', 'transactionCommissionAmount'];
228
+ const workbook = new ExcelJS.Workbook();
229
+ const worksheet = workbook.addWorksheet('Branch-Activity-Send-Report');
230
+ const totalColumns = this.columnDefs.length;
231
+ // Title Row
232
+ const titleRow = worksheet.addRow(["Branch Activity Send"]);
233
+ titleRow.font = { bold: true, size: 14 };
234
+ titleRow.height = 60;
235
+ worksheet.mergeCells(`A${titleRow.number}:${String.fromCharCode(64 + totalColumns)}${titleRow.number}`);
236
+ //Center align the title
237
+ const masterCell = worksheet.getCell(`A${titleRow.number}`);
238
+ masterCell.alignment = { horizontal: 'center', vertical: 'middle' };
239
+ // Add image if available
240
+ if (this.logoBase64) {
241
+ const base64Data = this.logoBase64.replace(/^data:image\/\w+;base64,/, '');
242
+ const imageId = workbook.addImage({
243
+ base64: base64Data,
244
+ extension: 'png',
245
+ });
246
+ // Place image at top-left (e.g., A1:C4)
247
+ worksheet.addImage(imageId, {
248
+ tl: { col: 0, row: 0 },
249
+ ext: { width: 150, height: 50 },
250
+ });
251
+ }
252
+ //Meta Data
253
+ const meta = [
254
+ ['Report User ', this.user],
255
+ ['Report Time', this.reportDate]
256
+ // ['Report Period', `${this.fromDate} - ${this.toDate}`]
257
+ ];
258
+ meta.forEach(([label, value]) => {
259
+ const row = worksheet.addRow([label, value]);
260
+ //Bold the key column
261
+ const labelCell = row.getCell(1);
262
+ labelCell.font = { bold: true };
263
+ });
264
+ // For Empty Row
265
+ worksheet.addRow([]);
266
+ // Add Header Row for Data Table
267
+ const headerRow = worksheet.addRow(this.columnDefs.map(col => col.headerName || col.field));
268
+ headerRow.font = { bold: true };
269
+ for (let i = 1; i <= this.columnDefs.length; i++) {
270
+ const cell = headerRow.getCell(i);
271
+ cell.fill = {
272
+ type: 'pattern',
273
+ pattern: 'solid',
274
+ fgColor: { argb: 'D9D9D9' },
275
+ };
276
+ }
277
+ headerRow.alignment = {
278
+ wrapText: true,
279
+ vertical: 'top',
280
+ horizontal: 'center'
281
+ };
282
+ headerRow.border = {
283
+ top: { style: 'thin' }, bottom: { style: 'thin' },
284
+ left: { style: 'thin' }, right: { style: 'thin' }
285
+ };
286
+ const dataStartRow = worksheet.lastRow.number + 1;
287
+ const branchRows = [];
288
+ for (const [key, reports] of Object.entries(this.dataMap)) {
289
+ console.log('Key:', key);
290
+ console.log('Reports:', reports);
291
+ const row = worksheet.addRow([`${key}`]);
292
+ worksheet.mergeCells(row.number, 1, row.number, 10);
293
+ branchRows.push(row.number);
294
+ // Add Data Rows
295
+ reports.forEach(row => {
296
+ const rowData = this.columnDefs.map(col => {
297
+ let value = row[col.field];
298
+ // Format currency fields
299
+ if (currencyFields.includes(col.field) && value != null) {
300
+ value = parseFloat(value).toFixed(3);
301
+ }
302
+ if (!isNaN(value) && value !== null && value !== '') {
303
+ return `\t ${value}`;
304
+ }
305
+ return value ?? '';
306
+ });
307
+ const dataRow = worksheet.addRow(rowData);
308
+ dataRow.border = {
309
+ top: { style: 'thin' }, bottom: { style: 'thin' },
310
+ left: { style: 'thin' }, right: { style: 'thin' }
311
+ };
312
+ });
313
+ worksheet.addRow([]);
314
+ }
315
+ // Auto column width ONLY based on data rows
316
+ for (let i = 1; i <= totalColumns; i++) {
317
+ let maxLength = 10;
318
+ for (let rowNum = dataStartRow; rowNum <= worksheet.lastRow.number; rowNum++) {
319
+ if (branchRows.indexOf(x => x === rowNum) === -1) {
320
+ continue;
321
+ }
322
+ const cell = worksheet.getRow(rowNum).getCell(i);
323
+ const val = cell.value ? cell.value.toString() : '';
324
+ maxLength = Math.max(maxLength, val.length);
325
+ }
326
+ worksheet.getColumn(i).width = maxLength + 2;
327
+ }
328
+ worksheet.getColumn(2).width = 20;
329
+ worksheet.getColumn(3).width = 15;
330
+ // Export
331
+ workbook.xlsx.writeBuffer().then(buffer => {
332
+ const blob = new Blob([buffer], {
333
+ type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
334
+ });
335
+ FileSaver.saveAs(blob, 'Branch-Activity-Send-Report.xlsx');
336
+ });
337
+ }
338
+ exportCSV(data) {
339
+ const currencyFields = ['payoutAmount', 'payinAmount', 'totalPayinAmount', 'tax', 'transactionCommissionAmount'];
340
+ const metadata = [
341
+ ['Report Title', 'Branch Activity Send'],
342
+ ['Report Time', this.reportDate]
343
+ // ['Report User', this.user]
344
+ ];
345
+ const filteredCols = this.columnDefs.filter(col => !(col.headerName?.toLowerCase().includes('sr. no') ||
346
+ col.field?.toLowerCase().includes('sr. no')));
347
+ const headers = ['Sr No', ...filteredCols.map(col => col.headerName || col.field)];
348
+ let Rows = [];
349
+ for (const [key, reports] of Object.entries(this.dataMap)) {
350
+ Rows.push([key]);
351
+ reports.map((row, index) => {
352
+ const rowVals = filteredCols.map(col => {
353
+ let v = row[col.field];
354
+ if (currencyFields.includes(col.field) && v != null) {
355
+ v = parseFloat(v).toFixed(3);
356
+ }
357
+ if (col.field === 'transactionNumber' || col.headerName === 'Transaction Number') {
358
+ return `\t ${v}`;
359
+ }
360
+ return v ?? '';
361
+ });
362
+ Rows.push([index + 1, ...rowVals]);
363
+ return [index + 1, ...rowVals];
364
+ });
365
+ }
366
+ const aoa = [
367
+ ...metadata,
368
+ [],
369
+ headers,
370
+ ...Rows
371
+ ];
372
+ // convert to worksheet & CSV
373
+ const ws = XLSX.utils.aoa_to_sheet(aoa);
374
+ const csv = XLSX.utils.sheet_to_csv(ws, {
375
+ FS: ',', RS: '\n', blankrows: false, forceQuotes: false
376
+ });
377
+ // trigger download
378
+ const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
379
+ saveAs(blob, 'Branch-Activity-Send-Report.csv');
380
+ }
381
+ formatDate(params) {
382
+ return formatDate(new Date(params.value), 'dd/MM/yyyy', 'en-US');
383
+ }
384
+ filter(text) {
385
+ this.searchText = text;
386
+ if (this.searchText == null) {
387
+ return;
388
+ }
389
+ if (this.searchText?.trim().length === 0) {
390
+ this.filteredData = structuredClone(this.dataMap);
391
+ return;
392
+ }
393
+ this.searchText = this.searchText?.trim()?.toLowerCase();
394
+ for (const [key, entries] of Object.entries(this.dataMap)) {
395
+ const filteredData = entries.filter(entry => Object.values(entry)
396
+ .some(val => {
397
+ let a = val.toString().toLowerCase();
398
+ return a.search(this.searchText) == -1 ? false : true;
399
+ }));
400
+ this.filteredData[key] = filteredData;
401
+ }
402
+ this.filteredData;
403
+ }
404
+ //event handler for filter component
405
+ handleSearch(criteria) {
406
+ this.reportDate = new Date().toISOString();
407
+ this.reportDate = formatDate(this.reportDate, 'dd/MM/yyyy hh:mm a', 'en-US');
408
+ const modal = criteria.modal;
409
+ this.user = criteria.sysUserID;
410
+ console.log(modal);
411
+ // Code For Meta Data
412
+ this.metaDataOne = {
413
+ 'Report User': this.user,
414
+ 'Report Time': this.reportDate
415
+ };
416
+ const searchData = {
417
+ "StartDate": modal.fromDate,
418
+ "EndDate": modal.toDate,
419
+ "SendCountryCode": modal.sendCountry,
420
+ "RecvCountryCode": modal.receiveCountry,
421
+ "BusinessPartnerCode": modal.client,
422
+ "TransactionStatus": modal.transactionStatus.join(","),
423
+ "PayoutCurrency": "ALL",
424
+ "TransactionType": "ALL",
425
+ "BranchCode": modal.branch,
426
+ "CompanyCode": "BH"
427
+ };
428
+ try {
429
+ const sdate = new Date(searchData?.StartDate);
430
+ const edate = new Date(searchData?.EndDate);
431
+ searchData.StartDate = sdate.toISOString().split("T")[0];
432
+ searchData.EndDate = edate.toISOString().split("T")[0];
433
+ }
434
+ catch (err) {
435
+ throw new Error("Invalid Date");
436
+ }
437
+ this.loadingState = ComponentLoadingStates.Loading;
438
+ this.reportService.getBranchActivityReceiveReport(searchData).subscribe({
439
+ next: (data) => {
440
+ console.log(data);
441
+ this.filteredData = data;
442
+ this.dataMap = JSON.parse(JSON.stringify(data));
443
+ ;
444
+ this.noDataFound = Object.keys(data).length == 0 ? true : false;
445
+ this.paginationArray = new Array(Object.keys(this.filteredData).length).fill(15);
446
+ },
447
+ error: (err) => {
448
+ this.loadingState = ComponentLoadingStates.Complete;
449
+ },
450
+ complete: () => {
451
+ this.loadingState = ComponentLoadingStates.Complete;
452
+ this.showReport = true;
453
+ }
454
+ });
455
+ }
456
+ }
457
+ BranchActivityReceiveReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BranchActivityReceiveReportComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
458
+ BranchActivityReceiveReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BranchActivityReceiveReportComponent, selector: "lib-branch-activity-receive-report", ngImport: i0, template: "<lib-search-filter \r\n [ReportName]=\"ReportName\" \r\n (searchClicked)=\"handleSearch($event)\">\r\n</lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2 mx-1\">\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"false\" [metaDataOne]=\"metaDataOne\" [metaDataTwo]=\"\"(exportEvent)=\"handleExport($event)\" (searchEvent)=\"filter($event)\"></lib-metadata>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"item?.value?.length\"\r\n [defaultSize]=\"'15'\" [gridApi]=\"gridApis[i]\">\r\n ></lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event,i)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n\r\n</section>\r\n", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden}\n"], dependencies: [{ kind: "component", type: i1.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "component", type: i4.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i5.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i5.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i5.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i5.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i6.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i7.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked"] }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }] });
459
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BranchActivityReceiveReportComponent, decorators: [{
460
+ type: Component,
461
+ args: [{ selector: 'lib-branch-activity-receive-report', template: "<lib-search-filter \r\n [ReportName]=\"ReportName\" \r\n (searchClicked)=\"handleSearch($event)\">\r\n</lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2 mx-1\">\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"false\" [metaDataOne]=\"metaDataOne\" [metaDataTwo]=\"\"(exportEvent)=\"handleExport($event)\" (searchEvent)=\"filter($event)\"></lib-metadata>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"item?.value?.length\"\r\n [defaultSize]=\"'15'\" [gridApi]=\"gridApis[i]\">\r\n ></lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event,i)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n\r\n</section>\r\n", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden}\n"] }]
462
+ }], ctorParameters: function () { return []; } });
463
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmNoLWFjdGl2aXR5LXJlY2VpdmUtcmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmFuY2gtYWN0aXZpdHktcmVjZWl2ZS1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXJlY2VpdmUtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmFuY2gtYWN0aXZpdHktcmVjZWl2ZS1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXJlY2VpdmUtcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUV4QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBT3pCLE1BQU0sT0FBTyxvQ0FBb0M7SUE4Qy9DO1FBN0NBLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixZQUFPLEdBQXVELEVBQUUsQ0FBQTtRQUNoRSxpQkFBWSxHQUF1RCxFQUFFLENBQUE7UUFDckUsU0FB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fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29sRGVmLCBHcmlkQXBpLCBHcmlkUmVhZHlFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50LWxvYWRpbmctc3RhdGVzJztcclxuaW1wb3J0IHsgQnJhbmNoQWN0aXZpdHlSZWNlaXZlUmVwb3J0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvYnJhbmNoLWFjdGl2aXR5LXJlY2VpdmUtcmVwb3J0L2JyYW5jaC1hY3Rpdml0eS1yZWNlaXZlLm1vZGVsJztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgdGhlbWVBbHBpbmUgfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvdGhlbWluZyc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWJyYW5jaC1hY3Rpdml0eS1yZWNlaXZlLXJlcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2JyYW5jaC1hY3Rpdml0eS1yZWNlaXZlLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYnJhbmNoLWFjdGl2aXR5LXJlY2VpdmUtcmVwb3J0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJyYW5jaEFjdGl2aXR5UmVjZWl2ZVJlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZGF0YTogYW55ID0gW107XHJcbiAgZGF0YU1hcDogUmVjb3JkPHN0cmluZywgQnJhbmNoQWN0aXZpdHlSZWNlaXZlUmVwb3J0TW9kZWxbXT4gPSB7fVxyXG4gIGZpbHRlcmVkRGF0YTogUmVjb3JkPHN0cmluZywgQnJhbmNoQWN0aXZpdHlSZWNlaXZlUmVwb3J0TW9kZWxbXT4gPSB7fVxyXG4gIHVzZXI6IHN0cmluZyA9IFwia2F1c2hpay5rdWxzYW5nZUB4cHJlc3Ntb25leS50ZWNoXCI7XHJcbiAgUmVwb3J0TmFtZSA9IFwiQnJhbmNoIEFjdGl2aXR5IFJlY2VpdmVcIlxyXG4gIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2VydmljZSk7XHJcbiAgcmVwb3J0RGF0ZTogc3RyaW5nO1xyXG4gIG1ldGFEYXRhT25lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XHJcbiAgbG9hZGluZ1N0YXRlOiBDb21wb25lbnRMb2FkaW5nU3RhdGVzID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICBwYWdpbmF0aW9uQXJyYXk6IGFueVtdO1xyXG4gIHNlbGVjdGVkRXhwb3J0T3B0aW9uOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBsb2dvQmFzZTY0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGdyaWRBcGlzOiBHcmlkQXBpW10gPSBbXTtcclxuXHJcbiAgc2hvd1JlcG9ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG5vRGF0YUZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbHVtbkRlZnM6IENvbERlZjxCcmFuY2hBY3Rpdml0eVJlY2VpdmVSZXBvcnRNb2RlbD5bXSA9IFtcclxuICAgIHsgZmllbGQ6ICdidXNpbmVzc0RhdGVUaW1lJywgaGVhZGVyTmFtZTogJ0J1c2luZXNzIERhdGUnLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDcwLCB3aWR0aDogNzAsIHRvb2x0aXBGaWVsZDogJ2J1c2luZXNzRGF0ZVRpbWUnIH0sXHJcbiAgICB7IGZpZWxkOiAndHJhbnNhY3Rpb25EYXRlQW5kVGltZScsIGhlYWRlck5hbWU6ICdSZWNlaXZlIERhdGUnLCBmbGV4OiAyLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgd3JhcFRleHQ6IHRydWUsIGF1dG9IZWlnaHQ6IHRydWUsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZUFuZFRpbWUnIH0sXHJcbiAgICB7IGZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInLCBoZWFkZXJOYW1lOiAnVHJhbnNhY3Rpb24gTnVtYmVyJywgZmxleDogMS44LCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgd2lkdGg6IDEzMCwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsLXRyYW5zYWN0aW9uJywgdG9vbHRpcEZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInIH0sXHJcbiAgICB7IGZpZWxkOiAncHJvZHVjdCcsIGhlYWRlck5hbWU6ICdQcm9kdWN0JywgZmxleDogMC41LCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgbWluV2lkdGg6IDUwLCB3aWR0aDogNjAsIHRvb2x0aXBGaWVsZDogJ3Byb2R1Y3QnIH0sXHJcbiAgICB7IGZpZWxkOiAnc2VuZGVyTmFtZScsIGhlYWRlck5hbWU6ICdTZW5kZXIgTmFtZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCB3aWR0aDogMTMwLCB0b29sdGlwRmllbGQ6ICdzZW5kZXJOYW1lJyB9LFxyXG4gICAgeyBmaWVsZDogJ3NlbmRBZ2VudENvZGUnLCBoZWFkZXJOYW1lOiAnU2VuZCBDbGllbnRDb2RlJywgZmxleDogMSwgaGVhZGVyQ2xhc3M6ICdhZy1oZWFkZXItY2VsbCcsIG1pbldpZHRoOiA3MCwgd2lkdGg6IDcwLCB0b29sdGlwRmllbGQ6ICdzZW5kQWdlbnRDb2RlJyB9LFxyXG4gICAgeyBmaWVsZDogJ3JlY2VpdmVyTmFtZScsIGhlYWRlck5hbWU6ICdSZWNlaXZlciBOYW1lJywgZmxleDogMSwgaGVhZGVyQ2xhc3M6ICdhZy1oZWFkZXItY2VsbCcsIHdpZHRoOiAxMzAsIHRvb2x0aXBGaWVsZDogJ3JlY2VpdmVyTmFtZScgfSxcclxuICAgIHsgZmllbGQ6ICdyZWNlaXZlQWdlbnRCcmFuY2hDb2RlJywgaGVhZGVyTmFtZTogJ1JlY2VpdmVDbGllbnQgQnJhbmNoQ29kZScsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBmbGV4OiAxLCBtYXhXaWR0aDogMTIwLCB0b29sdGlwRmllbGQ6ICdyZWNlaXZlQWdlbnRCcmFuY2hDb2RlJyB9LFxyXG4gICAgeyBmaWVsZDogJ3BheU91dEN1cnJlbmN5JywgaGVhZGVyTmFtZTogJ1JlY2VpdmUgQ2N5Q29kZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCBtYXhXaWR0aDogOTAsIHRvb2x0aXBGaWVsZDogJ3BheU91dEN1cnJlbmN5JyB9LFxyXG4gICAgeyBmaWVsZDogJ2Ftb3VudFBhaWQnLCBoZWFkZXJOYW1lOiAnQW1vdW50IFBhaWQnLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWhlYWRlci1jZWxsJywgd2lkdGg6IDEwMCwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ2Ftb3VudFBhaWQnIH0sXHJcbiAgICB7IGZpZWxkOiAnc3RhdHVzJywgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIFN0YXR1cycsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctaGVhZGVyLWNlbGwnLCB0b29sdGlwRmllbGQ6ICdzdGF0dXMnIH1cclxuICBdO1xyXG5cclxuICBkZWZhdWx0Q29sRGVmID0ge1xyXG4gICAgc29ydGFibGU6IHRydWUsXHJcbiAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgbWlud2lkdGg6IDQwLFxyXG4gICAgd3JhcEhlYWRlclRleHQ6IHRydWUsXHJcbiAgICBhdXRvSGVhZGVySGVpZ2h0OiB0cnVlLFxyXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IGZhbHNlLFxyXG4gICAgd3JhcFRleHQ6IHRydWVcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZEltYWdlQXNCYXNlNjQoJy9hc3NldHMvcmVwb3J0cy1saWIvYXNzZXRzL2ltYWdlcy9YTUxvZ28ucG5nJykudGhlbihiYXNlNjQgPT4ge1xyXG4gICAgICB0aGlzLmxvZ29CYXNlNjQgPSBiYXNlNjQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQsIGlkOiBudW1iZXIpIHtcclxuICAgIHBhcmFtcy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgdGhpcy5ncmlkQXBpc1tpZF0gPSBwYXJhbXMuYXBpO1xyXG4gIH1cclxuXHJcbiAgb25HcmlkU2l6ZUNoYW5nZWQocGFyYW1zOiBhbnkpIHtcclxuICAgIHBhcmFtcy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ3VycmVuY3kgRm9ybWF0dGVyXHJcbiAgY3VycmVuY3lGb3JtYXR0ZXIocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHBhcmFtcy52YWx1ZSA9PSBudWxsIHx8IHBhcmFtcy52YWx1ZSA9PT0gJycpIHJldHVybiAnJztcclxuICAgIGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQocGFyYW1zLnZhbHVlKTtcclxuICAgIGlmIChpc05hTihudW1iZXIpKSByZXR1cm4gcGFyYW1zLnZhbHVlO1xyXG4gICAgcmV0dXJuIG51bWJlci50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMyxcclxuICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV4cG9ydChvcHRpb246IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiA9IG9wdGlvbjtcclxuICAgIGNvbnN0IGRhdGE6IGFueVtdID0gW107XHJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZERhdGEpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbikge1xyXG4gICAgICBjYXNlICdleGNlbCc6XHJcbiAgICAgICAgdGhpcy5leHBvcnRFeGNlbChkYXRhKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncGRmJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFBERihkYXRhKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3N2JzpcclxuICAgICAgICB0aGlzLmV4cG9ydENTVihkYXRhKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBhbGVydCgnUGxlYXNlIHNlbGVjdCBhbiBleHBvcnQgZm9ybWF0LicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFV0aWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBsb2FkSW1hZ2VBc0Jhc2U2NChpbWFnZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgIGltZy5zcmMgPSBpbWFnZVBhdGg7XHJcblxyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIFNjYWxlIHVwIGNhbnZhcyByZXNvbHV0aW9uICgyeCBvciBtb3JlKVxyXG4gICAgICAgIGNvbnN0IHNjYWxlID0gMjtcclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiBzY2FsZTtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodCAqIHNjYWxlO1xyXG5cclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICBjdHguc2NhbGUoc2NhbGUsIHNjYWxlKTsgLy8gRHJhdyBpbWFnZSBhdCBoaWdoZXIgcXVhbGl0eVxyXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgICAgY29uc3QgYmFzZTY0ID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJywgMS4wKTsgLy8gMS4wID0gaGlnaGVzdCBxdWFsaXR5XHJcbiAgICAgICAgICByZXNvbHZlKGJhc2U2NCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdCgnRmFpbGVkIHRvIGdldCBjYW52YXMgY29udGV4dC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpbWcub25lcnJvciA9ICgpID0+IHJlamVjdCgnRmFpbGVkIHRvIGxvYWQgaW1hZ2U6ICcgKyBpbWFnZVBhdGgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRQREYoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsncGF5b3V0QW1vdW50JywgJ3BheWluQW1vdW50JywgJ3RvdGFsUGF5aW5BbW91bnQnLCAndGF4JywgJ3RyYW5zYWN0aW9uQ29tbWlzc2lvbkFtb3VudCddO1xyXG4gICAgZGF0YSA9IE9iamVjdC52YWx1ZXModGhpcy5kYXRhTWFwKVswXTtcclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7XHJcbiAgICAgIG9yaWVudGF0aW9uOiAnbGFuZHNjYXBlJyxcclxuICAgICAgdW5pdDogJ21tJyxcclxuICAgICAgZm9ybWF0OiBbNDAwLCAyMTBdXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGg7XHJcblxyXG4gICAgLy9UaXRsZVxyXG4gICAgY29uc3QgdGl0bGUgPSBgQnJhbmNoIEFjdGl2aXR5IFNlbmRgO1xyXG4gICAgZG9jLnNldEZvbnRTaXplKDE1KTtcclxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgY29uc3QgdGV4dFdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0aXRsZSk7XHJcbiAgICBkb2MudGV4dCh0aXRsZSwgZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoIC8gMiwgMTUsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xyXG5cclxuICAgIC8vQWRkIEltYWdlXHJcbiAgICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICAgIGRvYy5hZGRJbWFnZSh0aGlzLmxvZ29CYXNlNjQsICdQTkcnLCAxNSwgNSwgMjUsIDIwKTtcclxuICAgIH1cclxuXHJcbiAgICAvL0luZm8gYmxvY2tcclxuICAgIGNvbnN0IGluZm9ZID0gMzA7XHJcbiAgICBjb25zdCBsZWZ0TWFyZ2luID0gMTU7XHJcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gNztcclxuICAgIGNvbnN0IGluZm9MaW5lcyA9IFtcclxuICAgICAgWydSZXBvcnQgVXNlciBBbmQgVGltZTonLCB0aGlzLnVzZXJdLFxyXG4gICAgICBbJ1JlcG9ydCBUaW1lJywgdGhpcy5yZXBvcnREYXRlXVxyXG4gICAgICAvLyBbJ1JlcG9ydCBQZXJpb2Q6JywgYCR7dGhpcy5mcm9tRGF0ZX0gLSAke3RoaXMudG9EYXRlfWBdXHJcbiAgICBdXHJcblxyXG4gICAgZG9jLnNldEZvbnRTaXplKDEwKTtcclxuICAgIGluZm9MaW5lcy5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSwgaSkgPT4ge1xyXG4gICAgICBjb25zdCB5ID0gaW5mb1kgKyBpICogbGluZUhlaWdodDtcclxuICAgICAgLy8gRHJhdyBsYWJlbCBpbiBib2xkXHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChsYWJlbCwgbGVmdE1hcmdpbiwgeSk7XHJcblxyXG4gICAgICAvLyBEcmF3IHZhbHVlIGluIG5vcm1hbCBmb250IHJpZ2h0IGFmdGVyIGxhYmVsXHJcbiAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGxhYmVsICsgJyAnKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgZG9jLnRleHQodmFsdWUsIGxlZnRNYXJnaW4gKyBsYWJlbFdpZHRoLCB5KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29sdW1uRGVmcy5maWx0ZXIoY29sID0+XHJcbiAgICAgICEoY29sLmhlYWRlck5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NyLiBubycpIHx8IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnc3JubycpIHx8IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnc2VyaWFsJykpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFByZXBhcmUgaGVhZGVycyB3aXRoIFNyIE5vXHJcbiAgICBjb25zdCBoZWFkZXJzID0gWydTciBObycsIC4uLmZpbHRlcmVkQ29sdW1ucy5tYXAoY29sID0+IGNvbC5oZWFkZXJOYW1lIHx8IGNvbC5maWVsZCEpXTtcclxuXHJcbiAgICBsZXQgUm93czogYW55W10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHJlcG9ydHNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YU1hcCkpIHtcclxuICAgICAgUm93cy5wdXNoKFt7IGNvbnRlbnQ6IGtleSwgY29sU3BhbjogMTUgfV0pO1xyXG4gICAgICBjb25zdCByb3dzID0gcmVwb3J0cy5tYXAoKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCByb3dEYXRhID0gZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gcm93W2NvbC5maWVsZCFdO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgJiYgdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUm93cy5wdXNoKFtpbmRleCArIDEsIC4uLnJvd0RhdGFdKTtcclxuICAgICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93RGF0YV07XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBSb3dzLnB1c2gocm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHJlcGFyZSByb3dzIHdpdGggU3IgTm9cclxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLm1hcCgocm93LCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCByb3dEYXRhID0gZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHJvd1tjb2wuZmllbGQhXTtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93RGF0YV07XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBkeW5hbWljIGNvbHVtbiBzdHlsZXMgZm9yIGF1dG8td2lkdGhcclxuICAgIGNvbnN0IGNvbHVtblN0eWxlczogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IHt9O1xyXG4gICAgaGVhZGVycy5mb3JFYWNoKChfLCBpKSA9PiB7XHJcbiAgICAgIGNvbHVtblN0eWxlc1tpXSA9IHsgY2VsbFdpZHRoOiAnYXV0bycgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbHVtblN0eWxlc1syXSA9IHsgY2VsbFdpZHRoOiA0MCB9O1xyXG5cclxuICAgIC8vIFJlbmRlciBUYWJsZVxyXG4gICAgZG9jLmF1dG9UYWJsZSh7XHJcbiAgICAgIGhlYWQ6IFtoZWFkZXJzXSxcclxuICAgICAgYm9keTogUm93cyxcclxuICAgICAgc3RhcnRZOiBpbmZvWSArIGluZm9MaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0ICsgNSxcclxuICAgICAgdGhlbWU6ICdncmlkJyxcclxuICAgICAgaGVhZFN0eWxlczoge1xyXG4gICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxyXG4gICAgICAgIHRleHRDb2xvcjogMCxcclxuICAgICAgICBmb250U3R5bGU6ICdib2xkJyxcclxuICAgICAgICBmb250U2l6ZTogOSxcclxuICAgICAgICBoYWxpZ246ICdjZW50ZXInXHJcbiAgICAgIH0sXHJcbiAgICAgIGJkeVN0eWxlczoge1xyXG4gICAgICAgIGZvbnRTaXplOiA4LFxyXG4gICAgICAgIGZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTVdLFxyXG4gICAgICAgIHRleHRDb2xvcjogWzAsIDAsIDBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0eWxlczoge1xyXG4gICAgICAgIGNlbGxQYWRkaW5nOiAyLFxyXG4gICAgICAgIG92ZXJmbG93OiAnbGluZWJyZWFrJyxcclxuICAgICAgICBtaW5DZWxsSGVpZ2h0OiA2XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtblN0eWxlczogY29sdW1uU3R5bGVzXHJcbiAgICB9KTtcclxuICAgIGRvYy5zYXZlKFwiQnJhbmNoLUFjdGl2aXR5LVNlbmQtUmVwb3J0LnBkZlwiKVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0RXhjZWwoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsncGF5b3V0QW1vdW50JywgJ3BheWluQW1vdW50JywgJ3RvdGFsUGF5aW5BbW91bnQnLCAndGF4JywgJ3RyYW5zYWN0aW9uQ29tbWlzc2lvbkFtb3VudCddO1xyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xyXG4gICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdCcmFuY2gtQWN0aXZpdHktU2VuZC1SZXBvcnQnKTtcclxuICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IHRoaXMuY29sdW1uRGVmcy5sZW5ndGg7XHJcblxyXG4gICAgLy8gVGl0bGUgUm93XHJcbiAgICBjb25zdCB0aXRsZVJvdyA9IHdvcmtzaGVldC5hZGRSb3coW1wiQnJhbmNoIEFjdGl2aXR5IFNlbmRcIl0pO1xyXG4gICAgdGl0bGVSb3cuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTQgfTtcclxuICAgIHRpdGxlUm93LmhlaWdodCA9IDYwO1xyXG4gICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEEke3RpdGxlUm93Lm51bWJlcn06JHtTdHJpbmcuZnJvbUNoYXJDb2RlKDY0ICsgdG90YWxDb2x1bW5zKX0ke3RpdGxlUm93Lm51bWJlcn1gKTtcclxuICAgIC8vQ2VudGVyIGFsaWduIHRoZSB0aXRsZVxyXG4gICAgY29uc3QgbWFzdGVyQ2VsbCA9IHdvcmtzaGVldC5nZXRDZWxsKGBBJHt0aXRsZVJvdy5udW1iZXJ9YCk7XHJcbiAgICBtYXN0ZXJDZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2NlbnRlcicsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG5cclxuICAgIC8vIEFkZCBpbWFnZSBpZiBhdmFpbGFibGVcclxuICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IHRoaXMubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcclxuICAgICAgY29uc3QgaW1hZ2VJZCA9IHdvcmtib29rLmFkZEltYWdlKHtcclxuICAgICAgICBiYXNlNjQ6IGJhc2U2NERhdGEsXHJcbiAgICAgICAgZXh0ZW5zaW9uOiAncG5nJyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBQbGFjZSBpbWFnZSBhdCB0b3AtbGVmdCAoZS5nLiwgQTE6QzQpXHJcbiAgICAgIHdvcmtzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XHJcbiAgICAgICAgdGw6IHsgY29sOiAwLCByb3c6IDAgfSxcclxuICAgICAgICBleHQ6IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiA1MCB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL01ldGEgRGF0YVxyXG4gICAgY29uc3QgbWV0YTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICBbJ1JlcG9ydCBVc2VyICcsIHRoaXMudXNlcl0sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWUnLCB0aGlzLnJlcG9ydERhdGVdXHJcbiAgICAgIC8vIFsnUmVwb3J0IFBlcmlvZCcsIGAke3RoaXMuZnJvbURhdGV9IC0gJHt0aGlzLnRvRGF0ZX1gXVxyXG4gICAgXVxyXG5cclxuICAgIG1ldGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0pID0+IHtcclxuICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmFkZFJvdyhbbGFiZWwsIHZhbHVlXSk7XHJcbiAgICAgIC8vQm9sZCB0aGUga2V5IGNvbHVtblxyXG4gICAgICBjb25zdCBsYWJlbENlbGwgPSByb3cuZ2V0Q2VsbCgxKTtcclxuICAgICAgbGFiZWxDZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgIH0pXHJcbiAgICAvLyBGb3IgRW1wdHkgUm93XHJcbiAgICB3b3Jrc2hlZXQuYWRkUm93KFtdKTtcclxuXHJcbiAgICAvLyBBZGQgSGVhZGVyIFJvdyBmb3IgRGF0YSBUYWJsZVxyXG4gICAgY29uc3QgaGVhZGVyUm93ID0gd29ya3NoZWV0LmFkZFJvdyh0aGlzLmNvbHVtbkRlZnMubWFwKGNvbCA9PiBjb2wuaGVhZGVyTmFtZSB8fCBjb2wuZmllbGQpKTtcclxuICAgIGhlYWRlclJvdy5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmNvbHVtbkRlZnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY2VsbCA9IGhlYWRlclJvdy5nZXRDZWxsKGkpO1xyXG4gICAgICBjZWxsLmZpbGwgPSB7XHJcbiAgICAgICAgdHlwZTogJ3BhdHRlcm4nLFxyXG4gICAgICAgIHBhdHRlcm46ICdzb2xpZCcsXHJcbiAgICAgICAgZmdDb2xvcjogeyBhcmdiOiAnRDlEOUQ5JyB9LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGhlYWRlclJvdy5hbGlnbm1lbnQgPSB7XHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlLFxyXG4gICAgICB2ZXJ0aWNhbDogJ3RvcCcsXHJcbiAgICAgIGhvcml6b250YWw6ICdjZW50ZXInXHJcbiAgICB9O1xyXG4gICAgaGVhZGVyUm93LmJvcmRlciA9IHtcclxuICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBkYXRhU3RhcnRSb3cgPSB3b3Jrc2hlZXQubGFzdFJvdyEubnVtYmVyICsgMTtcclxuICAgIGNvbnN0IGJyYW5jaFJvd3MgPSBbXTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgcmVwb3J0c10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5kYXRhTWFwKSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnS2V5OicsIGtleSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdSZXBvcnRzOicsIHJlcG9ydHMpO1xyXG4gICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuYWRkUm93KFtgJHtrZXl9YF0pO1xyXG4gICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhyb3cubnVtYmVyLCAxLCByb3cubnVtYmVyLCAxMCk7XHJcbiAgICAgIGJyYW5jaFJvd3MucHVzaChyb3cubnVtYmVyKTtcclxuICAgICAgLy8gQWRkIERhdGEgUm93c1xyXG4gICAgICByZXBvcnRzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5jb2x1bW5EZWZzLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gcm93W2NvbC5maWVsZCFdO1xyXG4gICAgICAgICAgLy8gRm9ybWF0IGN1cnJlbmN5IGZpZWxkc1xyXG4gICAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgJiYgdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGBcXHQgJHt2YWx1ZX1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8/ICcnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgZGF0YVJvdyA9IHdvcmtzaGVldC5hZGRSb3cocm93RGF0YSk7XHJcbiAgICAgICAgZGF0YVJvdy5ib3JkZXIgPSB7XHJcbiAgICAgICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICB3b3Jrc2hlZXQuYWRkUm93KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBdXRvIGNvbHVtbiB3aWR0aCBPTkxZIGJhc2VkIG9uIGRhdGEgcm93c1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdG90YWxDb2x1bW5zOyBpKyspIHtcclxuICAgICAgbGV0IG1heExlbmd0aCA9IDEwO1xyXG4gICAgICBmb3IgKGxldCByb3dOdW0gPSBkYXRhU3RhcnRSb3c7IHJvd051bSA8PSB3b3Jrc2hlZXQubGFzdFJvdyEubnVtYmVyOyByb3dOdW0rKykge1xyXG4gICAgICAgIGlmIChicmFuY2hSb3dzLmluZGV4T2YoeCA9PiB4ID09PSByb3dOdW0pID09PSAtMSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNlbGwgPSB3b3Jrc2hlZXQuZ2V0Um93KHJvd051bSkuZ2V0Q2VsbChpKTtcclxuICAgICAgICBjb25zdCB2YWwgPSBjZWxsLnZhbHVlID8gY2VsbC52YWx1ZS50b1N0cmluZygpIDogJyc7XHJcbiAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5tYXgobWF4TGVuZ3RoLCB2YWwubGVuZ3RoKTtcclxuICAgICAgfVxyXG4gICAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKGkpLndpZHRoID0gbWF4TGVuZ3RoICsgMjtcclxuICAgIH1cclxuICAgIHdvcmtzaGVldC5nZXRDb2x1bW4oMikud2lkdGggPSAyMDtcclxuICAgIHdvcmtzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSAxNTtcclxuICAgIC8vIEV4cG9ydFxyXG4gICAgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpLnRoZW4oYnVmZmVyID0+IHtcclxuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XHJcbiAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0J1xyXG4gICAgICB9KVxyXG4gICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsICdCcmFuY2gtQWN0aXZpdHktU2VuZC1SZXBvcnQueGxzeCcpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGV4cG9ydENTVihkYXRhOiBhbnlbXSkge1xyXG4gICAgY29uc3QgY3VycmVuY3lGaWVsZHMgPSBbJ3BheW91dEFtb3VudCcsICdwYXlpbkFtb3VudCcsICd0b3RhbFBheWluQW1vdW50JywgJ3RheCcsICd0cmFuc2FjdGlvbkNvbW1pc3Npb25BbW91bnQnXTtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0gW1xyXG4gICAgICBbJ1JlcG9ydCBUaXRsZScsICdCcmFuY2ggQWN0aXZpdHkgU2VuZCddLFxyXG4gICAgICBbJ1JlcG9ydCBUaW1lJywgdGhpcy5yZXBvcnREYXRlXVxyXG4gICAgICAvLyBbJ1JlcG9ydCBVc2VyJywgdGhpcy51c2VyXVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJlZENvbHMgPSB0aGlzLmNvbHVtbkRlZnMuZmlsdGVyKFxyXG4gICAgICBjb2wgPT5cclxuICAgICAgICAhKGNvbC5oZWFkZXJOYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzci4gbm8nKSB8fFxyXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzci4gbm8nKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5maWx0ZXJlZENvbHMubWFwKGNvbCA9PiBjb2wuaGVhZGVyTmFtZSB8fCBjb2wuZmllbGQhKV07XHJcblxyXG4gICAgbGV0IFJvd3M6IGFueVtdW10gPSBbXVxyXG4gICAgZm9yIChjb25zdCBba2V5LCByZXBvcnRzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmRhdGFNYXApKSB7XHJcbiAgICAgIFJvd3MucHVzaChba2V5XSk7XHJcbiAgICAgIHJlcG9ydHMubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm93VmFscyA9IGZpbHRlcmVkQ29scy5tYXAoY29sID0+IHtcclxuICAgICAgICAgIGxldCB2ID0gcm93W2NvbC5maWVsZCFdO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgJiYgdiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHYgPSBwYXJzZUZsb2F0KHYpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSAndHJhbnNhY3Rpb25OdW1iZXInIHx8IGNvbC5oZWFkZXJOYW1lID09PSAnVHJhbnNhY3Rpb24gTnVtYmVyJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYFxcdCAke3Z9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2ID8/ICcnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFJvd3MucHVzaChbaW5kZXggKyAxLCAuLi5yb3dWYWxzXSk7XHJcbiAgICAgICAgcmV0dXJuIFtpbmRleCArIDEsIC4uLnJvd1ZhbHNdO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFvYTogYW55W11bXSA9IFtcclxuICAgICAgLi4ubWV0YWRhdGEsXHJcbiAgICAgIFtdLCAgICAgIC8vIGJsYW5rIHJvdyBmb3Igc2VwYXJhdGlvblxyXG4gICAgICBoZWFkZXJzLFxyXG4gICAgICAuLi5Sb3dzXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIGNvbnZlcnQgdG8gd29ya3NoZWV0ICYgQ1NWXHJcbiAgICBjb25zdCB3cyA9IFhMU1gudXRpbHMuYW9hX3RvX3NoZWV0KGFvYSk7XHJcbiAgICBjb25zdCBjc3YgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2Nzdih3cywge1xyXG4gICAgICBGUzogJywnLCBSUzogJ1xcbicsIGJsYW5rcm93czogZmFsc2UsIGZvcmNlUXVvdGVzOiBmYWxzZVxyXG4gICAgfSBhcyBhbnkpO1xyXG5cclxuICAgIC8vIHRyaWdnZXIgZG93bmxvYWRcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xyXG4gICAgc2F2ZUFzKGJsb2IsICdCcmFuY2gtQWN0aXZpdHktU2VuZC1SZXBvcnQuY3N2Jyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGZvcm1hdERhdGUocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGZvcm1hdERhdGUobmV3IERhdGUocGFyYW1zLnZhbHVlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKTtcclxuICB9XHJcblxyXG4gIGZpbHRlcih0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRleHQ7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dD8udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmRhdGFNYXApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaFRleHQ/LnRyaW0oKT8udG9Mb3dlckNhc2UoKTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgZW50cmllc10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5kYXRhTWFwKSkge1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBlbnRyaWVzLmZpbHRlcihlbnRyeSA9PiBPYmplY3QudmFsdWVzKGVudHJ5KVxyXG4gICAgICAgIC5zb21lKHZhbCA9PiB7XHJcbiAgICAgICAgICBsZXQgYTogc3RyaW5nID0gdmFsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIHJldHVybiBhLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpID09IC0xID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIH0pKVxyXG5cclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGFba2V5XSA9IGZpbHRlcmVkRGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyZWREYXRhO1xyXG4gIH1cclxuXHJcbiAgLy9ldmVudCBoYW5kbGVyIGZvciBmaWx0ZXIgY29tcG9uZW50XHJcbiAgaGFuZGxlU2VhcmNoKGNyaXRlcmlhOiBhbnkpIHtcclxuICAgIHRoaXMucmVwb3J0RGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgIHRoaXMucmVwb3J0RGF0ZSA9IGZvcm1hdERhdGUodGhpcy5yZXBvcnREYXRlLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyk7XHJcbiAgICBjb25zdCBtb2RhbCA9IGNyaXRlcmlhLm1vZGFsO1xyXG4gICAgdGhpcy51c2VyID0gY3JpdGVyaWEuc3lzVXNlcklEO1xyXG4gICAgY29uc29sZS5sb2cobW9kYWwpO1xyXG4gICAgLy8gQ29kZSBGb3IgTWV0YSBEYXRhXHJcbiAgICB0aGlzLm1ldGFEYXRhT25lID0ge1xyXG4gICAgICAnUmVwb3J0IFVzZXInOiB0aGlzLnVzZXIsXHJcbiAgICAgICdSZXBvcnQgVGltZSc6IHRoaXMucmVwb3J0RGF0ZVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc2VhcmNoRGF0YSA9IHtcclxuICAgICAgXCJTdGFydERhdGVcIjogbW9kYWwuZnJvbURhdGUsXHJcbiAgICAgIFwiRW5kRGF0ZVwiOiBtb2RhbC50b0RhdGUsXHJcbiAgICAgIFwiU2VuZENvdW50cnlDb2RlXCI6IG1vZGFsLnNlbmRDb3VudHJ5LFxyXG4gICAgICBcIlJlY3ZDb3VudHJ5Q29kZVwiOiBtb2RhbC5yZWNlaXZlQ291bnRyeSxcclxuICAgICAgXCJCdXNpbmVzc1BhcnRuZXJDb2RlXCI6IG1vZGFsLmNsaWVudCxcclxuICAgICAgXCJUcmFuc2FjdGlvblN0YXR1c1wiOiBtb2RhbC50cmFuc2FjdGlvblN0YXR1cy5qb2luKFwiLFwiKSxcclxuICAgICAgXCJQYXlvdXRDdXJyZW5jeVwiOiBcIkFMTFwiLFxyXG4gICAgICBcIlRyYW5zYWN0aW9uVHlwZVwiOiBcIkFMTFwiLFxyXG4gICAgICBcIkJyYW5jaENvZGVcIjogbW9kYWwuYnJhbmNoLFxyXG4gICAgICBcIkNvbXBhbnlDb2RlXCI6IFwiQkhcIlxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzZGF0ZSA9IG5ldyBEYXRlKHNlYXJjaERhdGE/LlN0YXJ0RGF0ZSk7XHJcbiAgICAgIGNvbnN0IGVkYXRlID0gbmV3IERhdGUoc2VhcmNoRGF0YT8uRW5kRGF0ZSk7XHJcbiAgICAgIHNlYXJjaERhdGEuU3RhcnREYXRlID0gc2RhdGUudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XHJcbiAgICAgIHNlYXJjaERhdGEuRW5kRGF0ZSA9IGVkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xyXG4gICAgfSBjYXRjaChlcnIpe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIERhdGVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkxvYWRpbmc7XHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQWN0aXZpdHlSZWNlaXZlUmVwb3J0KHNlYXJjaERhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuZGF0YU1hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOztcclxuICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uQXJyYXkgPSBuZXcgQXJyYXkoT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZERhdGEpLmxlbmd0aCkuZmlsbCgxNSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gICAgICAgIHRoaXMuc2hvd1JlcG9ydCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8bGliLXNlYXJjaC1maWx0ZXIgXHJcbiAgICBbUmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgXHJcbiAgICAoc2VhcmNoQ2xpY2tlZCk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiPlxyXG48L2xpYi1zZWFyY2gtZmlsdGVyPlxyXG5cclxuPGFwcC1sb2FkZXIgY2xhc3M9XCJcIiAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuXHJcbjxzZWN0aW9uICpuZ0lmPVwic2hvd1JlcG9ydFwiIGNsYXNzPVwibXktMiBteC0xXCI+XHJcbiAgICA8bGliLW1ldGFkYXRhIFtyZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiBbc2hvd21ldGFEYXRhT25lXT1cInRydWVcIiBbc2hvd21ldGFEYXRhVHdvXT1cImZhbHNlXCIgW21ldGFEYXRhT25lXT1cIm1ldGFEYXRhT25lXCIgW21ldGFEYXRhVHdvXT1cIlwiKGV4cG9ydEV2ZW50KT1cImhhbmRsZUV4cG9ydCgkZXZlbnQpXCIgKHNlYXJjaEV2ZW50KT1cImZpbHRlcigkZXZlbnQpXCI+PC9saWItbWV0YWRhdGE+XHJcblxyXG4gICAgPG5nYi1hY2NvcmRpb24gI2FjYz1cIm5nYkFjY29yZGlvblwiIFtjbG9zZU90aGVyc109XCJmYWxzZVwiIFthY3RpdmVJZHNdPVwiJ3BhbmVsLTAnXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkRGF0YSB8IGtleXZhbHVlOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxuZ2ItcGFuZWwgKm5nSWY9XCJpdGVtLnZhbHVlLmxlbmd0aCA+IDBcIiBbaWRdPVwiJ3BhbmVsLScgKyBpXCI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbFRpdGxlIHN0eWxlPVwiaGVpZ2h0OiAxMCU7XCI+XHJcbiAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMS4yOyBtYXJnaW46IDA7IHBhZGRpbmc6IDJweCAwO2NvbG9yOiAjMGM2M2U0O1wiPnt7XHJcbiAgICAgICAgICAgIGl0ZW0ua2V5XHJcbiAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxDb250ZW50PlxyXG5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgIDxsaWItcGFnZS1zaXplLXNlbGVjdG9yIFt0b3RhbEVudHJpZXNdPVwiaXRlbT8udmFsdWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIFtkZWZhdWx0U2l6ZV09XCInMTUnXCIgW2dyaWRBcGldPVwiZ3JpZEFwaXNbaV1cIj5cclxuICAgICAgICAgICAgPjwvbGliLXBhZ2Utc2l6ZS1zZWxlY3Rvcj5cclxuXHJcbiAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAzNzBweDtcIlxyXG4gICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgW3Jvd0RhdGFdPVwiaXRlbS52YWx1ZVwiIFtyb3dIZWlnaHRdPVwiMjBcIlxyXG4gICAgICAgICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiMjJcIiBbZ3JpZE9wdGlvbnNdPVwie1xyXG4gICAgICAgICAgICAgIHN1cHByZXNzSG9yaXpvbnRhbFNjcm9sbDogdHJ1ZSxcclxuICAgICAgICAgICAgICBzY3JvbGxiYXJXaWR0aDogMFxyXG4gICAgICAgICAgICB9XCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvbkFycmF5W2ldXCIgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQsaSlcIlxyXG4gICAgICAgICAgICAgIChncmlkU2l6ZUNoYW5nZWQpPVwib25HcmlkU2l6ZUNoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2FnLWdyaWQtYW5ndWxhcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8L25nYi1wYW5lbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmdiLWFjY29yZGlvbj5cclxuIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIG10LTNcIiAqbmdJZj1cIm5vRGF0YUZvdW5kXCI+XHJcbiAgICBObyBEYXRhIEZvdW5kXHJcbiAgPC9kaXY+XHJcblxyXG48L3NlY3Rpb24+XHJcbiJdfQ==