ezlibrary_v2 0.0.1
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/esm2020/ezlibrary_v2.mjs +5 -0
- package/esm2020/lib/admin-service/admin-service.service.mjs +36 -0
- package/esm2020/lib/analysis-search/analysis-search.component.mjs +1083 -0
- package/esm2020/lib/assort-service/assort-service.service.mjs +31 -0
- package/esm2020/lib/attribute-definition/attribute-definition.component.mjs +231 -0
- package/esm2020/lib/auth/auth.guard.mjs +40 -0
- package/esm2020/lib/bi-service/bi.service.mjs +58 -0
- package/esm2020/lib/call-info/callinfo.component.mjs +126 -0
- package/esm2020/lib/comman-service/comman-service.service.mjs +679 -0
- package/esm2020/lib/comman-service/share-data-service.service.mjs +23 -0
- package/esm2020/lib/contact-search/contact-search.component.mjs +679 -0
- package/esm2020/lib/contact-service/contact-service.service.mjs +47 -0
- package/esm2020/lib/ezheader/header.component.mjs +383 -0
- package/esm2020/lib/ezlib.module.mjs +220 -0
- package/esm2020/lib/file-upload/fileupload.component.mjs +920 -0
- package/esm2020/lib/file-upload-log/file-upload-log.component.mjs +175 -0
- package/esm2020/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.mjs +14 -0
- package/esm2020/lib/fileupload-module/fileupload-routing.module.mjs +28 -0
- package/esm2020/lib/footer/footer.component.mjs +18 -0
- package/esm2020/lib/globle/common-pdf.service.mjs +28 -0
- package/esm2020/lib/globle/globle-env.service.mjs +45 -0
- package/esm2020/lib/globle/memo-report.service.mjs +2800 -0
- package/esm2020/lib/globle/pdf-service.service.mjs +18848 -0
- package/esm2020/lib/globle/shared-services.service.mjs +27 -0
- package/esm2020/lib/globle/upload-service.service.mjs +69 -0
- package/esm2020/lib/header/header.component.mjs +179 -0
- package/esm2020/lib/invalid/invalid.component.mjs +71 -0
- package/esm2020/lib/logout/logout.component.mjs +107 -0
- package/esm2020/lib/menu-right/menu-right.component.mjs +252 -0
- package/esm2020/lib/pipes/number-with-commas.pipe.mjs +24 -0
- package/esm2020/lib/pipes/order-by-pipe.pipe.mjs +17 -0
- package/esm2020/lib/pipes/selectedCount.mjs +19 -0
- package/esm2020/lib/pipes/sum.pipe.mjs +16 -0
- package/esm2020/lib/pkt-data/pkt-data.component.mjs +1107 -0
- package/esm2020/lib/pricing-service/pricing.service.mjs +58 -0
- package/esm2020/lib/qa-analysis/qa-analysis.component.mjs +1035 -0
- package/esm2020/lib/report-format/report-format.component.mjs +400 -0
- package/esm2020/lib/sessionend/session-end.guard.mjs +28 -0
- package/esm2020/lib/stock-service/lazyload.service.mjs +21 -0
- package/esm2020/lib/stock-service/stock-service.service.mjs +62 -0
- package/esm2020/lib/system-module/subform/subform.component.mjs +2481 -0
- package/esm2020/lib/system-module/system/system.component.mjs +959 -0
- package/esm2020/lib/system-module/system-service/system-service.service.mjs +85 -0
- package/esm2020/lib/system-module/system-service/upload-file.service.mjs +86 -0
- package/esm2020/lib/utility/app-no-dbl-click.directive.mjs +23 -0
- package/esm2020/lib/utility/constants.mjs +5 -0
- package/esm2020/lib/utility/contact-table-search.pipe.mjs +25 -0
- package/esm2020/lib/utility/formate-num-field.pipe.mjs +19 -0
- package/esm2020/lib/utility/search-pipe.pipe.mjs +26 -0
- package/esm2020/lib/utility/selective-preloading-strategy.mjs +23 -0
- package/esm2020/lib/utility/table-search.pipe.mjs +25 -0
- package/esm2020/lib/utility/tranform.directive.mjs +27 -0
- package/esm2020/lib/websearch-history/websearch-history.component.mjs +273 -0
- package/esm2020/public_api.mjs +57 -0
- package/ezlibrary_v2.d.ts +5 -0
- package/fesm2015/ezlibrary_v2.mjs +33543 -0
- package/fesm2015/ezlibrary_v2.mjs.map +1 -0
- package/fesm2020/ezlibrary_v2.mjs +33533 -0
- package/fesm2020/ezlibrary_v2.mjs.map +1 -0
- package/lib/admin-service/admin-service.service.d.ts +13 -0
- package/lib/analysis-search/analysis-search.component.d.ts +122 -0
- package/lib/assort-service/assort-service.service.d.ts +12 -0
- package/lib/attribute-definition/attribute-definition.component.d.ts +47 -0
- package/lib/auth/auth.guard.d.ts +16 -0
- package/lib/bi-service/bi.service.d.ts +20 -0
- package/lib/call-info/callinfo.component.d.ts +30 -0
- package/lib/comman-service/comman-service.service.d.ts +111 -0
- package/lib/comman-service/share-data-service.service.d.ts +10 -0
- package/lib/contact-search/contact-search.component.d.ts +115 -0
- package/lib/contact-service/contact-service.service.d.ts +15 -0
- package/lib/ezheader/header.component.d.ts +61 -0
- package/lib/ezlib.module.d.ts +47 -0
- package/lib/file-upload/fileupload.component.d.ts +131 -0
- package/lib/file-upload-log/file-upload-log.component.d.ts +53 -0
- package/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.d.ts +8 -0
- package/lib/fileupload-module/fileupload-routing.module.d.ts +7 -0
- package/lib/footer/footer.component.d.ts +9 -0
- package/lib/globle/common-pdf.service.d.ts +9 -0
- package/lib/globle/globle-env.service.d.ts +16 -0
- package/lib/globle/memo-report.service.d.ts +107 -0
- package/lib/globle/pdf-service.service.d.ts +459 -0
- package/lib/globle/shared-services.service.d.ts +12 -0
- package/lib/globle/upload-service.service.d.ts +20 -0
- package/lib/header/header.component.d.ts +45 -0
- package/lib/invalid/invalid.component.d.ts +12 -0
- package/lib/logout/logout.component.d.ts +21 -0
- package/lib/menu-right/menu-right.component.d.ts +47 -0
- package/lib/pipes/number-with-commas.pipe.d.ts +7 -0
- package/lib/pipes/order-by-pipe.pipe.d.ts +7 -0
- package/lib/pipes/selectedCount.d.ts +7 -0
- package/lib/pipes/sum.pipe.d.ts +7 -0
- package/lib/pkt-data/pkt-data.component.d.ts +189 -0
- package/lib/pricing-service/pricing.service.d.ts +20 -0
- package/lib/qa-analysis/qa-analysis.component.d.ts +99 -0
- package/lib/report-format/report-format.component.d.ts +74 -0
- package/lib/sessionend/session-end.guard.d.ts +10 -0
- package/lib/stock-service/lazyload.service.d.ts +7 -0
- package/lib/stock-service/stock-service.service.d.ts +19 -0
- package/lib/system-module/subform/subform.component.d.ts +227 -0
- package/lib/system-module/system/system.component.d.ts +113 -0
- package/lib/system-module/system-service/system-service.service.d.ts +23 -0
- package/lib/system-module/system-service/upload-file.service.d.ts +12 -0
- package/lib/utility/app-no-dbl-click.directive.d.ts +7 -0
- package/lib/utility/constants.d.ts +4 -0
- package/lib/utility/contact-table-search.pipe.d.ts +7 -0
- package/lib/utility/formate-num-field.pipe.d.ts +7 -0
- package/lib/utility/search-pipe.pipe.d.ts +7 -0
- package/lib/utility/selective-preloading-strategy.d.ts +9 -0
- package/lib/utility/table-search.pipe.d.ts +7 -0
- package/lib/utility/tranform.directive.d.ts +10 -0
- package/lib/websearch-history/websearch-history.component.d.ts +62 -0
- package/package.json +48 -0
- package/public_api.d.ts +52 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
3
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { Cookie } from 'ng2-cookies/ng2-cookies';
|
|
5
|
+
import { CommanServiceService } from '../comman-service/comman-service.service';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/router";
|
|
8
|
+
import * as i2 from "../comman-service/comman-service.service";
|
|
9
|
+
import * as i3 from "ngx-pagination";
|
|
10
|
+
import * as i4 from "ng-select";
|
|
11
|
+
import * as i5 from "angular2-multiselect-dropdown";
|
|
12
|
+
import * as i6 from "ngx-chips";
|
|
13
|
+
import * as i7 from "@kolkov/angular-editor";
|
|
14
|
+
import * as i8 from "@angular/forms";
|
|
15
|
+
import * as i9 from "@angular/common";
|
|
16
|
+
import * as i10 from "../utility/app-no-dbl-click.directive";
|
|
17
|
+
import * as i11 from "../utility/search-pipe.pipe";
|
|
18
|
+
import * as i12 from "ngx-order-pipe";
|
|
19
|
+
export class ReportFormatComponent {
|
|
20
|
+
constructor(router, route, cs) {
|
|
21
|
+
this.router = router;
|
|
22
|
+
this.route = route;
|
|
23
|
+
this.cs = cs;
|
|
24
|
+
this.cDt = new Date();
|
|
25
|
+
this.validationTags = [];
|
|
26
|
+
this.tblH = ["report_idn", "report_name", "title", "type", "bank_name", "module_name", "tags"];
|
|
27
|
+
this.tblDesc = {
|
|
28
|
+
"report_idn": "ID",
|
|
29
|
+
"report_name": "Name",
|
|
30
|
+
"title": "Title",
|
|
31
|
+
"type": "Type",
|
|
32
|
+
"bank_name": "Banks",
|
|
33
|
+
"module_name": "Module",
|
|
34
|
+
"tags": "Tags"
|
|
35
|
+
};
|
|
36
|
+
this.pageSize = 25;
|
|
37
|
+
this.p = 1;
|
|
38
|
+
this.order = '';
|
|
39
|
+
this.reverse = false;
|
|
40
|
+
this.pages = ["pg1", "pg2", "pg3"];
|
|
41
|
+
}
|
|
42
|
+
setPage(val) {
|
|
43
|
+
this.page = val;
|
|
44
|
+
}
|
|
45
|
+
ngOnInit() {
|
|
46
|
+
let mdlk = JSON.parse(localStorage.getItem('mdlKey'));
|
|
47
|
+
this.cUrl = this.router.url;
|
|
48
|
+
this.header = {
|
|
49
|
+
'clientkey': Cookie.get('_ck'),
|
|
50
|
+
'Content-Type': 'application/json',
|
|
51
|
+
'modulekey': mdlk[this.cUrl.split('/')[1]],
|
|
52
|
+
'loginid': Cookie.get('_logid'),
|
|
53
|
+
'source': 'qs'
|
|
54
|
+
};
|
|
55
|
+
// rich text editor configuration
|
|
56
|
+
this.config = {
|
|
57
|
+
editable: true,
|
|
58
|
+
spellcheck: true,
|
|
59
|
+
height: '8rem',
|
|
60
|
+
minHeight: '8rem',
|
|
61
|
+
translate: 'no',
|
|
62
|
+
defaultParagraphSeparator: 'p',
|
|
63
|
+
defaultFontName: 'Arial',
|
|
64
|
+
sanitize: false,
|
|
65
|
+
};
|
|
66
|
+
this.configBody = {
|
|
67
|
+
editable: true,
|
|
68
|
+
spellcheck: true,
|
|
69
|
+
height: '15rem',
|
|
70
|
+
minHeight: '15rem',
|
|
71
|
+
translate: 'no',
|
|
72
|
+
defaultParagraphSeparator: 'p',
|
|
73
|
+
defaultFontName: 'Arial',
|
|
74
|
+
sanitize: false,
|
|
75
|
+
};
|
|
76
|
+
this.dropdownSettingsBank = {
|
|
77
|
+
singleSelection: false,
|
|
78
|
+
text: "Select Bank",
|
|
79
|
+
selectAllText: 'Select All',
|
|
80
|
+
unSelectAllText: 'UnSelect All',
|
|
81
|
+
enableSearchFilter: true,
|
|
82
|
+
};
|
|
83
|
+
this.getReportData();
|
|
84
|
+
this.getReportFields();
|
|
85
|
+
}
|
|
86
|
+
// Get report data
|
|
87
|
+
getReportData() {
|
|
88
|
+
let reqObj = {};
|
|
89
|
+
reqObj['formNme'] = this.route.snapshot.params['frmnme'];
|
|
90
|
+
this.header['method'] = 'getReportFormatDetails';
|
|
91
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
92
|
+
this.cs.load(reqObj, options, 'admin/reportFormat').then((response) => {
|
|
93
|
+
if (response.status == 'SUCCESS') {
|
|
94
|
+
console.log(response);
|
|
95
|
+
this.reportFormatDetails = response.result.reportFormatDetails.reverse();
|
|
96
|
+
}
|
|
97
|
+
}).catch((err => {
|
|
98
|
+
console.log(err);
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
//Get form data
|
|
102
|
+
getReportFields() {
|
|
103
|
+
let reqObj = {};
|
|
104
|
+
reqObj['formNme'] = this.route.snapshot.params['frmnme'];
|
|
105
|
+
this.header['method'] = 'loadReportFormatData';
|
|
106
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
107
|
+
this.cs.load(reqObj, options, 'admin/reportFormat').then((response) => {
|
|
108
|
+
if (response.status == 'SUCCESS') {
|
|
109
|
+
console.log(response);
|
|
110
|
+
let result = response.result;
|
|
111
|
+
//module list
|
|
112
|
+
this.modulesList = result.moduleList.map(z => ({
|
|
113
|
+
value: z.module_id.toString(),
|
|
114
|
+
label: z.module_name
|
|
115
|
+
}));
|
|
116
|
+
//banks list
|
|
117
|
+
this.dropdownListBank = result.bankList.map(x => ({
|
|
118
|
+
id: x.bank_id,
|
|
119
|
+
itemName: x.bank_name
|
|
120
|
+
}));
|
|
121
|
+
//types list
|
|
122
|
+
this.typesList = result.report_typeList.map(y => ({
|
|
123
|
+
value: y.k,
|
|
124
|
+
label: y.v
|
|
125
|
+
}));
|
|
126
|
+
this.hashtagsList = result.report_hashtagsList;
|
|
127
|
+
this.showGuide();
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
// Open form window
|
|
132
|
+
openForm() {
|
|
133
|
+
this.page = "pg1";
|
|
134
|
+
delete this.report_idn;
|
|
135
|
+
delete this.moduleVal;
|
|
136
|
+
delete this.name;
|
|
137
|
+
delete this.description;
|
|
138
|
+
delete this.typeVal;
|
|
139
|
+
delete this.selectedItemsBank;
|
|
140
|
+
delete this.tags;
|
|
141
|
+
delete this.title;
|
|
142
|
+
delete this.emailTo;
|
|
143
|
+
delete this.emailCC;
|
|
144
|
+
delete this.emailBCC;
|
|
145
|
+
delete this.mailHeaderpg1;
|
|
146
|
+
delete this.mailHeaderpg2;
|
|
147
|
+
delete this.mailHeaderpg3;
|
|
148
|
+
delete this.mailBodypg1;
|
|
149
|
+
delete this.mailBodypg2;
|
|
150
|
+
delete this.mailBodypg3;
|
|
151
|
+
delete this.mailFooterpg1;
|
|
152
|
+
delete this.mailFooterpg2;
|
|
153
|
+
delete this.mailFooterpg3;
|
|
154
|
+
document.getElementById('datamdbtn').click();
|
|
155
|
+
document.getElementById('defModalHead').innerHTML = "Report Format";
|
|
156
|
+
}
|
|
157
|
+
// Open edit form window
|
|
158
|
+
editForm(report) {
|
|
159
|
+
console.log(report);
|
|
160
|
+
this.page = "pg1";
|
|
161
|
+
this.report_idn = report.report_idn;
|
|
162
|
+
document.getElementById('datamdbtn').click();
|
|
163
|
+
document.getElementById('defModalHead').innerHTML = "Edit Report Format " + report.report_idn;
|
|
164
|
+
this.moduleVal = report.module_idn.toString();
|
|
165
|
+
this.selectedItemsBank = [];
|
|
166
|
+
for (let x = 0; x < report.bank_idn.length; x++) {
|
|
167
|
+
for (let i = 0; i < this.dropdownListBank.length; i++) {
|
|
168
|
+
if (this.dropdownListBank[i].id == report.bank_idn[x]) {
|
|
169
|
+
this.selectedItemsBank.push(this.dropdownListBank[i]);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
this.name = report.report_name;
|
|
174
|
+
this.description = report.description;
|
|
175
|
+
this.typeVal = report.type;
|
|
176
|
+
this.title = report.title;
|
|
177
|
+
this.tags = [];
|
|
178
|
+
this.tags = report.tags.map(x => ({
|
|
179
|
+
display: x,
|
|
180
|
+
value: x
|
|
181
|
+
}));
|
|
182
|
+
;
|
|
183
|
+
this.emailTo = [];
|
|
184
|
+
this.emailTo = report.mail_list.to.map(y => ({
|
|
185
|
+
display: y,
|
|
186
|
+
value: y
|
|
187
|
+
}));
|
|
188
|
+
;
|
|
189
|
+
this.emailCC = [];
|
|
190
|
+
this.emailCC = report.mail_list.cc.map(z => ({
|
|
191
|
+
display: z,
|
|
192
|
+
value: z
|
|
193
|
+
}));
|
|
194
|
+
;
|
|
195
|
+
;
|
|
196
|
+
this.emailBCC = [];
|
|
197
|
+
this.emailBCC = report.mail_list.bcc.map(c => ({
|
|
198
|
+
display: c,
|
|
199
|
+
value: c
|
|
200
|
+
}));
|
|
201
|
+
;
|
|
202
|
+
;
|
|
203
|
+
this.mailHeaderpg1 = report.header['pg1'];
|
|
204
|
+
this.mailHeaderpg2 = report.header['pg2'];
|
|
205
|
+
this.mailHeaderpg3 = report.header['pg3'];
|
|
206
|
+
this.mailBodypg1 = report.body['pg1'];
|
|
207
|
+
this.mailBodypg2 = report.body['pg2'];
|
|
208
|
+
this.mailBodypg3 = report.body['pg3'];
|
|
209
|
+
this.mailFooterpg1 = report.footer['pg1'];
|
|
210
|
+
this.mailFooterpg2 = report.footer['pg2'];
|
|
211
|
+
this.mailFooterpg3 = report.footer['pg3'];
|
|
212
|
+
}
|
|
213
|
+
// Submit form
|
|
214
|
+
formSubmit() {
|
|
215
|
+
if (this.moduleVal && this.name && this.description &&
|
|
216
|
+
this.typeVal && this.tags && this.title && this.emailTo.length != 0 &&
|
|
217
|
+
this.mailHeaderpg1 && this.mailBodypg1 && this.mailFooterpg1) {
|
|
218
|
+
if (this.validateTags(this.mailBodypg1, 'rtBody') && this.validateTags(this.mailBodypg2, 'rtBody')
|
|
219
|
+
&& this.validateTags(this.mailBodypg3, 'rtBody') && this.validateTags(this.mailHeaderpg1, 'rtHeader')
|
|
220
|
+
&& this.validateTags(this.mailHeaderpg2, 'rtHeader') && this.validateTags(this.mailHeaderpg3, 'rtHeader')
|
|
221
|
+
&& this.validateTags(this.mailFooterpg1, 'rtFooter') && this.validateTags(this.mailFooterpg2, 'rtFooter')
|
|
222
|
+
&& this.validateTags(this.mailFooterpg3, 'rtFooter') && this.validateTagAndEmail(this.emailTo, 'to')
|
|
223
|
+
&& this.validateTagAndEmail(this.emailCC, 'cc') && this.validateTagAndEmail(this.emailBCC, 'bcc')
|
|
224
|
+
&& this.validateTags(this.title, 'title')) {
|
|
225
|
+
let newBankList = [];
|
|
226
|
+
let newTagsList = [];
|
|
227
|
+
let newToList = [];
|
|
228
|
+
let newCCList = [];
|
|
229
|
+
let newBCCList = [];
|
|
230
|
+
// converting json arrays to arrays
|
|
231
|
+
for (let i = 0; i < this.tags.length; i++) {
|
|
232
|
+
newTagsList.push(this.tags[i].value);
|
|
233
|
+
}
|
|
234
|
+
for (let i = 0; i < this.emailTo.length; i++) {
|
|
235
|
+
newToList.push(this.emailTo[i].value);
|
|
236
|
+
}
|
|
237
|
+
if (this.selectedItemsBank) {
|
|
238
|
+
for (let i = 0; i < this.selectedItemsBank.length; i++) {
|
|
239
|
+
newBankList.push(this.selectedItemsBank[i].id);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (this.emailCC) {
|
|
243
|
+
for (let i = 0; i < this.emailCC.length; i++) {
|
|
244
|
+
newCCList.push(this.emailCC[i].value);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (this.emailBCC) {
|
|
248
|
+
for (let i = 0; i < this.emailBCC.length; i++) {
|
|
249
|
+
newBCCList.push(this.emailBCC[i].value);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
console.log(newTagsList);
|
|
253
|
+
console.log(newToList);
|
|
254
|
+
console.log(newCCList);
|
|
255
|
+
console.log(newBCCList);
|
|
256
|
+
let reqObj = {};
|
|
257
|
+
reqObj['formNme'] = this.route.snapshot.params['frmnme'];
|
|
258
|
+
reqObj['report_idn'] = this.report_idn;
|
|
259
|
+
reqObj['module_idn'] = this.moduleVal;
|
|
260
|
+
reqObj['name'] = this.name;
|
|
261
|
+
reqObj['description'] = this.description;
|
|
262
|
+
reqObj['type'] = this.typeVal;
|
|
263
|
+
reqObj['bankIdnList'] = newBankList;
|
|
264
|
+
reqObj['tagsList'] = newTagsList;
|
|
265
|
+
reqObj['title'] = this.title;
|
|
266
|
+
reqObj['to'] = newToList;
|
|
267
|
+
reqObj['cc'] = newCCList;
|
|
268
|
+
reqObj['bcc'] = newBCCList;
|
|
269
|
+
reqObj['header'] = {
|
|
270
|
+
'pg1': this.mailHeaderpg1,
|
|
271
|
+
'pg2': this.mailHeaderpg2,
|
|
272
|
+
'pg3': this.mailHeaderpg3,
|
|
273
|
+
};
|
|
274
|
+
reqObj['body'] = {
|
|
275
|
+
'pg1': this.mailBodypg1,
|
|
276
|
+
'pg2': this.mailBodypg2,
|
|
277
|
+
'pg3': this.mailBodypg3,
|
|
278
|
+
};
|
|
279
|
+
reqObj['footer'] = {
|
|
280
|
+
'pg1': this.mailFooterpg1,
|
|
281
|
+
'pg2': this.mailFooterpg2,
|
|
282
|
+
'pg3': this.mailFooterpg3,
|
|
283
|
+
};
|
|
284
|
+
console.log(JSON.stringify(reqObj));
|
|
285
|
+
this.header['method'] = 'saveReportFormatData';
|
|
286
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
287
|
+
this.cs.load(reqObj, options, 'admin/reportFormat').then((response) => {
|
|
288
|
+
console.log(response);
|
|
289
|
+
if (response.status == 'SUCCESS') {
|
|
290
|
+
alert(response.message);
|
|
291
|
+
document.getElementById("closeButton").click();
|
|
292
|
+
this.getReportData();
|
|
293
|
+
}
|
|
294
|
+
}).catch((err) => {
|
|
295
|
+
alert("An error has occurred");
|
|
296
|
+
console.log(err);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
else
|
|
300
|
+
alert("Invalid hashtags or emails detected!");
|
|
301
|
+
}
|
|
302
|
+
else
|
|
303
|
+
alert("Please fill all required fields");
|
|
304
|
+
}
|
|
305
|
+
// Show legend and create array of hashtags
|
|
306
|
+
showGuide() {
|
|
307
|
+
document.getElementById('guide').innerHTML = "";
|
|
308
|
+
this.hashtagsList.sort(function (a, b) {
|
|
309
|
+
a = a.v.toLowerCase();
|
|
310
|
+
b = b.v.toLowerCase();
|
|
311
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
312
|
+
});
|
|
313
|
+
let hashList = this.hashtagsList;
|
|
314
|
+
for (let i = 0; i < hashList.length; i++) {
|
|
315
|
+
document.getElementById('guide').innerHTML += "<mark>" + hashList[i].k + "</mark> " + hashList[i].v + " ";
|
|
316
|
+
this.validationTags.push(hashList[i].k);
|
|
317
|
+
this.validationTags.push(hashList[i].k + ',');
|
|
318
|
+
this.validationTags.push(hashList[i].k + '.');
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// validating hashtags
|
|
322
|
+
validateTags(newValue, id) {
|
|
323
|
+
let tagsToValidate = this.validationTags;
|
|
324
|
+
let button = document.getElementById("submitBtn");
|
|
325
|
+
let tmp = document.createElement("DIV");
|
|
326
|
+
tmp.innerHTML = newValue;
|
|
327
|
+
newValue = tmp.textContent || tmp.innerText || "";
|
|
328
|
+
let tags = newValue.match(/#\S+/g);
|
|
329
|
+
if (tags != null && !tags.every(function (tag) {
|
|
330
|
+
if (tagsToValidate.indexOf(tag) !== -1) {
|
|
331
|
+
return true;
|
|
332
|
+
}
|
|
333
|
+
else
|
|
334
|
+
return false;
|
|
335
|
+
})) {
|
|
336
|
+
document.getElementById(id + "Error").innerHTML = "Please enter a valid hashtag";
|
|
337
|
+
button.disabled = true;
|
|
338
|
+
return false;
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
document.getElementById(id + "Error").innerHTML = "";
|
|
342
|
+
button.disabled = false;
|
|
343
|
+
return true;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// validating tags and email for email fields
|
|
347
|
+
validateTagAndEmail(tags, id) {
|
|
348
|
+
let tagsToValidateNew = this.validationTags;
|
|
349
|
+
let button = document.getElementById("submitBtn");
|
|
350
|
+
if (tags != null && !tags.every(function (tag) {
|
|
351
|
+
if (tag.value.includes("@")) {
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
if (tag.value.match(/#\S+/g) != null) {
|
|
355
|
+
if (tagsToValidateNew.indexOf(tag.value) !== -1 && tag.value.includes("Email")) {
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
return false;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
else
|
|
363
|
+
return false;
|
|
364
|
+
})) {
|
|
365
|
+
document.getElementById(id + "Error").innerHTML = "Please enter a valid hashtag or email";
|
|
366
|
+
button.disabled = true;
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
document.getElementById(id + "Error").innerHTML = "";
|
|
371
|
+
button.disabled = false;
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
onPageSizeChange(p) {
|
|
376
|
+
if (p == 'All') {
|
|
377
|
+
this.pageSize = this.reportFormatDetails.length;
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
this.pageSize = p;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
//sorting
|
|
384
|
+
setOrder(value, i) {
|
|
385
|
+
console.log(value);
|
|
386
|
+
console.log(i);
|
|
387
|
+
this.showarr = i;
|
|
388
|
+
if (this.order === value) {
|
|
389
|
+
this.reverse = !this.reverse;
|
|
390
|
+
}
|
|
391
|
+
this.order = value;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
/** @nocollapse */ /** @nocollapse */ ReportFormatComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ReportFormatComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.CommanServiceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
395
|
+
/** @nocollapse */ /** @nocollapse */ ReportFormatComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ReportFormatComponent, selector: "app-report-format", ngImport: i0, template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">Report Format\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" (click)=\"openForm()\">Add</button>\r\n </div>\r\n </div>\r\n <!-- Data table -->\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size </label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>Edit</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index\" (click)=\"setOrder(tbh,i)\">\r\n {{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>To</th>\r\n <th>CC</th>\r\n <th>BCC</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let report of reportFormatDetails | orderBy:order:reverse | searchPipe:searchF | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td><span (click)=\"editForm(report)\" class=\"fa fa-pencil\"></span></td>\r\n <td>{{report.report_idn}}</td>\r\n <td>{{report.report_name}}</td>\r\n <td>{{report.title}}</td>\r\n <td>{{report.type}}</td>\r\n <td>{{report.bank_name}}</td>\r\n <td>{{report.module_name}}</td>\r\n <td>{{report.tags}}</td>\r\n <td>{{report.mail_list.to}}</td>\r\n <td>{{report.mail_list.cc}}</td>\r\n <td>{{report.mail_list.bcc}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- pop up form -->\r\n<div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\" style=\"width: 80%\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" id=\"reportForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" id='closeButton' class=\"close\" data-dismiss=\"modal\" #closebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Report Format</h4>\r\n </div>\r\n <div class=\"modal-body\" style=\"width: 45%; float: left; background-color: white;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Module Name<span\r\n class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"modulesList\" [(ngModel)]=\"moduleVal\"\r\n name=\"module\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Name<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" autocomplete=\"off\" [(ngModel)]=\"name\" name=\"name\"\r\n class=\"form-control\"\r\n onkeypress=\"return (event.charCode > 64 && event.charCode < 91) || (event.charCode > 96 && event.charCode < 123) || (event.charCode >= 48 && event.charCode <= 57)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Description<span\r\n class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea style=\"height: 200px;\" [(ngModel)]=\"description\" name=\"description\"\r\n class=\"form-control\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Type<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 3;\" [options]=\"typesList\" [(ngModel)]=\"typeVal\"\r\n name=\"type\"> -->\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Bank Name</label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <angular2-multiselect name=\"select\" [data]=\"dropdownListBank\"\r\n [(ngModel)]=\"selectedItemsBank\" name=\"bank\"\r\n [settings]=\"dropdownSettingsBank\"></angular2-multiselect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Tags<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"tags\" name=\"tags\"></tag-input>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Title<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input [(ngModel)]=\"title\" (ngModelChange)=\"validateTags($event, 'title')\"\r\n name=\"title\" type=\"text\" class=\"form-control\">\r\n <p style=\"color: red\" id=\"titleError\"></p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">To<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input type=\"email\" (ngModelChange)=\"validateTagAndEmail($event, 'to')\"\r\n [(ngModel)]=\"emailTo\" name=\"to\"></tag-input>\r\n <p style=\"color: red\" id=\"toError\"></p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">CC:</label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input type=\"text\" (ngModelChange)=\"validateTagAndEmail($event, 'cc')\"\r\n [(ngModel)]=\"emailCC\" name=\"cc\"></tag-input>\r\n <p style=\"color: red\" id=\"ccError\"></p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">BCC:</label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input type=\"text\" (ngModelChange)=\"validateTagAndEmail($event, 'bcc')\"\r\n [(ngModel)]=\"emailBCC\" name=\"bcc\"></tag-input>\r\n <p style=\"color: red\" id=\"bccError\"></p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-body\" style=\"float: left; width: 50%; background-color: white;\">\r\n <div class=\"row\">\r\n <ul style=\"margin-top:0px\" class=\"nav nav-tabs navtabs\" role=\"tablist\">\r\n <li role=\"presentation\" [ngClass]=\"(page == 'pg1') ? 'active' : ''\"\r\n (click)=\"setPage('pg1')\"><a aria-controls=\"home\" role=\"tab\"\r\n [ngClass]=\"(page == 'pg1') ? 'active' : ''\" data-toggle=\"tab\">Page 1</a></li>\r\n <li role=\"presentation\" [ngClass]=\"(page == 'pg2') ? 'active' : ''\"\r\n (click)=\"setPage('pg2')\"><a aria-controls=\"home\" role=\"tab\"\r\n [ngClass]=\"(page == 'pg2') ? 'active' : ''\" data-toggle=\"tab\">Page 2</a></li>\r\n <li role=\"presentation\" [ngClass]=\"(page == 'pg3') ? 'active' : ''\"\r\n (click)=\"setPage('pg3')\"><a aria-controls=\"home\" role=\"tab\"\r\n [ngClass]=\"(page == 'pg3') ? 'active' : ''\" data-toggle=\"tab\">Page 3</a></li>\r\n </ul>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <ng-container *ngFor=\"let pg of pages\">\r\n <ng-container *ngIf=\"pg == page\">\r\n <!-- Header -->\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <p style=\"color: red\" id=\"errorMessage\"></p>\r\n <p><b>Header</b><span class=\"text-danger\" *ngIf=\"pg == 'pg1'\">*</span></p>\r\n <angular-editor (ngModelChange)=\"validateTags($event, 'rtHeader')\"\r\n [(ngModel)]=\"this['mailHeader' + pg]\" name=\"header\" [config]=\"config\"\r\n [spellcheck]=\"true\">\r\n </angular-editor>\r\n <p style=\"color: red\" id=\"rtHeaderError\"></p>\r\n </div>\r\n </div>\r\n <!-- Body -->\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <p><b>Body</b><span class=\"text-danger\" *ngIf=\"pg == 'pg1'\">*</span></p>\r\n <angular-editor (ngModelChange)=\"validateTags($event, 'rtBody')\"\r\n [(ngModel)]=\"this['mailBody' + pg]\" name=\"body\" [config]=\"configBody\"\r\n [spellcheck]=\"true\">\r\n </angular-editor>\r\n <p style=\"color: red\" id=\"rtBodyError\"></p>\r\n </div>\r\n </div>\r\n <!-- Footer -->\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <p><b>Footer</b><span class=\"text-danger\" *ngIf=\"pg == 'pg1'\">*</span></p>\r\n <angular-editor (ngModelChange)=\"validateTags($event, 'rtFooter')\"\r\n [(ngModel)]=\"this['mailFooter' + pg]\" name=\"footer\" [config]=\"config\"\r\n [spellcheck]=\"true\">\r\n </angular-editor>\r\n <p style=\"color: red\" id=\"rtFooterError\"></p>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\" style=\"background-color: white; margin-right: 70px;\">\r\n <button type=\"submit\" id=\"submitBtn\" appAppNoDblClick class=\"btn btn-success\" #submitBtn\r\n (click)=\"formSubmit();\">Submit</button>\r\n </div>\r\n <div class=\"modal-footer\" style=\"text-align: left;\">\r\n <div id=\"guide\" style=\"color:grey\"></div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>", styles: [""], components: [{ type: i3.PaginationControlsComponent, selector: "pagination-controls", inputs: ["maxSize", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel", "directionLinks", "autoHide", "responsive", "id"], outputs: ["pageChange"] }, { type: i4.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }, { type: i5.AngularMultiSelect, selector: "angular2-multiselect", inputs: ["settings", "data", "loading"], outputs: ["onSelect", "onDeSelect", "onSelectAll", "onDeSelectAll", "onOpen", "onClose", "onScrollToEnd", "onFilterSelectAll", "onFilterDeSelectAll", "onAddFilterNewItem", "onGroupSelect", "onGroupDeSelect"] }, { type: i6.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration", "inputText"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { type: i7.AngularEditorComponent, selector: "angular-editor", inputs: ["id", "config", "placeholder", "tabIndex"], outputs: ["viewMode", "blur", "focus", "html"] }], directives: [{ type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }], pipes: { "date": i9.DatePipe, "paginate": i3.PaginatePipe, "searchPipe": i11.SearchPipePipe, "orderBy": i12.OrderPipe } });
|
|
396
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ReportFormatComponent, decorators: [{
|
|
397
|
+
type: Component,
|
|
398
|
+
args: [{ selector: 'app-report-format', template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">Report Format\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" (click)=\"openForm()\">Add</button>\r\n </div>\r\n </div>\r\n <!-- Data table -->\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size </label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>Edit</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index\" (click)=\"setOrder(tbh,i)\">\r\n {{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>To</th>\r\n <th>CC</th>\r\n <th>BCC</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let report of reportFormatDetails | orderBy:order:reverse | searchPipe:searchF | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td><span (click)=\"editForm(report)\" class=\"fa fa-pencil\"></span></td>\r\n <td>{{report.report_idn}}</td>\r\n <td>{{report.report_name}}</td>\r\n <td>{{report.title}}</td>\r\n <td>{{report.type}}</td>\r\n <td>{{report.bank_name}}</td>\r\n <td>{{report.module_name}}</td>\r\n <td>{{report.tags}}</td>\r\n <td>{{report.mail_list.to}}</td>\r\n <td>{{report.mail_list.cc}}</td>\r\n <td>{{report.mail_list.bcc}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- pop up form -->\r\n<div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\" style=\"width: 80%\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" id=\"reportForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" id='closeButton' class=\"close\" data-dismiss=\"modal\" #closebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Report Format</h4>\r\n </div>\r\n <div class=\"modal-body\" style=\"width: 45%; float: left; background-color: white;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Module Name<span\r\n class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"modulesList\" [(ngModel)]=\"moduleVal\"\r\n name=\"module\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Name<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" autocomplete=\"off\" [(ngModel)]=\"name\" name=\"name\"\r\n class=\"form-control\"\r\n onkeypress=\"return (event.charCode > 64 && event.charCode < 91) || (event.charCode > 96 && event.charCode < 123) || (event.charCode >= 48 && event.charCode <= 57)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Description<span\r\n class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea style=\"height: 200px;\" [(ngModel)]=\"description\" name=\"description\"\r\n class=\"form-control\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Type<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 3;\" [options]=\"typesList\" [(ngModel)]=\"typeVal\"\r\n name=\"type\"> -->\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Bank Name</label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <angular2-multiselect name=\"select\" [data]=\"dropdownListBank\"\r\n [(ngModel)]=\"selectedItemsBank\" name=\"bank\"\r\n [settings]=\"dropdownSettingsBank\"></angular2-multiselect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Tags<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"tags\" name=\"tags\"></tag-input>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Title<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input [(ngModel)]=\"title\" (ngModelChange)=\"validateTags($event, 'title')\"\r\n name=\"title\" type=\"text\" class=\"form-control\">\r\n <p style=\"color: red\" id=\"titleError\"></p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">To<span class=\"text-danger\">*</span></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input type=\"email\" (ngModelChange)=\"validateTagAndEmail($event, 'to')\"\r\n [(ngModel)]=\"emailTo\" name=\"to\"></tag-input>\r\n <p style=\"color: red\" id=\"toError\"></p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">CC:</label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input type=\"text\" (ngModelChange)=\"validateTagAndEmail($event, 'cc')\"\r\n [(ngModel)]=\"emailCC\" name=\"cc\"></tag-input>\r\n <p style=\"color: red\" id=\"ccError\"></p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">BCC:</label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input type=\"text\" (ngModelChange)=\"validateTagAndEmail($event, 'bcc')\"\r\n [(ngModel)]=\"emailBCC\" name=\"bcc\"></tag-input>\r\n <p style=\"color: red\" id=\"bccError\"></p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-body\" style=\"float: left; width: 50%; background-color: white;\">\r\n <div class=\"row\">\r\n <ul style=\"margin-top:0px\" class=\"nav nav-tabs navtabs\" role=\"tablist\">\r\n <li role=\"presentation\" [ngClass]=\"(page == 'pg1') ? 'active' : ''\"\r\n (click)=\"setPage('pg1')\"><a aria-controls=\"home\" role=\"tab\"\r\n [ngClass]=\"(page == 'pg1') ? 'active' : ''\" data-toggle=\"tab\">Page 1</a></li>\r\n <li role=\"presentation\" [ngClass]=\"(page == 'pg2') ? 'active' : ''\"\r\n (click)=\"setPage('pg2')\"><a aria-controls=\"home\" role=\"tab\"\r\n [ngClass]=\"(page == 'pg2') ? 'active' : ''\" data-toggle=\"tab\">Page 2</a></li>\r\n <li role=\"presentation\" [ngClass]=\"(page == 'pg3') ? 'active' : ''\"\r\n (click)=\"setPage('pg3')\"><a aria-controls=\"home\" role=\"tab\"\r\n [ngClass]=\"(page == 'pg3') ? 'active' : ''\" data-toggle=\"tab\">Page 3</a></li>\r\n </ul>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <ng-container *ngFor=\"let pg of pages\">\r\n <ng-container *ngIf=\"pg == page\">\r\n <!-- Header -->\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <p style=\"color: red\" id=\"errorMessage\"></p>\r\n <p><b>Header</b><span class=\"text-danger\" *ngIf=\"pg == 'pg1'\">*</span></p>\r\n <angular-editor (ngModelChange)=\"validateTags($event, 'rtHeader')\"\r\n [(ngModel)]=\"this['mailHeader' + pg]\" name=\"header\" [config]=\"config\"\r\n [spellcheck]=\"true\">\r\n </angular-editor>\r\n <p style=\"color: red\" id=\"rtHeaderError\"></p>\r\n </div>\r\n </div>\r\n <!-- Body -->\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <p><b>Body</b><span class=\"text-danger\" *ngIf=\"pg == 'pg1'\">*</span></p>\r\n <angular-editor (ngModelChange)=\"validateTags($event, 'rtBody')\"\r\n [(ngModel)]=\"this['mailBody' + pg]\" name=\"body\" [config]=\"configBody\"\r\n [spellcheck]=\"true\">\r\n </angular-editor>\r\n <p style=\"color: red\" id=\"rtBodyError\"></p>\r\n </div>\r\n </div>\r\n <!-- Footer -->\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <p><b>Footer</b><span class=\"text-danger\" *ngIf=\"pg == 'pg1'\">*</span></p>\r\n <angular-editor (ngModelChange)=\"validateTags($event, 'rtFooter')\"\r\n [(ngModel)]=\"this['mailFooter' + pg]\" name=\"footer\" [config]=\"config\"\r\n [spellcheck]=\"true\">\r\n </angular-editor>\r\n <p style=\"color: red\" id=\"rtFooterError\"></p>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\" style=\"background-color: white; margin-right: 70px;\">\r\n <button type=\"submit\" id=\"submitBtn\" appAppNoDblClick class=\"btn btn-success\" #submitBtn\r\n (click)=\"formSubmit();\">Submit</button>\r\n </div>\r\n <div class=\"modal-footer\" style=\"text-align: left;\">\r\n <div id=\"guide\" style=\"color:grey\"></div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>", styles: [""] }]
|
|
399
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.CommanServiceService }]; } });
|
|
400
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWZvcm1hdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL3JlcG9ydC1mb3JtYXQvcmVwb3J0LWZvcm1hdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL3JlcG9ydC1mb3JtYXQvcmVwb3J0LWZvcm1hdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPaEYsTUFBTSxPQUFPLHFCQUFxQjtJQUloQyxZQUNTLE1BQWMsRUFDYixLQUFxQixFQUN0QixFQUF3QjtRQUZ4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2IsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDdEIsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFMakMsUUFBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFrQmpCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBdUJwQixTQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxRixZQUFPLEdBQUc7WUFDUixZQUFZLEVBQUUsSUFBSTtZQUNsQixhQUFhLEVBQUUsTUFBTTtZQUNyQixPQUFPLEVBQUUsT0FBTztZQUNoQixNQUFNLEVBQUUsTUFB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LENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7O3dKQXRhVSxxQkFBcUI7NElBQXJCLHFCQUFxQix5RENYbEMsbTdqQkErUTZGOzJGRHBRaEYscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBIZWFkZXJzICB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgQ29tbWFuU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tYW4tc2VydmljZS9jb21tYW4tc2VydmljZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydC1mb3JtYXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBvcnQtZm9ybWF0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXBvcnQtZm9ybWF0LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwb3J0Rm9ybWF0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY0R0ID0gbmV3IERhdGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHB1YmxpYyBjczogQ29tbWFuU2VydmljZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBoZWFkZXI7XHJcbiAgY29uZmlnO1xyXG4gIGNvbmZpZ0JvZHk7XHJcbiAgY1VybDtcclxuICByZXBvcnRGb3JtYXREZXRhaWxzO1xyXG4gIG1vZHVsZXNMaXN0O1xyXG4gIHR5cGVzTGlzdDtcclxuICBkcm9wZG93bkxpc3RCYW5rO1xyXG4gIGRyb3Bkb3duU2V0dGluZ3NCYW5rO1xyXG4gIGhhc2h0YWdzTGlzdDtcclxuICB2YWxpZGF0aW9uVGFncyA9IFtdO1xyXG4gIC8vIG5nTW9kZWxzXHJcbiAgbW9kdWxlVmFsO1xyXG4gIG5hbWU7XHJcbiAgZGVzY3JpcHRpb247XHJcbiAgdHlwZVZhbDtcclxuICBzZWxlY3RlZEl0ZW1zQmFuaztcclxuICB0YWdzO1xyXG4gIHRpdGxlO1xyXG4gIGVtYWlsVG87XHJcbiAgZW1haWxDQztcclxuICBlbWFpbEJDQztcclxuICBtYWlsSGVhZGVycGcxO1xyXG4gIG1haWxIZWFkZXJwZzI7XHJcbiAgbWFpbEhlYWRlcnBnMztcclxuICBtYWlsQm9keXBnMTtcclxuICBtYWlsQm9keXBnMjtcclxuICBtYWlsQm9keXBnMztcclxuICBtYWlsRm9vdGVycGcxO1xyXG4gIG1haWxGb290ZXJwZzI7XHJcbiAgbWFpbEZvb3RlcnBnMztcclxuICByZXBvcnRfaWRuO1xyXG4gIHNlYXJjaEY7XHJcbiAgdGJsSCA9IFtcInJlcG9ydF9pZG5cIiwgXCJyZXBvcnRfbmFtZVwiLCBcInRpdGxlXCIsIFwidHlwZVwiLCBcImJhbmtfbmFtZVwiLCBcIm1vZHVsZV9uYW1lXCIsIFwidGFnc1wiXTtcclxuICB0YmxEZXNjID0ge1xyXG4gICAgXCJyZXBvcnRfaWRuXCI6IFwiSURcIixcclxuICAgIFwicmVwb3J0X25hbWVcIjogXCJOYW1lXCIsXHJcbiAgICBcInRpdGxlXCI6IFwiVGl0bGVcIixcclxuICAgIFwidHlwZVwiOiBcIlR5cGVcIixcclxuICAgIFwiYmFua19uYW1lXCI6IFwiQmFua3NcIixcclxuICAgIFwibW9kdWxlX25hbWVcIjogXCJNb2R1bGVcIixcclxuICAgIFwidGFnc1wiOiBcIlRhZ3NcIlxyXG4gIH07XHJcbiAgcGFnZVNpemUgPSAyNTtcclxuICBwID0gMTtcclxuICBzaG93YXJyO1xyXG4gIG9yZGVyID0gJyc7XHJcbiAgcmV2ZXJzZSA9IGZhbHNlO1xyXG4gIHBhZ2U7XHJcbiAgcGFnZXMgPSBbXCJwZzFcIiwgXCJwZzJcIiwgXCJwZzNcIl07XHJcblxyXG4gIHNldFBhZ2UodmFsKSB7XHJcbiAgICB0aGlzLnBhZ2UgPSB2YWw7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBsZXQgbWRsayA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21kbEtleScpKTtcclxuICAgIHRoaXMuY1VybCA9IHRoaXMucm91dGVyLnVybDtcclxuXHJcbiAgICB0aGlzLmhlYWRlciA9IHtcclxuICAgICAgJ2NsaWVudGtleSc6IENvb2tpZS5nZXQoJ19jaycpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAnbW9kdWxla2V5JzogbWRsa1t0aGlzLmNVcmwuc3BsaXQoJy8nKVsxXV0sXHJcbiAgICAgICdsb2dpbmlkJzogQ29va2llLmdldCgnX2xvZ2lkJyksXHJcbiAgICAgICdzb3VyY2UnOiAncXMnXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIHJpY2ggdGV4dCBlZGl0b3IgY29uZmlndXJhdGlvblxyXG4gICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgIGVkaXRhYmxlOiB0cnVlLFxyXG4gICAgICBzcGVsbGNoZWNrOiB0cnVlLFxyXG4gICAgICBoZWlnaHQ6ICc4cmVtJyxcclxuICAgICAgbWluSGVpZ2h0OiAnOHJlbScsXHJcbiAgICAgIHRyYW5zbGF0ZTogJ25vJyxcclxuICAgICAgZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcjogJ3AnLFxyXG4gICAgICBkZWZhdWx0Rm9udE5hbWU6ICdBcmlhbCcsXHJcbiAgICAgIHNhbml0aXplOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jb25maWdCb2R5ID0ge1xyXG4gICAgICBlZGl0YWJsZTogdHJ1ZSxcclxuICAgICAgc3BlbGxjaGVjazogdHJ1ZSxcclxuICAgICAgaGVpZ2h0OiAnMTVyZW0nLFxyXG4gICAgICBtaW5IZWlnaHQ6ICcxNXJlbScsXHJcbiAgICAgIHRyYW5zbGF0ZTogJ25vJyxcclxuICAgICAgZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcjogJ3AnLFxyXG4gICAgICBkZWZhdWx0Rm9udE5hbWU6ICdBcmlhbCcsXHJcbiAgICAgIHNhbml0aXplOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5kcm9wZG93blNldHRpbmdzQmFuayA9IHtcclxuICAgICAgc2luZ2xlU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgdGV4dDogXCJTZWxlY3QgQmFua1wiLFxyXG4gICAgICBzZWxlY3RBbGxUZXh0OiAnU2VsZWN0IEFsbCcsXHJcbiAgICAgIHVuU2VsZWN0QWxsVGV4dDogJ1VuU2VsZWN0IEFsbCcsXHJcbiAgICAgIGVuYWJsZVNlYXJjaEZpbHRlcjogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRSZXBvcnREYXRhKCk7XHJcbiAgICB0aGlzLmdldFJlcG9ydEZpZWxkcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHJlcG9ydCBkYXRhXHJcbiAgZ2V0UmVwb3J0RGF0YSgpIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2dldFJlcG9ydEZvcm1hdERldGFpbHMnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ2FkbWluL3JlcG9ydEZvcm1hdCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRGb3JtYXREZXRhaWxzID0gcmVzcG9uc2UucmVzdWx0LnJlcG9ydEZvcm1hdERldGFpbHMucmV2ZXJzZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8vR2V0IGZvcm0gZGF0YVxyXG4gIGdldFJlcG9ydEZpZWxkcygpIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRSZXBvcnRGb3JtYXREYXRhJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3MubG9hZChyZXFPYmosIG9wdGlvbnMsICdhZG1pbi9yZXBvcnRGb3JtYXQnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHRcclxuICAgICAgICAvL21vZHVsZSBsaXN0XHJcbiAgICAgICAgdGhpcy5tb2R1bGVzTGlzdCA9IHJlc3VsdC5tb2R1bGVMaXN0Lm1hcCh6ID0+ICh7XHJcbiAgICAgICAgICB2YWx1ZTogei5tb2R1bGVfaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGxhYmVsOiB6Lm1vZHVsZV9uYW1lXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIC8vYmFua3MgbGlzdFxyXG4gICAgICAgIHRoaXMuZHJvcGRvd25MaXN0QmFuayA9IHJlc3VsdC5iYW5rTGlzdC5tYXAoeCA9PiAoe1xyXG4gICAgICAgICAgaWQ6IHguYmFua19pZCxcclxuICAgICAgICAgIGl0ZW1OYW1lOiB4LmJhbmtfbmFtZVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICAvL3R5cGVzIGxpc3RcclxuICAgICAgICB0aGlzLnR5cGVzTGlzdCA9IHJlc3VsdC5yZXBvcnRfdHlwZUxpc3QubWFwKHkgPT4gKHtcclxuICAgICAgICAgIHZhbHVlOiB5LmssXHJcbiAgICAgICAgICBsYWJlbDogeS52XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuaGFzaHRhZ3NMaXN0ID0gcmVzdWx0LnJlcG9ydF9oYXNodGFnc0xpc3Q7XHJcbiAgICAgICAgdGhpcy5zaG93R3VpZGUoKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIE9wZW4gZm9ybSB3aW5kb3dcclxuICBvcGVuRm9ybSgpIHtcclxuICAgIHRoaXMucGFnZSA9IFwicGcxXCI7XHJcbiAgICBkZWxldGUgdGhpcy5yZXBvcnRfaWRuO1xyXG4gICAgZGVsZXRlIHRoaXMubW9kdWxlVmFsO1xyXG4gICAgZGVsZXRlIHRoaXMubmFtZTtcclxuICAgIGRlbGV0ZSB0aGlzLmRlc2NyaXB0aW9uO1xyXG4gICAgZGVsZXRlIHRoaXMudHlwZVZhbDtcclxuICAgIGRlbGV0ZSB0aGlzLnNlbGVjdGVkSXRlbXNCYW5rO1xyXG4gICAgZGVsZXRlIHRoaXMudGFncztcclxuICAgIGRlbGV0ZSB0aGlzLnRpdGxlO1xyXG4gICAgZGVsZXRlIHRoaXMuZW1haWxUbztcclxuICAgIGRlbGV0ZSB0aGlzLmVtYWlsQ0M7XHJcbiAgICBkZWxldGUgdGhpcy5lbWFpbEJDQztcclxuICAgIGRlbGV0ZSB0aGlzLm1haWxIZWFkZXJwZzE7XHJcbiAgICBkZWxldGUgdGhpcy5tYWlsSGVhZGVycGcyO1xyXG4gICAgZGVsZXRlIHRoaXMubWFpbEhlYWRlcnBnMztcclxuICAgIGRlbGV0ZSB0aGlzLm1haWxCb2R5cGcxO1xyXG4gICAgZGVsZXRlIHRoaXMubWFpbEJvZHlwZzI7XHJcbiAgICBkZWxldGUgdGhpcy5tYWlsQm9keXBnMztcclxuICAgIGRlbGV0ZSB0aGlzLm1haWxGb290ZXJwZzE7XHJcbiAgICBkZWxldGUgdGhpcy5tYWlsRm9vdGVycGcyO1xyXG4gICAgZGVsZXRlIHRoaXMubWFpbEZvb3RlcnBnMztcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhbWRidG4nKS5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlZk1vZGFsSGVhZCcpLmlubmVySFRNTCA9IFwiUmVwb3J0IEZvcm1hdFwiO1xyXG4gIH1cclxuXHJcbiAgLy8gT3BlbiBlZGl0IGZvcm0gd2luZG93XHJcbiAgZWRpdEZvcm0ocmVwb3J0KSB7XHJcbiAgICBjb25zb2xlLmxvZyhyZXBvcnQpO1xyXG4gICAgdGhpcy5wYWdlID0gXCJwZzFcIjtcclxuICAgIHRoaXMucmVwb3J0X2lkbiA9IHJlcG9ydC5yZXBvcnRfaWRuO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGFtZGJ0bicpLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVmTW9kYWxIZWFkJykuaW5uZXJIVE1MID0gXCJFZGl0IFJlcG9ydCBGb3JtYXQgXCIgKyByZXBvcnQucmVwb3J0X2lkbjtcclxuICAgIHRoaXMubW9kdWxlVmFsID0gcmVwb3J0Lm1vZHVsZV9pZG4udG9TdHJpbmcoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0JhbmsgPSBbXTtcclxuICAgIGZvciAobGV0IHggPSAwOyB4IDwgcmVwb3J0LmJhbmtfaWRuLmxlbmd0aDsgeCsrKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kcm9wZG93bkxpc3RCYW5rLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25MaXN0QmFua1tpXS5pZCA9PSByZXBvcnQuYmFua19pZG5beF0pIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0JhbmsucHVzaCh0aGlzLmRyb3Bkb3duTGlzdEJhbmtbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5uYW1lID0gcmVwb3J0LnJlcG9ydF9uYW1lO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHJlcG9ydC5kZXNjcmlwdGlvbjtcclxuICAgIHRoaXMudHlwZVZhbCA9IHJlcG9ydC50eXBlO1xyXG4gICAgdGhpcy50aXRsZSA9IHJlcG9ydC50aXRsZTtcclxuICAgIHRoaXMudGFncyA9IFtdO1xyXG4gICAgdGhpcy50YWdzID0gcmVwb3J0LnRhZ3MubWFwKHggPT4gKHtcclxuICAgICAgZGlzcGxheTogeCxcclxuICAgICAgdmFsdWU6IHhcclxuICAgIH0pKTs7XHJcbiAgICB0aGlzLmVtYWlsVG8gPSBbXTtcclxuICAgIHRoaXMuZW1haWxUbyA9IHJlcG9ydC5tYWlsX2xpc3QudG8ubWFwKHkgPT4gKHtcclxuICAgICAgZGlzcGxheTogeSxcclxuICAgICAgdmFsdWU6IHlcclxuICAgIH0pKTs7XHJcbiAgICB0aGlzLmVtYWlsQ0MgPSBbXTtcclxuICAgIHRoaXMuZW1haWxDQyA9IHJlcG9ydC5tYWlsX2xpc3QuY2MubWFwKHogPT4gKHtcclxuICAgICAgZGlzcGxheTogeixcclxuICAgICAgdmFsdWU6IHpcclxuICAgIH0pKTs7O1xyXG4gICAgdGhpcy5lbWFpbEJDQyA9IFtdO1xyXG4gICAgdGhpcy5lbWFpbEJDQyA9IHJlcG9ydC5tYWlsX2xpc3QuYmNjLm1hcChjID0+ICh7XHJcbiAgICAgIGRpc3BsYXk6IGMsXHJcbiAgICAgIHZhbHVlOiBjXHJcbiAgICB9KSk7OztcclxuICAgIHRoaXMubWFpbEhlYWRlcnBnMSA9IHJlcG9ydC5oZWFkZXJbJ3BnMSddO1xyXG4gICAgdGhpcy5tYWlsSGVhZGVycGcyID0gcmVwb3J0LmhlYWRlclsncGcyJ107XHJcbiAgICB0aGlzLm1haWxIZWFkZXJwZzMgPSByZXBvcnQuaGVhZGVyWydwZzMnXTtcclxuICAgIHRoaXMubWFpbEJvZHlwZzEgPSByZXBvcnQuYm9keVsncGcxJ107XHJcbiAgICB0aGlzLm1haWxCb2R5cGcyID0gcmVwb3J0LmJvZHlbJ3BnMiddO1xyXG4gICAgdGhpcy5tYWlsQm9keXBnMyA9IHJlcG9ydC5ib2R5WydwZzMnXTtcclxuICAgIHRoaXMubWFpbEZvb3RlcnBnMSA9IHJlcG9ydC5mb290ZXJbJ3BnMSddO1xyXG4gICAgdGhpcy5tYWlsRm9vdGVycGcyID0gcmVwb3J0LmZvb3RlclsncGcyJ107XHJcbiAgICB0aGlzLm1haWxGb290ZXJwZzMgPSByZXBvcnQuZm9vdGVyWydwZzMnXTtcclxuICB9XHJcblxyXG4gIC8vIFN1Ym1pdCBmb3JtXHJcbiAgZm9ybVN1Ym1pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZHVsZVZhbCAmJiB0aGlzLm5hbWUgJiYgdGhpcy5kZXNjcmlwdGlvbiAmJlxyXG4gICAgICB0aGlzLnR5cGVWYWwgJiYgdGhpcy50YWdzICYmIHRoaXMudGl0bGUgJiYgdGhpcy5lbWFpbFRvLmxlbmd0aCAhPSAwICYmXHJcbiAgICAgIHRoaXMubWFpbEhlYWRlcnBnMSAmJiB0aGlzLm1haWxCb2R5cGcxICYmIHRoaXMubWFpbEZvb3RlcnBnMSkge1xyXG4gICAgICBpZiAodGhpcy52YWxpZGF0ZVRhZ3ModGhpcy5tYWlsQm9keXBnMSwgJ3J0Qm9keScpICYmIHRoaXMudmFsaWRhdGVUYWdzKHRoaXMubWFpbEJvZHlwZzIsICdydEJvZHknKVxyXG4gICAgICAgICYmIHRoaXMudmFsaWRhdGVUYWdzKHRoaXMubWFpbEJvZHlwZzMsICdydEJvZHknKSAmJiB0aGlzLnZhbGlkYXRlVGFncyh0aGlzLm1haWxIZWFkZXJwZzEsICdydEhlYWRlcicpXHJcbiAgICAgICAgJiYgdGhpcy52YWxpZGF0ZVRhZ3ModGhpcy5tYWlsSGVhZGVycGcyLCAncnRIZWFkZXInKSAmJiB0aGlzLnZhbGlkYXRlVGFncyh0aGlzLm1haWxIZWFkZXJwZzMsICdydEhlYWRlcicpXHJcbiAgICAgICAgJiYgdGhpcy52YWxpZGF0ZVRhZ3ModGhpcy5tYWlsRm9vdGVycGcxLCAncnRGb290ZXInKSAmJiB0aGlzLnZhbGlkYXRlVGFncyh0aGlzLm1haWxGb290ZXJwZzIsICdydEZvb3RlcicpXHJcbiAgICAgICAgJiYgdGhpcy52YWxpZGF0ZVRhZ3ModGhpcy5tYWlsRm9vdGVycGczLCAncnRGb290ZXInKSAmJiB0aGlzLnZhbGlkYXRlVGFnQW5kRW1haWwodGhpcy5lbWFpbFRvLCAndG8nKVxyXG4gICAgICAgICYmIHRoaXMudmFsaWRhdGVUYWdBbmRFbWFpbCh0aGlzLmVtYWlsQ0MsICdjYycpICYmIHRoaXMudmFsaWRhdGVUYWdBbmRFbWFpbCh0aGlzLmVtYWlsQkNDLCAnYmNjJylcclxuICAgICAgICAmJiB0aGlzLnZhbGlkYXRlVGFncyh0aGlzLnRpdGxlLCAndGl0bGUnKSkge1xyXG5cclxuICAgICAgICBsZXQgbmV3QmFua0xpc3QgPSBbXTtcclxuICAgICAgICBsZXQgbmV3VGFnc0xpc3QgPSBbXTtcclxuICAgICAgICBsZXQgbmV3VG9MaXN0ID0gW107XHJcbiAgICAgICAgbGV0IG5ld0NDTGlzdCA9IFtdO1xyXG4gICAgICAgIGxldCBuZXdCQ0NMaXN0ID0gW107XHJcblxyXG4gICAgICAgIC8vIGNvbnZlcnRpbmcganNvbiBhcnJheXMgdG8gYXJyYXlzXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIG5ld1RhZ3NMaXN0LnB1c2godGhpcy50YWdzW2ldLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVtYWlsVG8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIG5ld1RvTGlzdC5wdXNoKHRoaXMuZW1haWxUb1tpXS52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXNCYW5rKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRJdGVtc0JhbmsubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbmV3QmFua0xpc3QucHVzaCh0aGlzLnNlbGVjdGVkSXRlbXNCYW5rW2ldLmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZW1haWxDQykge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVtYWlsQ0MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbmV3Q0NMaXN0LnB1c2godGhpcy5lbWFpbENDW2ldLnZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZW1haWxCQ0MpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbWFpbEJDQy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBuZXdCQ0NMaXN0LnB1c2godGhpcy5lbWFpbEJDQ1tpXS52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhuZXdUYWdzTGlzdCk7XHJcbiAgICAgICAgY29uc29sZS5sb2cobmV3VG9MaXN0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhuZXdDQ0xpc3QpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG5ld0JDQ0xpc3QpO1xyXG5cclxuICAgICAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICAgICAgcmVxT2JqWydmb3JtTm1lJ10gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICAgICAgcmVxT2JqWydyZXBvcnRfaWRuJ10gPSB0aGlzLnJlcG9ydF9pZG47XHJcbiAgICAgICAgcmVxT2JqWydtb2R1bGVfaWRuJ10gPSB0aGlzLm1vZHVsZVZhbDtcclxuICAgICAgICByZXFPYmpbJ25hbWUnXSA9IHRoaXMubmFtZTtcclxuICAgICAgICByZXFPYmpbJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIHJlcU9ialsndHlwZSddID0gdGhpcy50eXBlVmFsO1xyXG4gICAgICAgIHJlcU9ialsnYmFua0lkbkxpc3QnXSA9IG5ld0JhbmtMaXN0O1xyXG4gICAgICAgIHJlcU9ialsndGFnc0xpc3QnXSA9IG5ld1RhZ3NMaXN0O1xyXG4gICAgICAgIHJlcU9ialsndGl0bGUnXSA9IHRoaXMudGl0bGU7XHJcbiAgICAgICAgcmVxT2JqWyd0byddID0gbmV3VG9MaXN0O1xyXG4gICAgICAgIHJlcU9ialsnY2MnXSA9IG5ld0NDTGlzdDtcclxuICAgICAgICByZXFPYmpbJ2JjYyddID0gbmV3QkNDTGlzdDtcclxuICAgICAgICByZXFPYmpbJ2hlYWRlciddID0ge1xyXG4gICAgICAgICAgJ3BnMSc6IHRoaXMubWFpbEhlYWRlcnBnMSxcclxuICAgICAgICAgICdwZzInOiB0aGlzLm1haWxIZWFkZXJwZzIsXHJcbiAgICAgICAgICAncGczJzogdGhpcy5tYWlsSGVhZGVycGczLFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXFPYmpbJ2JvZHknXSA9IHtcclxuICAgICAgICAgICdwZzEnOiB0aGlzLm1haWxCb2R5cGcxLFxyXG4gICAgICAgICAgJ3BnMic6IHRoaXMubWFpbEJvZHlwZzIsXHJcbiAgICAgICAgICAncGczJzogdGhpcy5tYWlsQm9keXBnMyxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVxT2JqWydmb290ZXInXSA9IHtcclxuICAgICAgICAgICdwZzEnOiB0aGlzLm1haWxGb290ZXJwZzEsXHJcbiAgICAgICAgICAncGcyJzogdGhpcy5tYWlsRm9vdGVycGcyLFxyXG4gICAgICAgICAgJ3BnMyc6IHRoaXMubWFpbEZvb3RlcnBnMyxcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3NhdmVSZXBvcnRGb3JtYXREYXRhJztcclxuICAgICAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICAgICAgdGhpcy5jcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ2FkbWluL3JlcG9ydEZvcm1hdCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNsb3NlQnV0dG9uXCIpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UmVwb3J0RGF0YSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgIGFsZXJ0KFwiQW4gZXJyb3IgaGFzIG9jY3VycmVkXCIpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGFsZXJ0KFwiSW52YWxpZCBoYXNodGFncyBvciBlbWFpbHMgZGV0ZWN0ZWQhXCIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBhbGVydChcIlBsZWFzZSBmaWxsIGFsbCByZXF1aXJlZCBmaWVsZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLyBTaG93IGxlZ2VuZCBhbmQgY3JlYXRlIGFycmF5IG9mIGhhc2h0YWdzXHJcbiAgc2hvd0d1aWRlKCkge1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2d1aWRlJykuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgIHRoaXMuaGFzaHRhZ3NMaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgYSA9IGEudi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBiID0gYi52LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XHJcbiAgICB9KVxyXG5cclxuICAgIGxldCBoYXNoTGlzdCA9IHRoaXMuaGFzaHRhZ3NMaXN0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYXNoTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ3VpZGUnKS5pbm5lckhUTUwgKz0gXCI8bWFyaz5cIiArIGhhc2hMaXN0W2ldLmsgKyBcIjwvbWFyaz4gXCIgKyBoYXNoTGlzdFtpXS52ICsgXCImbmJzcDsgJm5ic3A7XCI7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblRhZ3MucHVzaChoYXNoTGlzdFtpXS5rKTtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uVGFncy5wdXNoKGhhc2hMaXN0W2ldLmsgKyAnLCcpO1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25UYWdzLnB1c2goaGFzaExpc3RbaV0uayArICcuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyB2YWxpZGF0aW5nIGhhc2h0YWdzXHJcbiAgdmFsaWRhdGVUYWdzKG5ld1ZhbHVlLCBpZCkge1xyXG4gICAgbGV0IHRhZ3NUb1ZhbGlkYXRlID0gdGhpcy52YWxpZGF0aW9uVGFncztcclxuICAgIGxldCBidXR0b24gPSA8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1Ym1pdEJ0blwiKTtcclxuICAgIGxldCB0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xyXG4gICAgdG1wLmlubmVySFRNTCA9IG5ld1ZhbHVlO1xyXG4gICAgbmV3VmFsdWUgPSB0bXAudGV4dENvbnRlbnQgfHwgdG1wLmlubmVyVGV4dCB8fCBcIlwiO1xyXG4gICAgbGV0IHRhZ3MgPSBuZXdWYWx1ZS5tYXRjaCgvI1xcUysvZyk7XHJcbiAgICBpZiAodGFncyAhPSBudWxsICYmICF0YWdzLmV2ZXJ5KGZ1bmN0aW9uICh0YWcpIHtcclxuICAgICAgaWYgKHRhZ3NUb1ZhbGlkYXRlLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICAgIH0pKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkICsgXCJFcnJvclwiKS5pbm5lckhUTUwgPSBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGhhc2h0YWdcIjtcclxuICAgICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkICsgXCJFcnJvclwiKS5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyB2YWxpZGF0aW5nIHRhZ3MgYW5kIGVtYWlsIGZvciBlbWFpbCBmaWVsZHNcclxuICB2YWxpZGF0ZVRhZ0FuZEVtYWlsKHRhZ3MsIGlkKSB7XHJcbiAgICBsZXQgdGFnc1RvVmFsaWRhdGVOZXcgPSB0aGlzLnZhbGlkYXRpb25UYWdzO1xyXG4gICAgbGV0IGJ1dHRvbiA9IDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3VibWl0QnRuXCIpO1xyXG4gICAgaWYgKHRhZ3MgIT0gbnVsbCAmJiAhdGFncy5ldmVyeShmdW5jdGlvbiAodGFnKSB7XHJcbiAgICAgIGlmICh0YWcudmFsdWUuaW5jbHVkZXMoXCJAXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZy52YWx1ZS5tYXRjaCgvI1xcUysvZykgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0YWdzVG9WYWxpZGF0ZU5ldy5pbmRleE9mKHRhZy52YWx1ZSkgIT09IC0xICYmIHRhZy52YWx1ZS5pbmNsdWRlcyhcIkVtYWlsXCIpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSkpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQgKyBcIkVycm9yXCIpLmlubmVySFRNTCA9IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgaGFzaHRhZyBvciBlbWFpbFwiO1xyXG4gICAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQgKyBcIkVycm9yXCIpLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocCkge1xyXG4gICAgaWYgKHAgPT0gJ0FsbCcpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucmVwb3J0Rm9ybWF0RGV0YWlscy5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gcDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vc29ydGluZ1xyXG4gIHNldE9yZGVyKHZhbHVlOiBzdHJpbmcsIGkpIHtcclxuICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuICAgIGNvbnNvbGUubG9nKGkpO1xyXG4gICAgdGhpcy5zaG93YXJyID0gaTtcclxuICAgIGlmICh0aGlzLm9yZGVyID09PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLnJldmVyc2UgPSAhdGhpcy5yZXZlcnNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcmRlciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJtdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJwYW5lbC10aXRsZVwiPlJlcG9ydCBGb3JtYXRcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiPih7e2NEdCB8IGRhdGU6J21lZGl1bSd9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLWluZm8gcHVsbC1yaWdodFwiIChjbGljayk9XCJvcGVuRm9ybSgpXCI+QWRkPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gRGF0YSB0YWJsZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZGxQYWdlc2l6ZVwiPlBhZ2UgU2l6ZSAmbmJzcDsgJm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJwYWdlU2l6ZVwiIFsobmdNb2RlbCldPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwXCI+MTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBcIj41MDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWlubGluZSBwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4YW1wbGVJbnB1dE5hbWUyXCI+U2VhcmNoICZuYnNwOyZuYnNwOzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJleGFtcGxlSW5wdXROYW1lMlwiIG5hbWU9XCJzY2h0eHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGUtaG92ZXItY2VsbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5FZGl0PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCB0Ymggb2YgdGJsSDsgbGV0IGkgPSBpbmRleFwiIChjbGljayk9XCJzZXRPcmRlcih0YmgsaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGJsRGVzY1t0YmhdfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwicmV2ZXJzZVwiICpuZ0lmPVwic2hvd2FyciA9PT0gaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwiIXJldmVyc2VcIiAqbmdJZj1cInNob3dhcnIgPT09IGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+VG88L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+Q0M8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QkNDPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRGb3JtYXREZXRhaWxzIHwgb3JkZXJCeTpvcmRlcjpyZXZlcnNlIHwgc2VhcmNoUGlwZTpzZWFyY2hGIHwgcGFnaW5hdGU6IHsgaXRlbXNQZXJQYWdlOiBwYWdlU2l6ZSwgY3VycmVudFBhZ2U6IHAgfTsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIChjbGljayk9XCJlZGl0Rm9ybShyZXBvcnQpXCIgY2xhc3M9XCJmYSBmYS1wZW5jaWxcIj48L3NwYW4+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVwb3J0LnJlcG9ydF9pZG59fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3JlcG9ydC5yZXBvcnRfbmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVwb3J0LnRpdGxlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyZXBvcnQudHlwZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVwb3J0LmJhbmtfbmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVwb3J0Lm1vZHVsZV9uYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyZXBvcnQudGFnc319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVwb3J0Lm1haWxfbGlzdC50b319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVwb3J0Lm1haWxfbGlzdC5jY319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVwb3J0Lm1haWxfbGlzdC5iY2N9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhZ2luYXRpb24tY29udHJvbHMgKHBhZ2VDaGFuZ2UpPVwicCA9ICRldmVudFwiIGNsYXNzPVwicHVsbC1yaWdodFwiPjwvcGFnaW5hdGlvbi1jb250cm9scz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gcG9wIHVwIGZvcm0gLS0+XHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiZGF0YW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cImRlZk1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIlxyXG4gICAgZGF0YS1rZXlib2FyZD1cImZhbHNlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgc3R5bGU9XCJ3aWR0aDogODAlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIiBpZD1cInJlcG9ydEZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD0nY2xvc2VCdXR0b24nIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiICNjbG9zZWJ0bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImRlZk1vZGFsSGVhZFwiPlJlcG9ydCBGb3JtYXQ8L2g0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwid2lkdGg6IDQ1JTsgZmxvYXQ6IGxlZnQ7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+TW9kdWxlIE5hbWU8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHN0eWxlPVwiei1pbmRleDogNTtcIiBbb3B0aW9uc109XCJtb2R1bGVzTGlzdFwiIFsobmdNb2RlbCldPVwibW9kdWxlVmFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwibW9kdWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPk5hbWU8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwibmFtZVwiIG5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25rZXlwcmVzcz1cInJldHVybiAoZXZlbnQuY2hhckNvZGUgPiA2NCAmJiBldmVudC5jaGFyQ29kZSA8IDkxKSB8fCAoZXZlbnQuY2hhckNvZGUgPiA5NiAmJiBldmVudC5jaGFyQ29kZSA8IDEyMykgfHwgKGV2ZW50LmNoYXJDb2RlID49IDQ4ICYmIGV2ZW50LmNoYXJDb2RlIDw9IDU3KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+RGVzY3JpcHRpb248c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgc3R5bGU9XCJoZWlnaHQ6IDIwMHB4O1wiIFsobmdNb2RlbCldPVwiZGVzY3JpcHRpb25cIiBuYW1lPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPlR5cGU8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3Qgc3R5bGU9XCJ6LWluZGV4OiAzO1wiIFtvcHRpb25zXT1cInR5cGVzTGlzdFwiIFsobmdNb2RlbCldPVwidHlwZVZhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInR5cGVcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPkJhbmsgTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFuZ3VsYXIyLW11bHRpc2VsZWN0IG5hbWU9XCJzZWxlY3RcIiBbZGF0YV09XCJkcm9wZG93bkxpc3RCYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSXRlbXNCYW5rXCIgbmFtZT1cImJhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZXR0aW5nc109XCJkcm9wZG93blNldHRpbmdzQmFua1wiPjwvYW5ndWxhcjItbXVsdGlzZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj5UYWdzPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFnLWlucHV0IFsobmdNb2RlbCldPVwidGFnc1wiIG5hbWU9XCJ0YWdzXCI+PC90YWctaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj5UaXRsZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwidGl0bGVcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZVRhZ3MoJGV2ZW50LCAndGl0bGUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRpdGxlXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjogcmVkXCIgaWQ9XCJ0aXRsZUVycm9yXCI+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+VG88c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWctaW5wdXQgdHlwZT1cImVtYWlsXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVUYWdBbmRFbWFpbCgkZXZlbnQsICd0bycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVtYWlsVG9cIiBuYW1lPVwidG9cIj48L3RhZy1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IHJlZFwiIGlkPVwidG9FcnJvclwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPkNDOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhZy1pbnB1dCB0eXBlPVwidGV4dFwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlVGFnQW5kRW1haWwoJGV2ZW50LCAnY2MnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbWFpbENDXCIgbmFtZT1cImNjXCI+PC90YWctaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImNvbG9yOiByZWRcIiBpZD1cImNjRXJyb3JcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj5CQ0M6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFnLWlucHV0IHR5cGU9XCJ0ZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVUYWdBbmRFbWFpbCgkZXZlbnQsICdiY2MnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbWFpbEJDQ1wiIG5hbWU9XCJiY2NcIj48L3RhZy1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IHJlZFwiIGlkPVwiYmNjRXJyb3JcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwiZmxvYXQ6IGxlZnQ7IHdpZHRoOiA1MCU7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIHN0eWxlPVwibWFyZ2luLXRvcDowcHhcIiBjbGFzcz1cIm5hdiBuYXYtdGFicyBuYXZ0YWJzXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgW25nQ2xhc3NdPVwiKHBhZ2UgPT0gJ3BnMScpID8gJ2FjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UoJ3BnMScpXCI+PGEgYXJpYS1jb250cm9scz1cImhvbWVcIiByb2xlPVwidGFiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiKHBhZ2UgPT0gJ3BnMScpID8gJ2FjdGl2ZScgOiAnJ1wiIGRhdGEtdG9nZ2xlPVwidGFiXCI+UGFnZSAxPC9hPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cInByZXNlbnRhdGlvblwiIFtuZ0NsYXNzXT1cIihwYWdlID09ICdwZzInKSA/ICdhY3RpdmUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRQYWdlKCdwZzInKVwiPjxhIGFyaWEtY29udHJvbHM9XCJob21lXCIgcm9sZT1cInRhYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihwYWdlID09ICdwZzInKSA/ICdhY3RpdmUnIDogJydcIiBkYXRhLXRvZ2dsZT1cInRhYlwiPlBhZ2UgMjwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBbbmdDbGFzc109XCIocGFnZSA9PSAncGczJykgPyAnYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0UGFnZSgncGczJylcIj48YSBhcmlhLWNvbnRyb2xzPVwiaG9tZVwiIHJvbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIocGFnZSA9PSAncGczJykgPyAnYWN0aXZlJyA6ICcnXCIgZGF0YS10b2dnbGU9XCJ0YWJcIj5QYWdlIDM8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBnIG9mIHBhZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBnID09IHBhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBIZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjogcmVkXCIgaWQ9XCJlcnJvck1lc3NhZ2VcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PGI+SGVhZGVyPC9iPjxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInBnID09ICdwZzEnXCI+Kjwvc3Bhbj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFuZ3VsYXItZWRpdG9yIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlVGFncygkZXZlbnQsICdydEhlYWRlcicpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzWydtYWlsSGVhZGVyJyArIHBnXVwiIG5hbWU9XCJoZWFkZXJcIiBbY29uZmlnXT1cImNvbmZpZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcGVsbGNoZWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FuZ3VsYXItZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IHJlZFwiIGlkPVwicnRIZWFkZXJFcnJvclwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCb2R5IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxiPkJvZHk8L2I+PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwicGcgPT0gJ3BnMSdcIj4qPC9zcGFuPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5ndWxhci1lZGl0b3IgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVUYWdzKCRldmVudCwgJ3J0Qm9keScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzWydtYWlsQm9keScgKyBwZ11cIiBuYW1lPVwiYm9keVwiIFtjb25maWddPVwiY29uZmlnQm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcGVsbGNoZWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FuZ3VsYXItZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IHJlZFwiIGlkPVwicnRCb2R5RXJyb3JcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRm9vdGVyIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxiPkZvb3RlcjwvYj48c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJwZyA9PSAncGcxJ1wiPio8L3NwYW4+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbmd1bGFyLWVkaXRvciAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZVRhZ3MoJGV2ZW50LCAncnRGb290ZXInKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGhpc1snbWFpbEZvb3RlcicgKyBwZ11cIiBuYW1lPVwiZm9vdGVyXCIgW2NvbmZpZ109XCJjb25maWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3BlbGxjaGVja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hbmd1bGFyLWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImNvbG9yOiByZWRcIiBpZD1cInJ0Rm9vdGVyRXJyb3JcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBtYXJnaW4tcmlnaHQ6IDcwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgaWQ9XCJzdWJtaXRCdG5cIiBhcHBBcHBOb0RibENsaWNrIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgI3N1Ym1pdEJ0blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybVN1Ym1pdCgpO1wiPlN1Ym1pdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJndWlkZVwiIHN0eWxlPVwiY29sb3I6Z3JleVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxidXR0b24gaWQ9XCJkYXRhbWRidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjZGF0YW1vZGFsXCI+PC9idXR0b24+Il19
|