@hmcts/ccpay-web-component 5.0.2-beta102 → 5.0.2-beta103
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/bundles/hmcts-ccpay-web-component.umd.js +2098 -586
- package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
- package/esm2015/hmcts-ccpay-web-component.js +33 -31
- package/esm2015/lib/components/add-remission/add-remission.component.js +706 -141
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +38 -13
- package/esm2015/lib/components/contact-details/contact-details.component.js +447 -0
- package/esm2015/lib/components/fee-summary/fee-summary.component.js +59 -16
- package/esm2015/lib/components/payment-view/payment-view.component.js +194 -106
- package/esm2015/lib/components/process-refund/process-refund.component.js +31 -9
- package/esm2015/lib/components/refund-list/refund-list.component.js +3 -3
- package/esm2015/lib/components/refund-status/refund-status.component.js +215 -31
- package/esm2015/lib/components/service-request/service-request.component.js +213 -145
- package/esm2015/lib/components/table/table.component.js +24 -9
- package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +17 -1
- package/esm2015/lib/interfaces/IFee.js +13 -1
- package/esm2015/lib/interfaces/IPayment.js +7 -1
- package/esm2015/lib/interfaces/IPutNotificationRequest.js +25 -0
- package/esm2015/lib/interfaces/IRefundContactDetails.js +25 -0
- package/esm2015/lib/interfaces/IRefundFee.js +21 -0
- package/esm2015/lib/interfaces/IRefundList.js +7 -1
- package/esm2015/lib/interfaces/IRefundsNotifications.js +21 -0
- package/esm2015/lib/interfaces/IRemission.js +7 -1
- package/esm2015/lib/interfaces/IResubmitRefundRequest.js +10 -2
- package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +6 -2
- package/esm2015/lib/interfaces/PostRefundRetroRemission.js +16 -2
- package/esm2015/lib/payment-lib.component.js +21 -4
- package/esm2015/lib/payment-lib.module.js +3 -1
- package/esm2015/lib/payment-lib.service.js +16 -1
- package/esm2015/lib/services/notification/notification.service.js +85 -0
- package/esm2015/lib/services/refunds/refunds.service.js +10 -1
- package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +1 -1
- package/esm5/hmcts-ccpay-web-component.js +33 -31
- package/esm5/lib/components/add-remission/add-remission.component.js +828 -147
- package/esm5/lib/components/case-transactions/case-transactions.component.js +38 -13
- package/esm5/lib/components/contact-details/contact-details.component.js +472 -0
- package/esm5/lib/components/fee-summary/fee-summary.component.js +59 -16
- package/esm5/lib/components/payment-view/payment-view.component.js +225 -124
- package/esm5/lib/components/process-refund/process-refund.component.js +30 -12
- package/esm5/lib/components/refund-list/refund-list.component.js +3 -3
- package/esm5/lib/components/refund-status/refund-status.component.js +251 -29
- package/esm5/lib/components/service-request/service-request.component.js +254 -176
- package/esm5/lib/components/table/table.component.js +27 -9
- package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +17 -1
- package/esm5/lib/interfaces/IFee.js +13 -1
- package/esm5/lib/interfaces/IPayment.js +7 -1
- package/esm5/lib/interfaces/IPutNotificationRequest.js +23 -0
- package/esm5/lib/interfaces/IRefundContactDetails.js +25 -0
- package/esm5/lib/interfaces/IRefundFee.js +21 -0
- package/esm5/lib/interfaces/IRefundList.js +7 -1
- package/esm5/lib/interfaces/IRefundsNotifications.js +21 -0
- package/esm5/lib/interfaces/IRemission.js +7 -1
- package/esm5/lib/interfaces/IResubmitRefundRequest.js +8 -2
- package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +5 -2
- package/esm5/lib/interfaces/PostRefundRetroRemission.js +13 -2
- package/esm5/lib/payment-lib.component.js +16 -2
- package/esm5/lib/payment-lib.module.js +3 -1
- package/esm5/lib/payment-lib.service.js +23 -1
- package/esm5/lib/services/notification/notification.service.js +89 -0
- package/esm5/lib/services/refunds/refunds.service.js +16 -1
- package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +1 -1
- package/fesm2015/hmcts-ccpay-web-component.js +1839 -497
- package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
- package/fesm5/hmcts-ccpay-web-component.js +2080 -533
- package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
- package/hmcts-ccpay-web-component.d.ts +32 -30
- package/hmcts-ccpay-web-component.metadata.json +1 -1
- package/lib/components/add-remission/add-remission.component.d.ts +47 -3
- package/lib/components/case-transactions/case-transactions.component.d.ts +4 -1
- package/lib/components/contact-details/contact-details.component.d.ts +49 -0
- package/lib/components/fee-summary/fee-summary.component.d.ts +2 -0
- package/lib/components/payment-view/payment-view.component.d.ts +25 -6
- package/lib/components/process-refund/process-refund.component.d.ts +5 -2
- package/lib/components/refund-status/refund-status.component.d.ts +35 -6
- package/lib/components/service-request/service-request.component.d.ts +28 -9
- package/lib/components/table/table.component.d.ts +1 -0
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +4 -0
- package/lib/interfaces/IFee.d.ts +6 -0
- package/lib/interfaces/IPayment.d.ts +3 -0
- package/lib/interfaces/IPutNotificationRequest.d.ts +6 -0
- package/lib/interfaces/IRefundContactDetails.d.ts +9 -0
- package/lib/interfaces/IRefundFee.d.ts +7 -0
- package/lib/interfaces/IRefundList.d.ts +4 -0
- package/lib/interfaces/IRefundsNotifications.d.ts +16 -0
- package/lib/interfaces/IRemission.d.ts +3 -0
- package/lib/interfaces/IResubmitRefundRequest.d.ts +5 -1
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +3 -1
- package/lib/interfaces/PostRefundRetroRemission.d.ts +6 -1
- package/lib/payment-lib.component.d.ts +5 -0
- package/lib/payment-lib.service.d.ts +3 -0
- package/lib/services/notification/notification.service.d.ts +15 -0
- package/lib/services/refunds/refunds.service.d.ts +2 -0
- package/package.json +5 -1
|
@@ -16,6 +16,8 @@ import { ChangeDetectorRef } from '@angular/core';
|
|
|
16
16
|
import { OrderslistService } from '../../services/orderslist.service';
|
|
17
17
|
/** @type {?} */
|
|
18
18
|
var BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
|
|
19
|
+
/** @type {?} */
|
|
20
|
+
var resolvedPromise = Promise.resolve(null);
|
|
19
21
|
var AddRemissionComponent = /** @class */ (function () {
|
|
20
22
|
function AddRemissionComponent(formBuilder, router, paymentViewService, paymentLibComponent, refundService, cd, OrderslistService) {
|
|
21
23
|
this.formBuilder = formBuilder;
|
|
@@ -29,6 +31,7 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
29
31
|
//@Output() refundListReason: EventEmitter<any> = new EventEmitter({reason:string, code:string});
|
|
30
32
|
this.refundListReason = new EventEmitter();
|
|
31
33
|
this.refundListAmount = new EventEmitter();
|
|
34
|
+
this.refundFees = new EventEmitter();
|
|
32
35
|
this.refund = {
|
|
33
36
|
reason: {
|
|
34
37
|
duplicate: 'Duplicate payment',
|
|
@@ -57,6 +60,8 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
57
60
|
this.isRemissionApplied = false;
|
|
58
61
|
// refundReasons: any[] = [];
|
|
59
62
|
this.commonRefundReasons = [];
|
|
63
|
+
this.class = '';
|
|
64
|
+
this.errorMsg = new Array();
|
|
60
65
|
}
|
|
61
66
|
/**
|
|
62
67
|
* @return {?}
|
|
@@ -66,6 +71,9 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
66
71
|
*/
|
|
67
72
|
function () {
|
|
68
73
|
var _this = this;
|
|
74
|
+
console.log(this.viewCompStatus);
|
|
75
|
+
this.errorMessage = '';
|
|
76
|
+
this.errorMsg = [];
|
|
69
77
|
this.default = 'Select a different reason';
|
|
70
78
|
this.pattern1 = '^([a-zA-Z0-9]{3})-([a-zA-Z0-9]{3})-([a-zA-Z0-9]{3})$';
|
|
71
79
|
this.pattern2 = '^([A-Za-z]{2}[0-9]{2})-([0-9]{6})$';
|
|
@@ -78,6 +86,7 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
78
86
|
this.amount = (this.fee.volume * this.fee.calculated_amount);
|
|
79
87
|
}
|
|
80
88
|
if (this.payment) {
|
|
89
|
+
this.paymentReference = this.payment.reference;
|
|
81
90
|
this.remessionPayment = this.payment;
|
|
82
91
|
if (this.payment.status === 'Success') {
|
|
83
92
|
this.isPaymentSuccess = true;
|
|
@@ -96,15 +105,73 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
96
105
|
])),
|
|
97
106
|
refundReason: new FormControl('', Validators.compose([Validators.required])),
|
|
98
107
|
refundDDReason: new FormControl('', Validators.compose([Validators.required])),
|
|
99
|
-
reason: new FormControl()
|
|
108
|
+
reason: new FormControl(),
|
|
109
|
+
feeAmount: new FormControl(),
|
|
110
|
+
feesList: this.formBuilder.array([])
|
|
100
111
|
});
|
|
101
112
|
/** @type {?} */
|
|
102
113
|
var remissionctrls = this.remissionForm.controls;
|
|
103
114
|
remissionctrls['refundDDReason'].setValue('Select a different reason', { onlySelf: true });
|
|
115
|
+
if (this.refundPaymentReference !== undefined && this.refundPaymentReference.length > 0) {
|
|
116
|
+
this.paymentReference = this.refundPaymentReference;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
this.paymentReference = this.payment.reference;
|
|
120
|
+
}
|
|
121
|
+
if (this.isFromServiceRequestPage) {
|
|
122
|
+
this.paymentViewService.getApportionPaymentDetails(this.paymentReference).subscribe((/**
|
|
123
|
+
* @param {?} paymentGroup
|
|
124
|
+
* @return {?}
|
|
125
|
+
*/
|
|
126
|
+
function (paymentGroup) {
|
|
127
|
+
/** @type {?} */
|
|
128
|
+
var fees = [];
|
|
129
|
+
paymentGroup.fees.forEach((/**
|
|
130
|
+
* @param {?} fee
|
|
131
|
+
* @return {?}
|
|
132
|
+
*/
|
|
133
|
+
function (fee) {
|
|
134
|
+
_this.isRemissionsMatch = false;
|
|
135
|
+
paymentGroup.remissions.forEach((/**
|
|
136
|
+
* @param {?} rem
|
|
137
|
+
* @return {?}
|
|
138
|
+
*/
|
|
139
|
+
function (rem) {
|
|
140
|
+
if (rem.fee_code === fee.code) {
|
|
141
|
+
_this.isRemissionsMatch = true;
|
|
142
|
+
fee['remissions'] = rem;
|
|
143
|
+
fees.push(fee);
|
|
144
|
+
}
|
|
145
|
+
}));
|
|
146
|
+
if (!_this.isRemissionsMatch) {
|
|
147
|
+
fees.push(fee);
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
paymentGroup.fees = fees;
|
|
151
|
+
_this.paymentFees = fees;
|
|
152
|
+
_this.fees = fees;
|
|
153
|
+
_this.paymentGroup = paymentGroup;
|
|
154
|
+
_this.paymentGroup.payments = _this.paymentGroup.payments.filter((/**
|
|
155
|
+
* @param {?} paymentGroupObj
|
|
156
|
+
* @return {?}
|
|
157
|
+
*/
|
|
158
|
+
function (paymentGroupObj) { return paymentGroupObj['reference'].includes(_this.paymentLibComponent.paymentReference); }));
|
|
159
|
+
// const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
|
|
160
|
+
// this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
|
|
161
|
+
_this.refundFeesList();
|
|
162
|
+
}), (/**
|
|
163
|
+
* @param {?} error
|
|
164
|
+
* @return {?}
|
|
165
|
+
*/
|
|
166
|
+
function (error) { return _this.errorMessage = error; }));
|
|
167
|
+
}
|
|
168
|
+
if (this.fees && this.viewCompStatus === 'issuerefund') {
|
|
169
|
+
this.refundFeesList();
|
|
170
|
+
}
|
|
104
171
|
if (this.viewCompStatus === '') {
|
|
105
172
|
this.viewStatus = 'main';
|
|
106
173
|
}
|
|
107
|
-
if (this.viewCompStatus === '
|
|
174
|
+
if (this.viewCompStatus === 'issuerefundpage1') {
|
|
108
175
|
this.refundService.getRefundReasons().subscribe((/**
|
|
109
176
|
* @param {?} refundReasons
|
|
110
177
|
* @return {?}
|
|
@@ -119,7 +186,7 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
119
186
|
* @param {?} data
|
|
120
187
|
* @return {?}
|
|
121
188
|
*/
|
|
122
|
-
function (data) { return data.name !== 'Retrospective remission'; }));
|
|
189
|
+
function (data) { return data.name !== 'Retrospective remission' && data.name !== 'Overpayment'; }));
|
|
123
190
|
_this.cd.detectChanges();
|
|
124
191
|
_this.commonRefundReasons = refundReasons.filter((/**
|
|
125
192
|
* @param {?} data
|
|
@@ -134,10 +201,156 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
134
201
|
function (a, b) { return a.toString().localeCompare(b); }));
|
|
135
202
|
_this.cd.detectChanges();
|
|
136
203
|
}));
|
|
204
|
+
this.refundReason = this.changeRefundReason;
|
|
137
205
|
}
|
|
138
206
|
if (this.viewCompStatus === 'processretroremissonpage' && this.isFromRefundListPage) {
|
|
139
207
|
this.viewStatus = 'processretroremissonpage';
|
|
140
208
|
}
|
|
209
|
+
if (this.orderDetail !== undefined) {
|
|
210
|
+
this.fees = this.orderDetail[0].fees;
|
|
211
|
+
this.paymentReference = this.orderDetail[0].payments[0].reference;
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* @return {?}
|
|
216
|
+
*/
|
|
217
|
+
AddRemissionComponent.prototype.goToPaymentViewComponent = /**
|
|
218
|
+
* @return {?}
|
|
219
|
+
*/
|
|
220
|
+
function () {
|
|
221
|
+
this.paymentLibComponent.paymentMethod = this.payment.method;
|
|
222
|
+
this.paymentLibComponent.paymentGroupReference = this.paymentGroupRef;
|
|
223
|
+
this.paymentLibComponent.paymentReference = this.paymentReference;
|
|
224
|
+
//this.PaymentViewComponent.viewCompStatus = 'overpayment';
|
|
225
|
+
this.paymentLibComponent.viewName = 'payment-view';
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* @return {?}
|
|
229
|
+
*/
|
|
230
|
+
AddRemissionComponent.prototype.refundFeesList = /**
|
|
231
|
+
* @return {?}
|
|
232
|
+
*/
|
|
233
|
+
function () {
|
|
234
|
+
/** @type {?} */
|
|
235
|
+
var creds = (/** @type {?} */ (this.remissionForm.controls.feesList));
|
|
236
|
+
// if(creds.controls.length > 0) {
|
|
237
|
+
for (var i = 0; i < this.fees.length; i++) {
|
|
238
|
+
creds.push(this.formBuilder.group({
|
|
239
|
+
id: this.fees[i].id,
|
|
240
|
+
code: this.fees[i].code,
|
|
241
|
+
volume: this.fees[i].volume,
|
|
242
|
+
calculated_amount: this.fees[i].calculated_amount,
|
|
243
|
+
apportion_amount: this.fees[i].apportion_amount,
|
|
244
|
+
ccd_case_number: this.fees[i].ccd_case_number,
|
|
245
|
+
description: this.fees[i].description,
|
|
246
|
+
net_amount: this.fees[i].net_amount,
|
|
247
|
+
version: this.fees[i].version,
|
|
248
|
+
refund_amount: [''],
|
|
249
|
+
selected: [''],
|
|
250
|
+
updated_volume: this.fees[i].volume
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
this.cd.detectChanges();
|
|
254
|
+
//}
|
|
255
|
+
};
|
|
256
|
+
Object.defineProperty(AddRemissionComponent.prototype, "feesList", {
|
|
257
|
+
get: /**
|
|
258
|
+
* @return {?}
|
|
259
|
+
*/
|
|
260
|
+
function () {
|
|
261
|
+
/** @type {?} */
|
|
262
|
+
var dd = (/** @type {?} */ (this.remissionForm.get('feesList')));
|
|
263
|
+
return (/** @type {?} */ (this.remissionForm.get('feesList')));
|
|
264
|
+
},
|
|
265
|
+
enumerable: true,
|
|
266
|
+
configurable: true
|
|
267
|
+
});
|
|
268
|
+
/**
|
|
269
|
+
* @return {?}
|
|
270
|
+
*/
|
|
271
|
+
AddRemissionComponent.prototype.noneSelected = /**
|
|
272
|
+
* @return {?}
|
|
273
|
+
*/
|
|
274
|
+
function () {
|
|
275
|
+
if (this.isFullyRefund) {
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
if (!this.feesList.controls.some((/**
|
|
280
|
+
* @param {?} item
|
|
281
|
+
* @return {?}
|
|
282
|
+
*/
|
|
283
|
+
function (item) { return item.get('selected').value === true; }))) {
|
|
284
|
+
this.errorMsg = [];
|
|
285
|
+
[].forEach.call(document.querySelectorAll('input'), (/**
|
|
286
|
+
* @param {?} el
|
|
287
|
+
* @return {?}
|
|
288
|
+
*/
|
|
289
|
+
function (el) {
|
|
290
|
+
el.classList.remove('inline-error-class');
|
|
291
|
+
}));
|
|
292
|
+
}
|
|
293
|
+
return !this.feesList.controls.some((/**
|
|
294
|
+
* @param {?} item
|
|
295
|
+
* @return {?}
|
|
296
|
+
*/
|
|
297
|
+
function (item) { return item.get('selected').value === true; }));
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* @param {?} i
|
|
302
|
+
* @param {?} v1
|
|
303
|
+
* @param {?} AppAmt
|
|
304
|
+
* @param {?} Volume
|
|
305
|
+
* @return {?}
|
|
306
|
+
*/
|
|
307
|
+
AddRemissionComponent.prototype.check_en = /**
|
|
308
|
+
* @param {?} i
|
|
309
|
+
* @param {?} v1
|
|
310
|
+
* @param {?} AppAmt
|
|
311
|
+
* @param {?} Volume
|
|
312
|
+
* @return {?}
|
|
313
|
+
*/
|
|
314
|
+
function (i, v1, AppAmt, Volume) {
|
|
315
|
+
/** @type {?} */
|
|
316
|
+
var ele = (/** @type {?} */ (document.getElementById(v1)));
|
|
317
|
+
/** @type {?} */
|
|
318
|
+
var formArray = (/** @type {?} */ (this.remissionForm.controls.feesList));
|
|
319
|
+
if (ele.checked) {
|
|
320
|
+
formArray.at(i).get('refund_amount').setValue(AppAmt);
|
|
321
|
+
formArray.at(i).get('volume').setValue(Volume);
|
|
322
|
+
formArray.at(i).get('selected').setValue(true);
|
|
323
|
+
formArray.at(i).get('updated_volume').setValue(Volume);
|
|
324
|
+
((/** @type {?} */ (document.getElementById('feeAmount_' + v1)))).value = AppAmt;
|
|
325
|
+
document.getElementById('feeAmount_' + v1).removeAttribute("disabled");
|
|
326
|
+
if (Volume === 1) {
|
|
327
|
+
((/** @type {?} */ (document.getElementById('VolumeUpdated_' + v1)))).value = Volume;
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
((/** @type {?} */ (document.getElementById('feeVolumeUpdated_' + v1)))).value = Volume;
|
|
331
|
+
}
|
|
332
|
+
if (document.getElementById('feeVolumeUpdated_' + v1) !== null) {
|
|
333
|
+
document.getElementById('feeAmount_' + v1).removeAttribute("disabled");
|
|
334
|
+
document.getElementById('feeVolumeUpdated_' + v1).removeAttribute("disabled");
|
|
335
|
+
}
|
|
336
|
+
this.cd.detectChanges();
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
this.errorMsg = [];
|
|
340
|
+
document.getElementById('feeAmount_' + v1).setAttribute("disabled", "true");
|
|
341
|
+
this.remissionForm.value.feesList[i]["refund_amount"] = '';
|
|
342
|
+
this.remissionForm.value.feesList[i]["volume"] = '';
|
|
343
|
+
this.remissionForm.value.feesList[i]["selected"] = false;
|
|
344
|
+
((/** @type {?} */ (document.getElementById('feeAmount_' + v1)))).value = '';
|
|
345
|
+
if (Volume > 1) {
|
|
346
|
+
this.remissionForm.value.feesList[i]["volume"] = '';
|
|
347
|
+
((/** @type {?} */ (document.getElementById('feeVolumeUpdated_' + v1)))).value = '';
|
|
348
|
+
}
|
|
349
|
+
if (document.getElementById('feeVolumeUpdated_' + v1) !== null) {
|
|
350
|
+
document.getElementById('feeVolumeUpdated_' + v1).removeAttribute("disabled");
|
|
351
|
+
}
|
|
352
|
+
this.cd.detectChanges();
|
|
353
|
+
}
|
|
141
354
|
};
|
|
142
355
|
/**
|
|
143
356
|
* @return {?}
|
|
@@ -198,6 +411,8 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
198
411
|
/** @type {?} */
|
|
199
412
|
var LDUrl = _this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
200
413
|
LDUrl += "&caseType=" + _this.caseType;
|
|
414
|
+
LDUrl += _this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
415
|
+
LDUrl += _this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
201
416
|
if (_this.paymentLibComponent.bspaymentdcn) {
|
|
202
417
|
_this.router.routeReuseStrategy.shouldReuseRoute = (/**
|
|
203
418
|
* @return {?}
|
|
@@ -263,20 +478,28 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
263
478
|
*/
|
|
264
479
|
function () {
|
|
265
480
|
this.errorMessage = false;
|
|
481
|
+
// this.isFromCheckAnsPage = true;
|
|
482
|
+
this.errorMsg = [];
|
|
266
483
|
this.viewStatus = '';
|
|
267
484
|
this.isRefundRemission = false;
|
|
268
485
|
this.resetRemissionForm([false, false, false, false, false, false], 'All');
|
|
269
486
|
/** @type {?} */
|
|
270
487
|
var remissionctrls = this.remissionForm.controls
|
|
271
|
-
// isRemissionLessThanFee = this.fee.calculated_amount >= remissionctrls.amount.value;
|
|
488
|
+
// isRemissionLessThanFee = this.fee.calculated_amount >= remissionctrls.amount.value;
|
|
272
489
|
;
|
|
273
|
-
// isRemissionLessThanFee = this.fee.calculated_amount >= remissionctrls.amount.value;
|
|
490
|
+
// isRemissionLessThanFee = this.fee.calculated_amount >= remissionctrls.amount.value;
|
|
274
491
|
this.remissionForm.controls['refundReason'].setErrors(null);
|
|
275
492
|
this.remissionForm.controls['refundDDReason'].setErrors(null);
|
|
276
493
|
this.remissionForm.controls['amount'].setErrors(null);
|
|
277
494
|
if (this.remissionForm.dirty && this.remissionForm.valid) {
|
|
278
|
-
this.
|
|
279
|
-
|
|
495
|
+
if (!this.isFromCheckAnsPage) {
|
|
496
|
+
this.viewCompStatus = '';
|
|
497
|
+
this.viewStatus = "processretroremissonpage";
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
this.viewCompStatus = '';
|
|
501
|
+
this.viewStatus = 'checkretroremissionpage';
|
|
502
|
+
}
|
|
280
503
|
}
|
|
281
504
|
else {
|
|
282
505
|
if (remissionctrls['remissionCode'].value == '') {
|
|
@@ -307,6 +530,8 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
307
530
|
*/
|
|
308
531
|
function () {
|
|
309
532
|
this.errorMessage = false;
|
|
533
|
+
this.isFromCheckAnsPage = false;
|
|
534
|
+
this.errorMsg = [];
|
|
310
535
|
if (this.isRefundRemission) {
|
|
311
536
|
this.paymentLibComponent.iscancelClicked = true;
|
|
312
537
|
this.refundListAmount.emit();
|
|
@@ -324,6 +549,7 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
324
549
|
this.viewCompStatus = "addremission";
|
|
325
550
|
this.isRefundRemission = true;
|
|
326
551
|
this.errorMessage = '';
|
|
552
|
+
this.errorMsg = [];
|
|
327
553
|
if (this.isFromPaymentDetailPage) {
|
|
328
554
|
this.paymentLibComponent.viewName = 'payment-view';
|
|
329
555
|
}
|
|
@@ -376,6 +602,19 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
376
602
|
//}
|
|
377
603
|
}
|
|
378
604
|
};
|
|
605
|
+
/**
|
|
606
|
+
* @return {?}
|
|
607
|
+
*/
|
|
608
|
+
AddRemissionComponent.prototype.gotoAmountRetroRemission = /**
|
|
609
|
+
* @return {?}
|
|
610
|
+
*/
|
|
611
|
+
function () {
|
|
612
|
+
this.isFromCheckAnsPage = false;
|
|
613
|
+
this.viewStatus = 'processretroremissonpage';
|
|
614
|
+
this.viewCompStatus = '';
|
|
615
|
+
// this.isRefundRemission = true;
|
|
616
|
+
this.errorMessage = '';
|
|
617
|
+
};
|
|
379
618
|
/**
|
|
380
619
|
* @return {?}
|
|
381
620
|
*/
|
|
@@ -383,10 +622,30 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
383
622
|
* @return {?}
|
|
384
623
|
*/
|
|
385
624
|
function () {
|
|
625
|
+
this.isFromCheckAnsPage = true;
|
|
386
626
|
this.viewStatus = '';
|
|
387
627
|
this.viewCompStatus = 'addremission';
|
|
388
628
|
this.isRefundRemission = true;
|
|
389
629
|
this.errorMessage = '';
|
|
630
|
+
this.errorMsg = [];
|
|
631
|
+
};
|
|
632
|
+
/**
|
|
633
|
+
* @param {?=} note
|
|
634
|
+
* @return {?}
|
|
635
|
+
*/
|
|
636
|
+
AddRemissionComponent.prototype.gotoProcessRetroRemission = /**
|
|
637
|
+
* @param {?=} note
|
|
638
|
+
* @return {?}
|
|
639
|
+
*/
|
|
640
|
+
function (note) {
|
|
641
|
+
if (note) {
|
|
642
|
+
this.notification = { contact_details: note, notification_type: note.notification_type };
|
|
643
|
+
}
|
|
644
|
+
this.isFromCheckAnsPage = true;
|
|
645
|
+
this.viewStatus = 'remissionAddressPage';
|
|
646
|
+
this.viewCompStatus = '';
|
|
647
|
+
this.isRefundRemission = true;
|
|
648
|
+
this.errorMessage = '';
|
|
390
649
|
};
|
|
391
650
|
/**
|
|
392
651
|
* @return {?}
|
|
@@ -432,6 +691,7 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
432
691
|
function () {
|
|
433
692
|
var _this = this;
|
|
434
693
|
this.errorMessage = '';
|
|
694
|
+
this.errorMsg = [];
|
|
435
695
|
this.isConfirmationBtnDisabled = true;
|
|
436
696
|
if (this.isRefundRemission) {
|
|
437
697
|
this.retroRemission = true;
|
|
@@ -440,7 +700,7 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
440
700
|
this.remissionReference = this.remission.remission_reference;
|
|
441
701
|
}
|
|
442
702
|
/** @type {?} */
|
|
443
|
-
var requestBody = new PostIssueRefundRetroRemission(this.remissionReference);
|
|
703
|
+
var requestBody = new PostIssueRefundRetroRemission(this.remissionReference, this.contactDetailsObj);
|
|
444
704
|
this.paymentViewService.postRefundRetroRemission(requestBody).subscribe((/**
|
|
445
705
|
* @param {?} response
|
|
446
706
|
* @return {?}
|
|
@@ -478,7 +738,14 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
478
738
|
if (this.paymentLibComponent.REFUNDLIST === "true") {
|
|
479
739
|
this.isFromRefundListPage = true;
|
|
480
740
|
}
|
|
741
|
+
this.totalRefundAmount = this.remissionForm.value.feesList.reduce((/**
|
|
742
|
+
* @param {?} a
|
|
743
|
+
* @param {?} c
|
|
744
|
+
* @return {?}
|
|
745
|
+
*/
|
|
746
|
+
function (a, c) { return a + c.refund_amount * c.selected; }), 0);
|
|
481
747
|
this.errorMessage = '';
|
|
748
|
+
this.errorMsg = [];
|
|
482
749
|
this.refundReason = this.remissionForm.controls['refundReason'].value === null ? this.remissionForm.controls['refundDDReason'].value : this.remissionForm.controls['refundReason'].value;
|
|
483
750
|
if (!this.refundReason || this.refundReason === 'Select a different reason') {
|
|
484
751
|
this.refundHasError = true;
|
|
@@ -494,19 +761,43 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
494
761
|
this.refundListReason.emit({ reason: this.displayRefundReason, code: this.refundReason });
|
|
495
762
|
}
|
|
496
763
|
else {
|
|
764
|
+
if (this.isFromCheckAnsPage) {
|
|
765
|
+
this.totalRefundAmount = this.remissionForm.value.feesList.reduce((/**
|
|
766
|
+
* @param {?} a
|
|
767
|
+
* @param {?} c
|
|
768
|
+
* @return {?}
|
|
769
|
+
*/
|
|
770
|
+
function (a, c) { return a + c.refund_amount * c.selected; }), 0);
|
|
771
|
+
this.isFromCheckAnsPage = false;
|
|
772
|
+
this.viewStatus = 'checkissuerefundpage';
|
|
773
|
+
this.viewCompStatus = '';
|
|
774
|
+
return;
|
|
775
|
+
}
|
|
497
776
|
this.viewCompStatus = '';
|
|
498
|
-
this.viewStatus = '
|
|
777
|
+
this.viewStatus = 'contactDetailsPage';
|
|
499
778
|
}
|
|
500
779
|
}
|
|
501
780
|
else {
|
|
502
781
|
this.displayRefundReason = this.selectedRefundReason;
|
|
782
|
+
if (this.isFromCheckAnsPage) {
|
|
783
|
+
this.totalRefundAmount = this.remissionForm.value.feesList.reduce((/**
|
|
784
|
+
* @param {?} a
|
|
785
|
+
* @param {?} c
|
|
786
|
+
* @return {?}
|
|
787
|
+
*/
|
|
788
|
+
function (a, c) { return a + c.refund_amount * c.selected; }), 0);
|
|
789
|
+
this.isFromCheckAnsPage = false;
|
|
790
|
+
this.viewStatus = 'checkissuerefundpage';
|
|
791
|
+
this.viewCompStatus = '';
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
503
794
|
if (this.isFromRefundListPage) {
|
|
504
795
|
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
505
796
|
this.refundListReason.emit({ reason: this.selectedRefundReason, code: this.refundReason });
|
|
506
797
|
}
|
|
507
798
|
else {
|
|
508
799
|
this.viewCompStatus = '';
|
|
509
|
-
this.viewStatus = '
|
|
800
|
+
this.viewStatus = 'contactDetailsPage';
|
|
510
801
|
}
|
|
511
802
|
}
|
|
512
803
|
};
|
|
@@ -522,9 +813,238 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
522
813
|
this.viewStatus = '';
|
|
523
814
|
this.isRefundRemission = true;
|
|
524
815
|
this.errorMessage = false;
|
|
816
|
+
this.errorMsg = [];
|
|
525
817
|
this.refundHasError = false;
|
|
526
818
|
this.isReasonEmpty = false;
|
|
527
819
|
};
|
|
820
|
+
/**
|
|
821
|
+
* @param {?} isFullyRefund
|
|
822
|
+
* @return {?}
|
|
823
|
+
*/
|
|
824
|
+
AddRemissionComponent.prototype.gotoIssuePage = /**
|
|
825
|
+
* @param {?} isFullyRefund
|
|
826
|
+
* @return {?}
|
|
827
|
+
*/
|
|
828
|
+
function (isFullyRefund) {
|
|
829
|
+
if (isFullyRefund) {
|
|
830
|
+
this.viewCompStatus = 'issuerefundpage1';
|
|
831
|
+
this.getRefundReasons();
|
|
832
|
+
}
|
|
833
|
+
else {
|
|
834
|
+
[].forEach.call(document.querySelectorAll('input'), (/**
|
|
835
|
+
* @param {?} el
|
|
836
|
+
* @return {?}
|
|
837
|
+
*/
|
|
838
|
+
function (el) {
|
|
839
|
+
el.classList.remove('inline-error-class');
|
|
840
|
+
}));
|
|
841
|
+
/** @type {?} */
|
|
842
|
+
var checkboxs = document.getElementsByTagName('input');
|
|
843
|
+
this.errorMessage = '';
|
|
844
|
+
this.totalRefundAmount = 0;
|
|
845
|
+
this.errorMsg = [];
|
|
846
|
+
for (var j = 0; j < checkboxs.length; j++) {
|
|
847
|
+
if (checkboxs[j].checked) {
|
|
848
|
+
this.fullRefund = false;
|
|
849
|
+
/** @type {?} */
|
|
850
|
+
var quantity = +((/** @type {?} */ (document.getElementById('feeVolume_' + checkboxs[j].value)))).value;
|
|
851
|
+
/** @type {?} */
|
|
852
|
+
var amountToRefund = +((/** @type {?} */ (document.getElementById('feeAmount_' + checkboxs[j].value)))).value;
|
|
853
|
+
/** @type {?} */
|
|
854
|
+
var apportionAmount = +((/** @type {?} */ (document.getElementById('feeApportionAmount_' + checkboxs[j].value)))).value;
|
|
855
|
+
/** @type {?} */
|
|
856
|
+
var calculatedAmount = +((/** @type {?} */ (document.getElementById('calculatedAmount_' + checkboxs[j].value)))).value;
|
|
857
|
+
if (amountToRefund === apportionAmount) {
|
|
858
|
+
this.fullRefund = true;
|
|
859
|
+
}
|
|
860
|
+
if (amountToRefund === 0) {
|
|
861
|
+
this.elementId = 'feeAmount_' + checkboxs[j].value;
|
|
862
|
+
this.errorMsg.push('You need to enter a refund amount');
|
|
863
|
+
this.getErrorClass(this.elementId);
|
|
864
|
+
}
|
|
865
|
+
if (quantity === 1) {
|
|
866
|
+
if (amountToRefund > 0 && amountToRefund > apportionAmount) {
|
|
867
|
+
this.elementId = 'feeAmount_' + checkboxs[j].value;
|
|
868
|
+
this.errorMsg.push('The amount you want to refund is more than the amount paid');
|
|
869
|
+
this.getErrorClass(this.elementId);
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
if (quantity > 1) {
|
|
873
|
+
this.quantityUpdated = +((/** @type {?} */ (document.getElementById('feeVolumeUpdated_' + checkboxs[j].value)))).value;
|
|
874
|
+
if (this.quantityUpdated === 0) {
|
|
875
|
+
this.elementId = 'feeVolumeUpdated_' + checkboxs[j].value;
|
|
876
|
+
this.errorMsg.push('You need to enter quantity');
|
|
877
|
+
this.getErrorClass(this.elementId);
|
|
878
|
+
}
|
|
879
|
+
if (this.fullRefund && quantity !== this.quantityUpdated) {
|
|
880
|
+
this.elementId = 'feeVolumeUpdated_' + checkboxs[j].value;
|
|
881
|
+
this.errorMsg.push('The quantity you want to refund should be maximun available quantity');
|
|
882
|
+
this.getErrorClass(this.elementId);
|
|
883
|
+
}
|
|
884
|
+
if (!this.fullRefund && this.quantityUpdated > 0 && amountToRefund > 0) {
|
|
885
|
+
this.refundAmtForFeeVolumes = +((/** @type {?} */ (document.getElementById('feeVOl_' + checkboxs[j].value)))).innerText;
|
|
886
|
+
this.allowedRefundAmount = this.quantityUpdated * this.refundAmtForFeeVolumes;
|
|
887
|
+
if (this.allowedRefundAmount !== amountToRefund) {
|
|
888
|
+
this.elementId = 'feeAmount_' + checkboxs[j].value;
|
|
889
|
+
this.errorMsg.push('The Amount to Refund should be equal to the product of Fee Amount and quantity');
|
|
890
|
+
this.getErrorClass(this.elementId);
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
if (!this.fullRefund && amountToRefund > apportionAmount) {
|
|
894
|
+
this.elementId = 'feeAmount_' + checkboxs[j].value;
|
|
895
|
+
this.errorMsg.push('The amount you want to refund is more than the amount paid');
|
|
896
|
+
this.getErrorClass(this.elementId);
|
|
897
|
+
}
|
|
898
|
+
if (!this.fullRefund && this.quantityUpdated > 0 && this.quantityUpdated > quantity) {
|
|
899
|
+
this.elementId = 'feeVolumeUpdated_' + checkboxs[j].value;
|
|
900
|
+
this.errorMsg.push('The quantity you want to refund is more than the available quantity');
|
|
901
|
+
this.getErrorClass(this.elementId);
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
//this.remissionForm.value.feesList.find(id=>id=checkboxs[j].value)['refund_amount'] = apportionAmount;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
if (this.errorMsg.length === 0) {
|
|
908
|
+
if (this.isFromCheckAnsPage) {
|
|
909
|
+
this.isFromCheckAnsPage = false;
|
|
910
|
+
this.totalRefundAmount = this.remissionForm.value.feesList.reduce((/**
|
|
911
|
+
* @param {?} a
|
|
912
|
+
* @param {?} c
|
|
913
|
+
* @return {?}
|
|
914
|
+
*/
|
|
915
|
+
function (a, c) { return a + c.refund_amount * c.selected; }), 0);
|
|
916
|
+
this.fees = this.remissionForm.value.feesList.filter((/**
|
|
917
|
+
* @param {?} value
|
|
918
|
+
* @return {?}
|
|
919
|
+
*/
|
|
920
|
+
function (value) { return value.selected === true; }));
|
|
921
|
+
this.viewStatus = 'checkissuerefundpage';
|
|
922
|
+
this.viewCompStatus = '';
|
|
923
|
+
return;
|
|
924
|
+
}
|
|
925
|
+
else if (this.isFromRefundStatusPage) {
|
|
926
|
+
/** @type {?} */
|
|
927
|
+
var remissionctrls = this.remissionForm.controls;
|
|
928
|
+
this.totalRefundAmount = this.remissionForm.value.feesList.reduce((/**
|
|
929
|
+
* @param {?} a
|
|
930
|
+
* @param {?} c
|
|
931
|
+
* @return {?}
|
|
932
|
+
*/
|
|
933
|
+
function (a, c) { return a + c.refund_amount * c.selected; }), 0);
|
|
934
|
+
this.refundListAmount.emit(this.totalRefundAmount.toString());
|
|
935
|
+
this.fees = this.remissionForm.value.feesList.filter((/**
|
|
936
|
+
* @param {?} value
|
|
937
|
+
* @return {?}
|
|
938
|
+
*/
|
|
939
|
+
function (value) { return value.selected === true; }));
|
|
940
|
+
this.refundFees.emit(this.fees);
|
|
941
|
+
return;
|
|
942
|
+
}
|
|
943
|
+
this.viewCompStatus = 'issuerefundpage1';
|
|
944
|
+
this.getRefundReasons();
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
};
|
|
948
|
+
/**
|
|
949
|
+
* @param {?} value
|
|
950
|
+
* @param {?} amount
|
|
951
|
+
* @param {?} volume
|
|
952
|
+
* @param {?} i
|
|
953
|
+
* @return {?}
|
|
954
|
+
*/
|
|
955
|
+
AddRemissionComponent.prototype.calAmtToRefund = /**
|
|
956
|
+
* @param {?} value
|
|
957
|
+
* @param {?} amount
|
|
958
|
+
* @param {?} volume
|
|
959
|
+
* @param {?} i
|
|
960
|
+
* @return {?}
|
|
961
|
+
*/
|
|
962
|
+
function (value, amount, volume, i) {
|
|
963
|
+
/** @type {?} */
|
|
964
|
+
var volumeFee = amount / volume;
|
|
965
|
+
/** @type {?} */
|
|
966
|
+
var amtToRefund = value * volumeFee;
|
|
967
|
+
/** @type {?} */
|
|
968
|
+
var formArray = (/** @type {?} */ (this.remissionForm.controls.feesList));
|
|
969
|
+
formArray.at(i).get('refund_amount').setValue(amtToRefund);
|
|
970
|
+
// formArray.at(i).get('volume').setValue(value);
|
|
971
|
+
// (<HTMLInputElement>document.getElementById('feeAmount_'+i)).value = +amtToRefund;
|
|
972
|
+
// const formControl = this.remissionForm.controls.feesList['volume'].at(i);
|
|
973
|
+
// formControl.setValue(value);
|
|
974
|
+
};
|
|
975
|
+
/**
|
|
976
|
+
* @param {?=} note
|
|
977
|
+
* @return {?}
|
|
978
|
+
*/
|
|
979
|
+
AddRemissionComponent.prototype.gotoContactDetailsPage = /**
|
|
980
|
+
* @param {?=} note
|
|
981
|
+
* @return {?}
|
|
982
|
+
*/
|
|
983
|
+
function (note) {
|
|
984
|
+
if (note) {
|
|
985
|
+
this.notification = { contact_details: note, notification_type: note.notification_type };
|
|
986
|
+
}
|
|
987
|
+
this.errorMessage = '';
|
|
988
|
+
this.viewCompStatus = '';
|
|
989
|
+
this.viewStatus = 'contactDetailsPage';
|
|
990
|
+
this.isRefundRemission = true;
|
|
991
|
+
this.errorMessage = false;
|
|
992
|
+
};
|
|
993
|
+
/**
|
|
994
|
+
* @return {?}
|
|
995
|
+
*/
|
|
996
|
+
AddRemissionComponent.prototype.getRefundReasons = /**
|
|
997
|
+
* @return {?}
|
|
998
|
+
*/
|
|
999
|
+
function () {
|
|
1000
|
+
var _this = this;
|
|
1001
|
+
if (this.viewCompStatus === 'issuerefundpage1') {
|
|
1002
|
+
this.refundService.getRefundReasons().subscribe((/**
|
|
1003
|
+
* @param {?} refundReasons
|
|
1004
|
+
* @return {?}
|
|
1005
|
+
*/
|
|
1006
|
+
function (refundReasons) {
|
|
1007
|
+
_this.refundReasons = refundReasons.filter((/**
|
|
1008
|
+
* @param {?} data
|
|
1009
|
+
* @return {?}
|
|
1010
|
+
*/
|
|
1011
|
+
function (data) { return data.recently_used === false; }));
|
|
1012
|
+
_this.refundReasons = _this.refundReasons.filter((/**
|
|
1013
|
+
* @param {?} data
|
|
1014
|
+
* @return {?}
|
|
1015
|
+
*/
|
|
1016
|
+
function (data) { return data.name !== 'Retrospective remission'; }));
|
|
1017
|
+
_this.cd.detectChanges();
|
|
1018
|
+
_this.commonRefundReasons = refundReasons.filter((/**
|
|
1019
|
+
* @param {?} data
|
|
1020
|
+
* @return {?}
|
|
1021
|
+
*/
|
|
1022
|
+
function (data) { return data.recently_used === true; }));
|
|
1023
|
+
_this.commonRefundReasons.sort((/**
|
|
1024
|
+
* @param {?} a
|
|
1025
|
+
* @param {?} b
|
|
1026
|
+
* @return {?}
|
|
1027
|
+
*/
|
|
1028
|
+
function (a, b) { return a.toString().localeCompare(b); }));
|
|
1029
|
+
_this.cd.detectChanges();
|
|
1030
|
+
}));
|
|
1031
|
+
}
|
|
1032
|
+
};
|
|
1033
|
+
/**
|
|
1034
|
+
* @param {?} elementId
|
|
1035
|
+
* @return {?}
|
|
1036
|
+
*/
|
|
1037
|
+
AddRemissionComponent.prototype.getErrorClass = /**
|
|
1038
|
+
* @param {?} elementId
|
|
1039
|
+
* @return {?}
|
|
1040
|
+
*/
|
|
1041
|
+
function (elementId) {
|
|
1042
|
+
if (this.errorMsg.length > 0) {
|
|
1043
|
+
/** @type {?} */
|
|
1044
|
+
var ele = document.getElementById(elementId);
|
|
1045
|
+
ele.classList.add('inline-error-class');
|
|
1046
|
+
}
|
|
1047
|
+
};
|
|
528
1048
|
/**
|
|
529
1049
|
* @return {?}
|
|
530
1050
|
*/
|
|
@@ -532,29 +1052,54 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
532
1052
|
* @return {?}
|
|
533
1053
|
*/
|
|
534
1054
|
function () {
|
|
535
|
-
|
|
1055
|
+
this.isFromCheckAnsPage = true;
|
|
536
1056
|
this.errorMessage = '';
|
|
1057
|
+
this.errorMsg = [];
|
|
537
1058
|
this.refundHasError = false;
|
|
538
1059
|
this.isReasonEmpty = false;
|
|
539
|
-
this.viewCompStatus = '
|
|
1060
|
+
this.viewCompStatus = 'issuerefundpage1';
|
|
540
1061
|
this.viewStatus = '';
|
|
541
1062
|
this.isRefundRemission = true;
|
|
542
1063
|
};
|
|
543
1064
|
/**
|
|
1065
|
+
* @param {?} isFullyRefund
|
|
544
1066
|
* @return {?}
|
|
545
1067
|
*/
|
|
546
1068
|
AddRemissionComponent.prototype.confirmIssueRefund = /**
|
|
1069
|
+
* @param {?} isFullyRefund
|
|
547
1070
|
* @return {?}
|
|
548
1071
|
*/
|
|
549
|
-
function () {
|
|
1072
|
+
function (isFullyRefund) {
|
|
550
1073
|
var _this = this;
|
|
551
1074
|
this.isConfirmationBtnDisabled = true;
|
|
552
1075
|
this.errorMessage = '';
|
|
1076
|
+
this.errorMsg = [];
|
|
553
1077
|
if (this.isRefundRemission) {
|
|
554
1078
|
this.retroRemission = true;
|
|
555
1079
|
}
|
|
1080
|
+
if (isFullyRefund) {
|
|
1081
|
+
this.totalRefundAmount = this.payment.amount;
|
|
1082
|
+
}
|
|
1083
|
+
if (!isFullyRefund) {
|
|
1084
|
+
this.fees = this.remissionForm.value.feesList.filter((/**
|
|
1085
|
+
* @param {?} value
|
|
1086
|
+
* @return {?}
|
|
1087
|
+
*/
|
|
1088
|
+
function (value) { return value.selected === true; }));
|
|
1089
|
+
}
|
|
1090
|
+
this.fees = this.fees.map((/**
|
|
1091
|
+
* @param {?} obj
|
|
1092
|
+
* @return {?}
|
|
1093
|
+
*/
|
|
1094
|
+
function (obj) { return ({ id: obj.id,
|
|
1095
|
+
code: obj.code,
|
|
1096
|
+
version: obj.version,
|
|
1097
|
+
apportion_amount: obj.apportion_amount,
|
|
1098
|
+
calculated_amount: obj.calculated_amount,
|
|
1099
|
+
updated_volume: obj.updated_volume,
|
|
1100
|
+
refund_amount: obj.refund_amount }); }));
|
|
556
1101
|
/** @type {?} */
|
|
557
|
-
var requestBody = new PostRefundRetroRemission(this.payment.reference, this.refundReason);
|
|
1102
|
+
var requestBody = new PostRefundRetroRemission(this.contactDetailsObj, this.fees, this.payment.reference, this.refundReason, this.totalRefundAmount);
|
|
558
1103
|
this.paymentViewService.postRefundsReason(requestBody).subscribe((/**
|
|
559
1104
|
* @param {?} response
|
|
560
1105
|
* @return {?}
|
|
@@ -578,53 +1123,98 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
578
1123
|
_this.cd.detectChanges();
|
|
579
1124
|
}));
|
|
580
1125
|
};
|
|
581
|
-
// Retro Refund
|
|
582
|
-
// Retro Refund
|
|
583
1126
|
/**
|
|
584
1127
|
* @return {?}
|
|
585
1128
|
*/
|
|
586
|
-
AddRemissionComponent.prototype.
|
|
587
|
-
// Retro Refund
|
|
588
|
-
/**
|
|
1129
|
+
AddRemissionComponent.prototype.gotoRefundReasonPage = /**
|
|
589
1130
|
* @return {?}
|
|
590
1131
|
*/
|
|
591
1132
|
function () {
|
|
592
|
-
|
|
593
|
-
this.
|
|
594
|
-
this.errorMessage = '';
|
|
595
|
-
if (this.isRefundRemission) {
|
|
596
|
-
this.retroRemission = true;
|
|
597
|
-
}
|
|
598
|
-
/** @type {?} */
|
|
599
|
-
var requestBody = new PostRefundRetroRemission(this.payment.reference, 'RR004-Retrospective remission');
|
|
600
|
-
this.paymentViewService.postRefundsReason(requestBody).subscribe((/**
|
|
601
|
-
* @param {?} response
|
|
602
|
-
* @return {?}
|
|
603
|
-
*/
|
|
604
|
-
function (response) {
|
|
605
|
-
if (JSON.parse(response)) {
|
|
606
|
-
_this.viewCompStatus = '';
|
|
607
|
-
_this.viewStatus = 'retrorefundconfirmationpage';
|
|
608
|
-
_this.refundReference = JSON.parse(response).refund_reference;
|
|
609
|
-
if (JSON.parse(response).refund_amount) {
|
|
610
|
-
_this.refundAmount = JSON.parse(response).refund_amount;
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
}), (/**
|
|
614
|
-
* @param {?} error
|
|
615
|
-
* @return {?}
|
|
616
|
-
*/
|
|
617
|
-
function (error) {
|
|
618
|
-
_this.errorMessage = error;
|
|
619
|
-
_this.isConfirmationBtnDisabled = false;
|
|
620
|
-
}));
|
|
1133
|
+
this.viewStatus = '';
|
|
1134
|
+
this.viewCompStatus = 'issuerefundpage1';
|
|
621
1135
|
};
|
|
1136
|
+
// Retro Refund
|
|
1137
|
+
// confirmRetroRefund() {
|
|
1138
|
+
// this.isConfirmationBtnDisabled = true;
|
|
1139
|
+
// this.errorMessage = '';
|
|
1140
|
+
// this.errorMsg = [];
|
|
1141
|
+
// if( this.isRefundRemission) {
|
|
1142
|
+
// this.retroRemission = true;
|
|
1143
|
+
// }
|
|
1144
|
+
// const requestBody = new PostRefundRetroRemission(this.payment.reference,'RR004-Retrospective remission', this.contactDetailsObj);
|
|
1145
|
+
// this.paymentViewService.postRefundsReason(requestBody).subscribe(
|
|
1146
|
+
// response => {
|
|
1147
|
+
// if (JSON.parse(response)) {
|
|
1148
|
+
// this.viewCompStatus = '';
|
|
1149
|
+
// this.viewStatus = 'retrorefundconfirmationpage';
|
|
1150
|
+
// this.refundReference =JSON.parse(response).refund_reference;
|
|
1151
|
+
// if(JSON.parse(response).refund_amount) {
|
|
1152
|
+
// this.refundAmount = JSON.parse(response).refund_amount;
|
|
1153
|
+
// }
|
|
1154
|
+
// }
|
|
1155
|
+
// },
|
|
1156
|
+
// (error: any) => {
|
|
1157
|
+
// this.errorMessage = error;
|
|
1158
|
+
// this.isConfirmationBtnDisabled = false;
|
|
1159
|
+
// });
|
|
1160
|
+
// }
|
|
1161
|
+
// Retro Refund
|
|
1162
|
+
// confirmRetroRefund() {
|
|
1163
|
+
// this.isConfirmationBtnDisabled = true;
|
|
1164
|
+
// this.errorMessage = '';
|
|
1165
|
+
// this.errorMsg = [];
|
|
1166
|
+
// if( this.isRefundRemission) {
|
|
1167
|
+
// this.retroRemission = true;
|
|
1168
|
+
// }
|
|
1169
|
+
// const requestBody = new PostRefundRetroRemission(this.payment.reference,'RR004-Retrospective remission', this.contactDetailsObj);
|
|
1170
|
+
// this.paymentViewService.postRefundsReason(requestBody).subscribe(
|
|
1171
|
+
// response => {
|
|
1172
|
+
// if (JSON.parse(response)) {
|
|
1173
|
+
// this.viewCompStatus = '';
|
|
1174
|
+
// this.viewStatus = 'retrorefundconfirmationpage';
|
|
1175
|
+
// this.refundReference =JSON.parse(response).refund_reference;
|
|
1176
|
+
// if(JSON.parse(response).refund_amount) {
|
|
1177
|
+
// this.refundAmount = JSON.parse(response).refund_amount;
|
|
1178
|
+
// }
|
|
1179
|
+
// }
|
|
1180
|
+
// },
|
|
1181
|
+
// (error: any) => {
|
|
1182
|
+
// this.errorMessage = error;
|
|
1183
|
+
// this.isConfirmationBtnDisabled = false;
|
|
1184
|
+
// });
|
|
1185
|
+
// }
|
|
622
1186
|
/**
|
|
623
1187
|
* @param {?} key
|
|
624
1188
|
* @param {?} value
|
|
625
1189
|
* @return {?}
|
|
626
1190
|
*/
|
|
627
|
-
AddRemissionComponent.prototype.selectRadioButton =
|
|
1191
|
+
AddRemissionComponent.prototype.selectRadioButton =
|
|
1192
|
+
// Retro Refund
|
|
1193
|
+
// confirmRetroRefund() {
|
|
1194
|
+
// this.isConfirmationBtnDisabled = true;
|
|
1195
|
+
// this.errorMessage = '';
|
|
1196
|
+
// this.errorMsg = [];
|
|
1197
|
+
// if( this.isRefundRemission) {
|
|
1198
|
+
// this.retroRemission = true;
|
|
1199
|
+
// }
|
|
1200
|
+
// const requestBody = new PostRefundRetroRemission(this.payment.reference,'RR004-Retrospective remission', this.contactDetailsObj);
|
|
1201
|
+
// this.paymentViewService.postRefundsReason(requestBody).subscribe(
|
|
1202
|
+
// response => {
|
|
1203
|
+
// if (JSON.parse(response)) {
|
|
1204
|
+
// this.viewCompStatus = '';
|
|
1205
|
+
// this.viewStatus = 'retrorefundconfirmationpage';
|
|
1206
|
+
// this.refundReference =JSON.parse(response).refund_reference;
|
|
1207
|
+
// if(JSON.parse(response).refund_amount) {
|
|
1208
|
+
// this.refundAmount = JSON.parse(response).refund_amount;
|
|
1209
|
+
// }
|
|
1210
|
+
// }
|
|
1211
|
+
// },
|
|
1212
|
+
// (error: any) => {
|
|
1213
|
+
// this.errorMessage = error;
|
|
1214
|
+
// this.isConfirmationBtnDisabled = false;
|
|
1215
|
+
// });
|
|
1216
|
+
// }
|
|
1217
|
+
/**
|
|
628
1218
|
* @param {?} key
|
|
629
1219
|
* @param {?} value
|
|
630
1220
|
* @return {?}
|
|
@@ -637,6 +1227,7 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
637
1227
|
remissionctrls['reason'].reset();
|
|
638
1228
|
this.isRefundReasonsSelected = true;
|
|
639
1229
|
this.errorMessage = false;
|
|
1230
|
+
this.errorMsg = [];
|
|
640
1231
|
this.isReasonEmpty = false;
|
|
641
1232
|
this.showReasonText = false;
|
|
642
1233
|
this.refundHasError = false;
|
|
@@ -671,6 +1262,38 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
671
1262
|
this.refundReason = args.target.options[args.target.options.selectedIndex].id;
|
|
672
1263
|
}
|
|
673
1264
|
};
|
|
1265
|
+
/**
|
|
1266
|
+
* @param {?} obj
|
|
1267
|
+
* @param {?} type
|
|
1268
|
+
* @return {?}
|
|
1269
|
+
*/
|
|
1270
|
+
AddRemissionComponent.prototype.getContactDetails = /**
|
|
1271
|
+
* @param {?} obj
|
|
1272
|
+
* @param {?} type
|
|
1273
|
+
* @return {?}
|
|
1274
|
+
*/
|
|
1275
|
+
function (obj, type) {
|
|
1276
|
+
this.contactDetailsObj = obj;
|
|
1277
|
+
this.viewCompStatus = '';
|
|
1278
|
+
this.viewStatus = type;
|
|
1279
|
+
};
|
|
1280
|
+
/**
|
|
1281
|
+
* @return {?}
|
|
1282
|
+
*/
|
|
1283
|
+
AddRemissionComponent.prototype.gotoPartialFeeRefundScreen = /**
|
|
1284
|
+
* @return {?}
|
|
1285
|
+
*/
|
|
1286
|
+
function () {
|
|
1287
|
+
if (this.isFromRefundStatusPage) {
|
|
1288
|
+
/** @type {?} */
|
|
1289
|
+
var remissionctrls = this.remissionForm.controls;
|
|
1290
|
+
this.refundListReason.emit({ reason: this.displayRefundReason, code: this.refundReason });
|
|
1291
|
+
return;
|
|
1292
|
+
}
|
|
1293
|
+
this.refundHasError = false;
|
|
1294
|
+
this.viewCompStatus = 'issuerefund';
|
|
1295
|
+
this.viewStatus = '';
|
|
1296
|
+
};
|
|
674
1297
|
/**
|
|
675
1298
|
* @param {?} event
|
|
676
1299
|
* @return {?}
|
|
@@ -682,7 +1305,21 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
682
1305
|
function (event) {
|
|
683
1306
|
var _this = this;
|
|
684
1307
|
this.errorMessage = '';
|
|
1308
|
+
this.errorMsg = [];
|
|
1309
|
+
this.isFromCheckAnsPage = false;
|
|
685
1310
|
event.preventDefault();
|
|
1311
|
+
if (this.isFromRefundStatusPage) {
|
|
1312
|
+
/** @type {?} */
|
|
1313
|
+
var remissionctrls = this.remissionForm.controls;
|
|
1314
|
+
this.totalRefundAmount = this.remissionForm.value.feesList.reduce((/**
|
|
1315
|
+
* @param {?} a
|
|
1316
|
+
* @param {?} c
|
|
1317
|
+
* @return {?}
|
|
1318
|
+
*/
|
|
1319
|
+
function (a, c) { return a + c.refund_amount * c.selected; }), 0);
|
|
1320
|
+
this.refundListAmount.emit(this.totalRefundAmount.toString());
|
|
1321
|
+
return;
|
|
1322
|
+
}
|
|
686
1323
|
if (this.isFromServiceRequestPage && !this.isFromPaymentDetailPage) {
|
|
687
1324
|
this.viewStatus = 'order-full-view';
|
|
688
1325
|
this.viewCompStatus = '';
|
|
@@ -717,64 +1354,40 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
717
1354
|
}
|
|
718
1355
|
this.viewCompStatus = '';
|
|
719
1356
|
}
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
// partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
755
|
-
// partUrl += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
756
|
-
// partUrl += `&caseType=${this.caseType}`;
|
|
757
|
-
// if(this.isFromPaymentDetailPage) {
|
|
758
|
-
// partUrl += this.paymentLibComponent.isFromPaymentDetailPage
|
|
759
|
-
// }
|
|
760
|
-
// if(!this.paymentLibComponent.TAKEPAYMENT) {
|
|
761
|
-
// this.paymentLibComponent.TAKEPAYMENT = undefined;
|
|
762
|
-
// }
|
|
763
|
-
// if ( this.paymentLibComponent.SERVICEREQUEST) {
|
|
764
|
-
// const url = `/payment-history/${this.ccdCaseNumber}?view=case-transactions&selectedOption=${this.option}${partUrl}`;
|
|
765
|
-
// this.router.routeReuseStrategy.shouldReuseRoute = () => false;
|
|
766
|
-
// this.router.onSameUrlNavigation = 'reload';
|
|
767
|
-
// this.router.navigateByUrl(url);
|
|
768
|
-
// } else {
|
|
769
|
-
// const url = `/payment-history/${this.ccdCaseNumber}?view=case-transactions&takePayment=${this.paymentLibComponent.TAKEPAYMENT}&selectedOption=${this.option}${partUrl}`;
|
|
770
|
-
// this.router.routeReuseStrategy.shouldReuseRoute = () => false;
|
|
771
|
-
// this.router.onSameUrlNavigation = 'reload';
|
|
772
|
-
// this.router.navigateByUrl(url);
|
|
773
|
-
// }
|
|
774
|
-
// } else {
|
|
775
|
-
// this.paymentLibComponent.viewName === 'refundstatuslist';
|
|
776
|
-
// this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
777
|
-
// }
|
|
1357
|
+
};
|
|
1358
|
+
/**
|
|
1359
|
+
* @param {?=} note
|
|
1360
|
+
* @return {?}
|
|
1361
|
+
*/
|
|
1362
|
+
AddRemissionComponent.prototype.gotoAddressPage = /**
|
|
1363
|
+
* @param {?=} note
|
|
1364
|
+
* @return {?}
|
|
1365
|
+
*/
|
|
1366
|
+
function (note) {
|
|
1367
|
+
if (note) {
|
|
1368
|
+
this.notification = { contact_details: note, notification_type: note.notification_type };
|
|
1369
|
+
}
|
|
1370
|
+
this.errorMessage = '';
|
|
1371
|
+
this.viewCompStatus = 'addrefundforremission';
|
|
1372
|
+
this.viewStatus = '';
|
|
1373
|
+
this.isRefundRemission = true;
|
|
1374
|
+
this.errorMessage = false;
|
|
1375
|
+
};
|
|
1376
|
+
/**
|
|
1377
|
+
* @param {?} event
|
|
1378
|
+
* @return {?}
|
|
1379
|
+
*/
|
|
1380
|
+
AddRemissionComponent.prototype.gotoRemissionSuccess = /**
|
|
1381
|
+
* @param {?} event
|
|
1382
|
+
* @return {?}
|
|
1383
|
+
*/
|
|
1384
|
+
function (event) {
|
|
1385
|
+
event.preventDefault();
|
|
1386
|
+
this.errorMessage = '';
|
|
1387
|
+
this.viewCompStatus = '';
|
|
1388
|
+
this.viewStatus = 'retroremissionconfirmationpage';
|
|
1389
|
+
this.isRefundRemission = true;
|
|
1390
|
+
this.errorMessage = false;
|
|
778
1391
|
};
|
|
779
1392
|
/**
|
|
780
1393
|
* @return {?}
|
|
@@ -785,9 +1398,12 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
785
1398
|
function () {
|
|
786
1399
|
this.OrderslistService.setnavigationPage('casetransactions');
|
|
787
1400
|
this.errorMessage = '';
|
|
1401
|
+
this.errorMsg = [];
|
|
788
1402
|
this.paymentLibComponent.viewName = 'case-transactions';
|
|
789
1403
|
this.paymentLibComponent.VIEW = 'case-transactions';
|
|
790
1404
|
this.paymentLibComponent.ISTURNOFF = this.isTurnOff;
|
|
1405
|
+
this.paymentLibComponent.ISNEWPCIPALOFF = this.isNewPcipalOff;
|
|
1406
|
+
this.paymentLibComponent.ISOLDPCIPALOFF = this.isOldPcipalOff;
|
|
791
1407
|
this.paymentLibComponent.isFromServiceRequestPage = true;
|
|
792
1408
|
this.resetOrderData();
|
|
793
1409
|
/** @type {?} */
|
|
@@ -796,6 +1412,8 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
796
1412
|
partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
797
1413
|
partUrl += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
798
1414
|
partUrl += "&caseType=" + this.caseType;
|
|
1415
|
+
partUrl += this.paymentLibComponent.ISNEWPCIPALOFF ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
1416
|
+
partUrl += this.paymentLibComponent.ISOLDPCIPALOFF ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
799
1417
|
/** @type {?} */
|
|
800
1418
|
var url = "/payment-history/" + this.ccdCaseNumber + "?view=case-transactions&takePayment=" + this.paymentLibComponent.TAKEPAYMENT + "&selectedOption=" + this.option + partUrl;
|
|
801
1419
|
this.router.routeReuseStrategy.shouldReuseRoute = (/**
|
|
@@ -814,30 +1432,38 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
814
1432
|
* @return {?}
|
|
815
1433
|
*/
|
|
816
1434
|
function (event) {
|
|
817
|
-
var _this = this;
|
|
818
1435
|
event.preventDefault();
|
|
819
|
-
|
|
1436
|
+
this.errorMsg = [];
|
|
1437
|
+
if (this.paymentLibComponent.isFromServiceRequestPage !== undefined && !this.paymentLibComponent.isFromServiceRequestPage) {
|
|
1438
|
+
this.OrderslistService.setnavigationPage('casetransactions');
|
|
1439
|
+
this.OrderslistService.setisFromServiceRequestPage(false);
|
|
1440
|
+
this.paymentLibComponent.VIEW = 'case-transactions';
|
|
1441
|
+
this.paymentLibComponent.viewName = 'case-transactions';
|
|
1442
|
+
this.paymentLibComponent.ISBSENABLE = true;
|
|
1443
|
+
this.paymentLibComponent.isRefundStatusView = false;
|
|
820
1444
|
this.OrderslistService.setnavigationPage('casetransactions');
|
|
821
1445
|
this.OrderslistService.setisFromServiceRequestPage(false);
|
|
822
1446
|
this.paymentLibComponent.VIEW = 'case-transactions';
|
|
823
1447
|
this.paymentLibComponent.viewName = 'case-transactions';
|
|
824
1448
|
this.paymentLibComponent.ISBSENABLE = true;
|
|
825
1449
|
this.paymentLibComponent.isRefundStatusView = false;
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
1450
|
+
this.resetOrderData();
|
|
1451
|
+
/** @type {?} */
|
|
1452
|
+
var partUrl = this.bsPaymentDcnNumber ? "&dcn=" + this.bsPaymentDcnNumber : '';
|
|
1453
|
+
partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
|
|
1454
|
+
partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
1455
|
+
partUrl += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
1456
|
+
partUrl += "&caseType=" + this.caseType;
|
|
1457
|
+
partUrl += this.paymentLibComponent.ISNEWPCIPALOFF ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
1458
|
+
partUrl += this.paymentLibComponent.ISOLDPCIPALOFF ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
1459
|
+
/** @type {?} */
|
|
1460
|
+
var url = "/payment-history/" + this.ccdCaseNumber + "?view=case-transactions&takePayment=" + this.paymentLibComponent.TAKEPAYMENT + "&selectedOption=" + this.option + partUrl;
|
|
1461
|
+
this.router.routeReuseStrategy.shouldReuseRoute = (/**
|
|
1462
|
+
* @return {?}
|
|
1463
|
+
*/
|
|
1464
|
+
function () { return false; });
|
|
1465
|
+
this.router.onSameUrlNavigation = 'reload';
|
|
1466
|
+
this.router.navigateByUrl(url);
|
|
841
1467
|
}
|
|
842
1468
|
else {
|
|
843
1469
|
if (this.paymentLibComponent.REFUNDLIST) {
|
|
@@ -853,33 +1479,18 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
853
1479
|
this.errorMessage = '';
|
|
854
1480
|
this.paymentLibComponent.viewName = 'case-transactions';
|
|
855
1481
|
this.paymentLibComponent.ISTURNOFF = this.isTurnOff;
|
|
1482
|
+
this.paymentLibComponent.ISNEWPCIPALOFF = this.isNewPcipalOff;
|
|
1483
|
+
this.paymentLibComponent.ISOLDPCIPALOFF = this.isOldPcipalOff;
|
|
856
1484
|
this.paymentLibComponent.isFromServiceRequestPage = true;
|
|
857
1485
|
this.paymentLibComponent.ISBSENABLE = true;
|
|
858
|
-
this.paymentViewService.getBSfeature().subscribe((/**
|
|
859
|
-
* @param {?} features
|
|
860
|
-
* @return {?}
|
|
861
|
-
*/
|
|
862
|
-
function (features) {
|
|
863
|
-
/** @type {?} */
|
|
864
|
-
var result = JSON.parse(features).filter((/**
|
|
865
|
-
* @param {?} feature
|
|
866
|
-
* @return {?}
|
|
867
|
-
*/
|
|
868
|
-
function (feature) { return feature.uid === BS_ENABLE_FLAG; }));
|
|
869
|
-
_this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
|
|
870
|
-
}), (/**
|
|
871
|
-
* @param {?} err
|
|
872
|
-
* @return {?}
|
|
873
|
-
*/
|
|
874
|
-
function (err) {
|
|
875
|
-
_this.paymentLibComponent.ISBSENABLE = false;
|
|
876
|
-
}));
|
|
877
1486
|
/** @type {?} */
|
|
878
1487
|
var partUrl = this.bsPaymentDcnNumber ? "&dcn=" + this.bsPaymentDcnNumber : '';
|
|
879
1488
|
partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
|
|
880
1489
|
partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
881
1490
|
partUrl += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
882
1491
|
partUrl += "&caseType=" + this.caseType;
|
|
1492
|
+
partUrl += this.paymentLibComponent.ISNEWPCIPALOFF ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
1493
|
+
partUrl += this.paymentLibComponent.ISOLDPCIPALOFF ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
883
1494
|
if (this.isFromPaymentDetailPage) {
|
|
884
1495
|
partUrl += this.paymentLibComponent.isFromPaymentDetailPage;
|
|
885
1496
|
}
|
|
@@ -921,6 +1532,17 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
921
1532
|
this.OrderslistService.setorderRemissionTotal(null);
|
|
922
1533
|
this.OrderslistService.setorderFeesTotal(null);
|
|
923
1534
|
};
|
|
1535
|
+
/**
|
|
1536
|
+
* @return {?}
|
|
1537
|
+
*/
|
|
1538
|
+
AddRemissionComponent.prototype.changeRefundAmount = /**
|
|
1539
|
+
* @return {?}
|
|
1540
|
+
*/
|
|
1541
|
+
function () {
|
|
1542
|
+
this.isFromCheckAnsPage = true;
|
|
1543
|
+
this.viewCompStatus = 'issuerefund';
|
|
1544
|
+
this.viewStatus = '';
|
|
1545
|
+
};
|
|
924
1546
|
/**
|
|
925
1547
|
* @param {?} currency
|
|
926
1548
|
* @return {?}
|
|
@@ -938,8 +1560,8 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
938
1560
|
AddRemissionComponent.decorators = [
|
|
939
1561
|
{ type: Component, args: [{
|
|
940
1562
|
selector: 'ccpay-add-remission',
|
|
941
|
-
template: "<div class=\"add-remission pagesize\">\n <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"viewStatus === 'main' && !isRefundRemission \">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSION'>\n <h1 class=\"heading-large\">Add remission </h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n Add remission to {{ fee?.code }}: {{ fee?.description }}\n <span class=\"form-hint\">Enter remission for reference. For example: HWF-A1B-23C OR PA21-123456</span>\n </label>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"amount\">\n How much does the applicant need to pay?\n </label>\n\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <div class=\"hmcts-currency-input\">\n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"text\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">The remission amount must be less than the total fee</span>\n </p>\n </div>\n </div>\n </form>\n <button class=\"button\" type=\"submit\" (click)=\"addRemission()\">\n Submit\n </button>\n </div>\n </form>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'confirmation'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSIONCONFIRMATION'>\n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to add remission to this fee?\n </strong>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission code:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.remissionCode.value }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code:</td>\n <td class=\"govuk-table__cell\">{{ fee.code }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee description:</td>\n <td class=\"govuk-table__cell\">{{ fee.description }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Amount the applicant must pay:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission.emit()\">\n Cancel\n </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmRemission()\">\n Confirm\n </button>\n\n </ng-container>\n\n <!-- Add retro remission changes-->\n\n <ng-container *ngIf=\"viewCompStatus === 'addremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSADDRETROREMISSIONPAGE'>\n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens}}</h1>\n <h1 class=\"heading-large\">Enter help with fees or remission reference</h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n <span class=\"form-hint\">For example: HWF-A1B-23C OR PA21-123456</span>\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n\n </div>\n\n </form>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoServiceRequestPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"addRemissionCode()\" class=\"govuk-button\"> Continue</button>\n </div>\n <p><a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">Cancel</a></p>\n </div>\n </form>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'processretroremissonpage'\" >\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSRETROREMISSIONPAGE'>\n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 *ngIf=\"remessionPayment?.status === 'Success' || isFromRefundListPage\" class=\"heading-medium\">\n Enter the amount to be refunded\n </h1>\n <h1 *ngIf=\"remessionPayment?.status !== 'Success' && !isFromRefundListPage\" class=\"heading-medium\">\n Enter the remission amount\n </h1>\n <h1 *ngIf=\"remessionPayment?.status === 'undefined'\" class=\"heading-medium\">\n Enter the amount\n </h1>\n </legend>\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">You cannot add a remission that's more than the fee amount.</span>\n </p>\n <div class=\"hmcts-currency-input\">\n\n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"number\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n\n\n </div>\n </fieldset>\n </form>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoAddRetroRemissionCodePage()\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoCheckRetroRemissionPage(payment)\" class=\"govuk-button\"> Continue</button>\n\n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a>\n </p>\n </div>\n\n </form>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkretroremissionpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKRETROREMISSIONCONFIRMATION'>\n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.reference: ' '}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ remessionPayment ? getFormattedCurrency(remessionPayment.amount): ' ' | currency :'GBP':'symbol':'1.2-2'}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment status</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.status: ''}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee</td>\n <td class=\"govuk-table__cell\">{{ fee.code }} - {{ fee.description }} ({{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}) </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Help with fees or remission reference</td>\n <td class=\"govuk-table__cell\"> {{ remissionForm.controls.remissionCode.value }}\n <a (click)=\"gotoProcessRetroRemissionPage()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"remessionPayment.status !== 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission amount</td>\n <td class=\"govuk-table__cell\">{{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n <a (click)=\"addRemissionCode()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"addRemissionCode()\">Previous</button>\n <button type=\"submit\" [disabled]=\"isConfirmationBtnDisabled\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"confirmRetroRemission()\"> Add remission </button>\n <p> <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\"> Cancel</a> </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retroremissionconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONCONFIRMATIONPAGE'>\n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Remission added\n </h1>\n <div *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>The amount to be refunded should be {{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</strong></p>\n\n </div>\n </div>\n <div *ngIf=\"remessionPayment.status === 'Success'\" >\n <button type=\"submit\" [disabled]=\"!isRemissionApplied\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"processRefund()\">Submit refund </button>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'refundconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'>\n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n\n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n\n </ng-container>\n\n <!-- Issue Refund Section -->\n\n <ng-container *ngIf=\"viewCompStatus === 'issuerefund' && isRefundRemission\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ISSUEREFUNDPAGE'>\n <h1 class=\"heading-large\">Process refund</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <h1 class=\"heading-large\">Why are you making this refund?\n </h1>\n\n\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n\n <div\n [ngClass]=\"refundHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" >\n <p class=\"inline-error-message\" *ngIf=\"refundHasError\">\n <span *ngIf=\"refundHasError\">Select a reason why you\u2019re making this refund</span>\n </p>\n\n\n\n <div class = \"container-fluid\">\n <div class=\"row\">\n <div class=\"govuk-radios__item col-md-4\" *ngFor=\"let refund of commonRefundReasons; let i = index;\">\n <!-- <div *ngIf = \"{{refund.name}} !== 'Retrospective remission'\"> -->\n <input class=\"govuk-radios__input\" id=\"{{refund.name}}\" name=\"refundReason\" type=\"radio\"\n formControlName=\"refundReason\" value={{refund.code}}\n (change)=\"selectRadioButton(refund.name, refund.name)\">\n <label class=\"govuk-label--s govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{refund.name}}\n </label>\n\n <div class=\"govuk-radios__conditional\" *ngIf=\"isRefundReasonsSelected && showReasonText && selectedRefundReason === refund.name \" >\n <label class=\"govuk-label govuk-label--m\" for=\"{{refund.name}}\">\n Enter reason\n </label>\n <div [ngClass]=\"{'form-group-error': isReasonEmpty}\">\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"30\" formControlName=\"reason\">\n </div>\n </div>\n <!-- </div> -->\n </div>\n </div>\n </div>\n <br/>\n <div>\n <select formControlName=\"refundDDReason\" class=\"govuk-select\" id=\"sort\" (change)=\"selectchange($event)\">\n <option selected='selected' [defaultSelected]=true [value]=\"default\" >{{default}}</option>\n <!-- <option value=\"\" selected='selected'>Select a different reason</option> -->\n <option *ngFor=\"let refund of refundReasons;\" id=\"{{refund.name}}\" value=\"{{refund.code}}\">{{refund.name}}</option>\n </select>\n\n </div>\n <br/>\n <div class=\"govuk-radios__conditional\" *ngIf=\"showReasonText && !isRefundReasonsSelected\" >\n <div [ngClass]=\"{'form-group-error': isReasonEmpty}\">\n <label class=\"govuk-label govuk-label--m\" for=\"amount\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"{{reasonLength}}\" formControlName=\"reason\">\n </div>\n </div>\n\n\n </div>\n </fieldset>\n </form>\n </div>\n </form>\n </div>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoServiceRequestPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoIssueRefundConfirmation(payment)\" class=\"govuk-button\"> Continue</button>\n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkissuerefundpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKISSUEREFUNDPAGE'>\n <div class=\"govuk-warning-text\">\n\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> {{ displayRefundReason }}\n <a (click)=\"changeIssueRefundReason()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{this.payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </table>\n <div class=\"govuk-button-group\">\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoIssueRefundPage()\"> Previous </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmIssueRefund()\">\n Submit refund\n </button>\n </div>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <!--Retro Refund-->\n <ng-container *ngIf=\"viewCompStatus === 'addrefundforremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'>\n <div class=\"govuk-warning-text\">\n\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> Retrospective remission </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{this.remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code</td>\n <td class=\"govuk-table__cell\">{{this.remission.fee_code}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{feeamount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </table>\n <div class=\"govuk-button-group\">\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoServiceRequestPage($event)\">Previous</button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retrorefundconfirmationpage'\">\n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n\n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{ refundAmount| currency:'GBP':'symbol-narrow':'1.2-2'}} has been passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'order-full-view'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"takePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\">\n </ccpay-service-request>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'payment-view'\">\n <ccpay-payment-view\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [isTurnOff] = \"isTurnOff\"\n [isTakePayment] = \"takePayment\"\n [caseType] = \"caseType\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n >\n </ccpay-payment-view>\n </ng-container>\n\n</div>\n\n\n\n",
|
|
942
|
-
styles: [".add-remission .button{padding:.5em;font-size:19px;font-weight:200;margin:20px 2px}.add-remission td.govuk-table__cell{width:50%}.add-remission .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.add-remission .
|
|
1563
|
+
template: "<div class=\"add-remission pagesize\">\n <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMsg.length > 0\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div *ngFor=\"let err of errorMsg; let i = index\" class=\"govuk-error-summary__body\">\n \n <li>{{err}}</li>\n </div>\n </div>\n </div>\n\n<ng-container *ngIf=\"viewStatus === 'main' && !isRefundRemission \">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSION'>\n <h1 class=\"heading-large\">Add remission </h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n Add remission to {{ fee?.code }}: {{ fee?.description }}\n <span class=\"form-hint\">Enter remission for reference. For example: HWF-A1B-23C OR PA21-123456</span>\n </label>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"amount\">\n How much does the applicant need to pay?\n </label>\n\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <div class=\"hmcts-currency-input\">\n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"text\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">The remission amount must be less than the total fee</span>\n </p>\n </div>\n </div>\n </form>\n <button class=\"button\" type=\"submit\" (click)=\"addRemission()\">\n Submit\n </button>\n </div>\n </form>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'confirmation'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to add remission to this fee?\n </strong>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission code:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.remissionCode.value }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code:</td>\n <td class=\"govuk-table__cell\">{{ fee.code }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee description:</td>\n <td class=\"govuk-table__cell\">{{ fee.description }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Amount the applicant must pay:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission.emit()\">\n Cancel\n </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmRemission()\">\n Confirm\n </button>\n\n</ng-container>\n\n<!-- Add retro remission changes-->\n\n<ng-container *ngIf=\"viewCompStatus === 'addremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSADDRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens}}</h1>\n <h1 class=\"heading-large\">Enter help with fees or remission reference</h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n <span class=\"form-hint\">For example: HWF-A1B-23C OR PA21-123456</span>\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n \n </div>\n \n </form>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoServiceRequestPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"addRemissionCode()\" class=\"govuk-button\"> Continue</button>\n </div>\n <p><a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">Cancel</a></p>\n </div>\n </form>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'processretroremissonpage'\" >\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\"> \n <h1 *ngIf=\"remessionPayment?.status === 'Success' || isFromRefundListPage\" class=\"heading-medium\">\n Enter the amount to be refunded\n </h1> \n <h1 *ngIf=\"remessionPayment?.status !== 'Success' && !isFromRefundListPage\" class=\"heading-medium\">\n Enter the remission amount\n </h1> \n <h1 *ngIf=\"remessionPayment?.status === 'undefined'\" class=\"heading-medium\">\n Enter the amount\n </h1> \n </legend>\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">You cannot add a remission that's more than the fee amount.</span>\n </p>\n <div class=\"hmcts-currency-input\">\n \n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"number\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n \n \n </div>\n </fieldset>\n </form>\n \n <div class=\"govuk-button-group\">\n <button (click)=\"gotoAddRetroRemissionCodePage()\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoCheckRetroRemissionPage(payment)\" class=\"govuk-button\"> Continue</button>\n \n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a>\n </p>\n </div>\n \n </form>\n </div>\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'checkretroremissionpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKRETROREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.reference: ' '}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ remessionPayment ? getFormattedCurrency(remessionPayment.amount): ' ' | currency :'GBP':'symbol':'1.2-2'}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment status</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.status: ''}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee</td>\n <td class=\"govuk-table__cell\">{{ fee.code }} - {{ fee.description }} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Help with fees or remission reference</td>\n <td class=\"govuk-table__cell\"> {{ remissionForm.controls.remissionCode.value }}\n <a (click)=\"gotoProcessRetroRemissionPage()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"remessionPayment.status !== 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission amount</td>\n <td class=\"govuk-table__cell\">{{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n <a (click)=\"gotoAmountRetroRemission()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoAmountRetroRemission()\">Previous</button>\n <button type=\"submit\" [disabled]=\"isConfirmationBtnDisabled\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"confirmRetroRemission()\"> Add remission </button>\n <p> <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\"> Cancel</a> </p>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'retroremissionconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel-border--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Remission added\n </h1>\n <div *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-panel__body\">\n <p class=\"govuk-body\"><strong>The amount to be refunded should be {{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</strong></p>\n \n </div>\n </div>\n <div *ngIf=\"remessionPayment.status === 'Success'\" >\n <button type=\"submit\" [disabled]=\"!isRemissionApplied\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"gotoProcessRetroRemission()\">Continue </button>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n</ng-container>\n\n\n<ng-container *ngIf=\"viewStatus === 'remissionAddressPage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDRESSDETAILSRETROREMISSIONPAGE'> \n <h1 class=\"govuk-heading-l\">Process refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <ccpay-contact-details\n [addressObj] = notification\n (assignContactDetails)=\"getContactDetails($event, 'checkaddRefundpage')\"\n (redirectToIssueRefund)=\"gotoRemissionSuccess($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'checkaddRefundpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKRETROREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.reference: ' '}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ remessionPayment ? getFormattedCurrency(remessionPayment.amount): ' ' | currency :'GBP':'symbol':'1.2-2'}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment status</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.status: ''}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee</td>\n <td class=\"govuk-table__cell\">{{ fee.code }} - {{ fee.description }} ({{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}) </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Help with fees or remission reference</td>\n <td class=\"govuk-table__cell\"> {{ remissionForm.controls.remissionCode.value }}\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"remessionPayment.status !== 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission amount</td>\n <td class=\"govuk-table__cell\">{{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}} {{contactDetailsObj?.city}} {{contactDetailsObj?.county}} {{contactDetailsObj?.country}} {{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoProcessRetroRemission(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoProcessRetroRemission(contactDetailsObj)\">Previous</button>\n <button type=\"submit\" [disabled]=\"isConfirmationBtnDisabled\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"processRefund()\"> Submit refund </button>\n <p> <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\"> Cancel</a> </p>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'refundconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n \n</ng-container>\n\n<!-- Issue Refund Section -->\n<ng-container *ngIf=\"viewCompStatus === 'issuerefund' && isRefundRemission\">\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <h1 class=\"heading-large\">Issue refund</h1>\n <h2 class=\"heading-medium\">Case reference:#{{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"form-hint govuk-font19px\">\n Payment reference: {{paymentReference}}\n </span>\n <h3 class=\"heading-small\">Select fees to be refunded</h3>\n <!--TABLE-->\n <div>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-1\" scope=\"col\">Select</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Fee description</td>\n <td class=\"govuk-table__header col-6\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header col-6\" scope=\"col\">Total paid</td>\n <td class=\"govuk-table__header col-6\" scope=\"col\">Quantity</td>\n <td class=\"govuk-table__header col-8\" scope=\"col\">Amount to refund</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"!isFullyRefund\">\n <tr class=\"govuk-table__row\" formArrayName=\"feesList\" *ngFor=\"let fee of feesList?.controls; let i = index\">\n <td class=\"govuk-table__cell\">\n <div [formGroupName]=\"i\" class=\"govuk-checkboxes govuk-checkboxes--large\" data-module=\"govuk-checkboxes\">\n <div class=\"govuk-checkboxes__item\">\n\n <input\n class=\"govuk-checkboxes__input\" \n (click)=\"check_en(i,fee.controls['id'].value,fee.controls['apportion_amount'].value,fee.controls['volume'].value)\" \n id=\"{{fee.controls['id'].value}}\" \n name=\"organisation\" \n type=\"checkbox\" \n value=\"{{fee.controls['id'].value}}\" \n formControlName=\"selected\" >\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"{{fee.controls['id'].value}}\">\n <span style=\"display:none\">Select</span>\n </label>\n </div>\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{fee.controls['description'].value}} </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" >\n <div type=\"hidden\" style=\"display:none;background-color:white;\" id=\"feeVOl_{{fee.controls['id'].value}}\">{{ fee.controls['calculated_amount'].value / fee.controls['volume'].value }}</div>\n {{ fee.controls['calculated_amount'].value / fee.controls['volume'].value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" >{{ fee.controls['apportion_amount'].value | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" *ngIf=\"fee.controls['volume'].value >1\">\n <div [formGroupName]=\"i\">\n <input disabled=\"disabled\" class=\"govuk-input govuk-input--width-4 center\" id=\"feeVolumeUpdated_{{fee.controls['id'].value}}\" (keyup)=\"calAmtToRefund($event.target.value,fee.controls['calculated_amount'].value,fee.controls['volume'].value,i)\" value=\"{{fee.controls['updated_volume'].value}}\" name=\"feeVolumeUpdated_{{fee.controls['id'].value}}\" formControlName=\"updated_volume\" type=\"text\" >\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" *ngIf=\"fee.controls['volume'].value ===1\">\n <input disabled=\"disabled\" class=\"govuk-input govuk-input--width-4 center\" id=\"VolumeUpdated_{{fee.controls['id'].value}}\" name=\"VolumeUpdated_{{fee.controls['id'].value}}\" type=\"text\" value=\"{{fee.controls['volume'].value}}\">\n </td>\n <td class=\"govuk-table__cell whitespace-inherit center\" scope=\"row\">\n \n <div [formGroupName]=\"i\" class=\"hmcts-currency-input\">\n \n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input disabled=\"disabled\" class=\"govuk-input govuk-input--width-10\" id=\"feeAmount_{{fee.controls['id'].value}}\" name=\"feeAmount_{{fee.controls['id'].value}}\" type=\"text\" aria-describedby=\"amount-currency \" pattern=\"[0-9]*\" formControlName=\"refund_amount\">\n <input id=\"feeVolume_{{fee.controls['id'].value}}\" name=\"feeVolume_{{fee.controls['id'].value}}\" value= \"{{fee.controls['volume'].value}}\" type=\"hidden\" formControlName=\"volume\">\n <input id=\"feeApportionAmount_{{fee.controls['id'].value}}\" name=\"feeApportionAmount_{{fee.controls['id'].value}}\" value= \"{{fee.controls['apportion_amount'].value}}\" type=\"hidden\" formControlName=\"apportion_amount\">\n <input id=\"calculatedAmount_{{fee.controls['id'].value}}\" name=\"calculatedAmount_{{fee.controls['id'].value}}\" value= \"{{fee.controls['calculated_amount'].value}}\" type=\"hidden\" formControlName=\"calculated_amount\">\n </div> \n \n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"isFullyRefund\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of fees; let i = index\">\n <td class=\"govuk-table__cell\">\n <div class=\"govuk-checkboxes govuk-checkboxes--large\" data-module=\"govuk-checkboxes\">\n <div class=\"govuk-checkboxes__item\">\n <input \n class=\"govuk-checkboxes__input\" \n \n id=\"{{fee.id}}\" \n name=\"organisation\" \n type=\"checkbox\" \n value=\"{{fee.id}}\"\n disabled=\"disabled\"\n [checked]=\"true\" >\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"{{fee.id}}\">\n <span style=\"display:none\">Select</span>\n </label>\n </div>\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{fee.description}} </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" >\n <div type=\"hidden\" style=\"display:none;background-color:white;\" id=\"feeVOl_{{fee.id}}\">{{ fee.calculated_amount / fee.volume }}</div>\n {{ fee.calculated_amount / fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" >{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell whitespace-inherit left\">\n <div >\n <input disabled=\"disabled\" class=\"govuk-input govuk-input--width-4 center\" id=\"feeVolumeUpdated_{{fee.id}}\" value=\"{{fee.volume}}\" name=\"feeVolumeUpdated_{{fee.id}}\" type=\"text\" >\n </div>\n </td>\n \n <td class=\"govuk-table__cell whitespace-inherit center\" scope=\"row\">\n \n <div class=\"hmcts-currency-input\">\n \n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input disabled=\"disabled\" class=\"govuk-input govuk-input--width-10\" id=\"feeAmount_{{fee.id}}\" name=\"feeAmount_{{fee.id}}\" type=\"text\" aria-describedby=\"amount-currency \" value=\"{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}}\" pattern=\"[0-9]*\" >\n </div> \n \n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"fees?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No fees recorded</td>\n </tbody>\n </table>\n </div>\n <div class=\"govuk-button-group\">\n\n \n <a (click)=\"gotoServiceRequestPage($event)\" *ngIf=\"!isFullyRefund\" draggable=\"false\" class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\">\n Previous\n </a>\n <a (click)=\"goToPaymentViewComponent()\" *ngIf=\"isFullyRefund\" draggable=\"false\" class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\">\n Previous\n </a>\n \n <button [disabled] = \"noneSelected()\" (click)=\"gotoIssuePage(isFullyRefund)\" class=\"govuk-button\">\n Continue\n </button>\n \n </div>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a>\n </p>\n </form>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"viewCompStatus === 'issuerefundpage1' && isRefundRemission\">\n\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ISSUEREFUNDPAGE'> \n <h1 class=\"heading-large\">Process refund</h1>\n <h1 class=\"heading-medium\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h1>\n <span id=\"how-contacted-conditional-hint govuk-font19px\" *ngIf=\"payment\" class=\"form-hint\">\n Payment reference: {{paymentReference}}\n </span>\n <span id=\"how-contacted-conditional-hint govuk-font19px\" *ngIf=\"refundPaymentReference\" class=\"form-hint\">\n Payment reference: {{refundPaymentReference}}\n </span>\n <h1 class=\"heading-large\">Why are you making this refund?\n </h1>\n \n\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n \n <div\n [ngClass]=\"refundHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" >\n <p class=\"inline-error-message\" *ngIf=\"refundHasError\">\n <span *ngIf=\"refundHasError\">Select a reason why you\u2019re making this refund</span>\n </p>\n\n \n\n <div class = \"container-fluid\">\n <div class=\"row\">\n <div class=\"govuk-radios__item col-md-4\" *ngFor=\"let refund of commonRefundReasons; let i = index;\">\n <!-- <div *ngIf = \"{{refund.name}} !== 'Retrospective remission'\"> -->\n <input class=\"govuk-radios__input\" id=\"{{refund.name}}\" name=\"refundReason\" type=\"radio\"\n formControlName=\"refundReason\" value={{refund.code}}\n (change)=\"selectRadioButton(refund.name, refund.name)\">\n <label class=\"govuk-label--s govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{refund.name}}\n </label>\n\n <div class=\"govuk-radios__conditional\" *ngIf=\"isRefundReasonsSelected && showReasonText && selectedRefundReason === refund.name \" >\n <label class=\"govuk-label govuk-label--m\" for=\"{{refund.name}}\">\n Enter reason\n </label>\n <div [ngClass]=\"{'form-group-error': isReasonEmpty}\">\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n \n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"30\" formControlName=\"reason\">\n </div>\n </div>\n <!-- </div> -->\n </div>\n </div>\n </div>\n <br/>\n <div>\n <select formControlName=\"refundDDReason\" class=\"govuk-select\" id=\"sort\" (change)=\"selectchange($event)\">\n <option selected='selected' [defaultSelected]=true [value]=\"default\" >{{default}}</option> \n <!-- <option value=\"\" selected='selected'>Select a different reason</option> -->\n <option *ngFor=\"let refund of refundReasons;\" id=\"{{refund.name}}\" value=\"{{refund.code}}\">{{refund.name}}</option>\n </select>\n \n </div>\n <br/>\n <div class=\"govuk-radios__conditional\" *ngIf=\"showReasonText && !isRefundReasonsSelected\" >\n <div [ngClass]=\"{'form-group-error': isReasonEmpty}\">\n <label class=\"govuk-label govuk-label--m\" for=\"amount\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"{{reasonLength}}\" formControlName=\"reason\">\n </div>\n </div>\n\n \n </div>\n </fieldset>\n </form>\n </div>\n </form>\n </div>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoPartialFeeRefundScreen()\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoIssueRefundConfirmation(payment)\" class=\"govuk-button\"> Continue</button>\n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n \n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'contactDetailsPage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CAPTUREADDRESSDETAILSPAGE'> \n <h1 class=\"govuk-heading-l\">Process refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{paymentReference}}\n </span>\n <ccpay-contact-details\n [addressObj] = notification\n (assignContactDetails)=\"getContactDetails($event, 'checkissuerefundpage')\"\n (redirectToIssueRefund)=\"gotoRefundReasonPage()\" ></ccpay-contact-details>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'checkissuerefundpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKISSUEREFUNDPAGE'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n \n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{paymentReference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr>\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> {{ displayRefundReason }} \n <a (click)=\"changeIssueRefundReason()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngIf=\"!isFullyRefund\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{totalRefundAmount | currency:'GBP':'symbol-narrow':'1.2-2'}}\n <a (click)=\"changeRefundAmount()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngIf=\"isFullyRefund\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}} {{contactDetailsObj?.city}} {{contactDetailsObj?.county}} {{contactDetailsObj?.country}} {{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoContactDetailsPage(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </tr>\n </table>\n <div class=\"govuk-button-group\">\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoContactDetailsPage(contactDetailsObj)\"> Previous </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmIssueRefund(isFullyRefund)\">\n Submit refund\n </button>\n </div>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n<!--Retro Refund-->\n<ng-container *ngIf=\"viewCompStatus === 'addrefundforremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDRESSDETAILSRETROREMISSIONPAGE'> \n <h1 class=\"govuk-heading-l\">Process refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{paymentReference}}\n </span>\n<ccpay-contact-details \n[addressObj] = notification\n(assignContactDetails)=\"getContactDetails($event, 'addrefundcheckandanswer')\"\n(redirectToIssueRefund)=\"gotoServiceRequestPage($event)\" ></ccpay-contact-details>\n<p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n</p>\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'addrefundcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> Retrospective remission </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{paymentReference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code</td>\n <td class=\"govuk-table__cell\">{{remission.fee_code}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{feeamount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}} {{contactDetailsObj?.city}} {{contactDetailsObj?.county}} {{contactDetailsObj?.country}} {{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoAddressPage(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </table>\n <div class=\"govuk-button-group\">\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoAddressPage(contactDetailsObj)\">Previous</button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'retrorefundconfirmationpage'\">\n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{ refundAmount| currency:'GBP':'symbol-narrow':'1.2-2'}} has been passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'order-full-view'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [isServiceRequest]=\"isServiceRequest\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"takePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\">\n</ccpay-service-request>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'payment-view'\">\n <ccpay-payment-view \n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [isTurnOff] = \"isTurnOff\" \n [isTakePayment] = \"takePayment\" \n [caseType] = \"caseType\"\n [isOldPcipalOff] = \"isOldPcipalOff\"\n [isNewPcipalOff] = \"isNewPcipalOff\"\n [isServiceRequest]=\"isServiceRequest\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n >\n</ccpay-payment-view>\n</ng-container>\n\n</div>",
|
|
1564
|
+
styles: [".add-remission .button{padding:.5em;font-size:19px;font-weight:200;margin:20px 2px}.add-remission td.govuk-table__cell{width:50%}.add-remission .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.add-remission .govuk-label--s,.add-remission .govuk-warning-text__text,.add-remission .hmcts-currency-input__symbol{font-size:19px;font-weight:400}.add-remission .inline-error-class{outline:#a71414 solid 3px;outline-offset:0;border-color:#a71414}.add-remission .inline-error-message{color:#a71414;border-color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.add-remission .govuk-button,.add-remission .govuk-link{margin-right:1em;font-size:19px;font-weight:200}.add-remission .govuk-button-group{padding-top:2em}.add-remission .heading-medium{margin-top:.875em}.add-remission .heading-large{margin-top:.25em}.add-remission .govuk-panel--confirmation{color:#fff;background:#00703c}.add-remission .govuk-panel__title{font-size:5rem}.add-remission .govuk-body,.add-remission .govuk-body-m{font-size:2.1875rem}.add-remission .govuk-radios__item{clear:initial!important;display:inline-block;width:45%!important}.add-remission .govuk-radios__conditional{padding-top:12px!important}.add-remission .right{float:right;cursor:pointer}.add-remission .radio{float:right}.govuk-font19px,.govuk-input{font-size:19px}.govuk-select{font-size:19px;font-weight:400}.govuk-input--width-10{max-width:50ex}.govuk-label--m{font-size:19px;font-weight:400}.govuk-error-summary__body{font-size:19px!important}.govuk-error-summary__title{font-size:24px!important}.white{color:#fff}.pagesize{margin:2em;width:97%}.pointer{cursor:pointer}.col-18{min-width:18em}.col-6{min-width:6em}.col-8{min-width:8em}.col-1{min-width:1em}.col-25{width:25%!important}.col-24{width:24%!important}.left{text-align:left}.center{text-align:center}.col-60{width:60%;text-align:left}.margin-top--size{margin-top:-30px}.contactDetails-width{width:70%}.right{cursor:pointer}.form-hint{font-size:19px!important}.govuk-panel-border--confirmation{color:#0b0c0c;border:5px solid #00703c}"]
|
|
943
1565
|
}] }
|
|
944
1566
|
];
|
|
945
1567
|
/** @nocollapse */
|
|
@@ -954,6 +1576,7 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
954
1576
|
]; };
|
|
955
1577
|
AddRemissionComponent.propDecorators = {
|
|
956
1578
|
fee: [{ type: Input }],
|
|
1579
|
+
fees: [{ type: Input }],
|
|
957
1580
|
payment: [{ type: Input }],
|
|
958
1581
|
remission: [{ type: Input }],
|
|
959
1582
|
ccdCaseNumber: [{ type: Input }],
|
|
@@ -962,12 +1585,19 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
962
1585
|
paymentGroupRef: [{ type: Input }],
|
|
963
1586
|
isTurnOff: [{ type: Input }],
|
|
964
1587
|
isRefundRemission: [{ type: Input }],
|
|
1588
|
+
isOldPcipalOff: [{ type: Input }],
|
|
1589
|
+
isNewPcipalOff: [{ type: Input }],
|
|
965
1590
|
isStrategicFixEnable: [{ type: Input }],
|
|
966
1591
|
paidAmount: [{ type: Input }],
|
|
967
1592
|
isFromRefundListPage: [{ type: Input }],
|
|
968
1593
|
isFromPaymentDetailPage: [{ type: Input }],
|
|
969
1594
|
isFromServiceRequestPage: [{ type: Input }],
|
|
1595
|
+
isFullyRefund: [{ type: Input, args: ['isFullyRefund',] }],
|
|
970
1596
|
feeamount: [{ type: Input }],
|
|
1597
|
+
refundPaymentReference: [{ type: Input }],
|
|
1598
|
+
isFromRefundStatusPage: [{ type: Input }],
|
|
1599
|
+
changeRefundReason: [{ type: Input }],
|
|
1600
|
+
isServiceRequest: [{ type: Input, args: ["isServiceRequest",] }],
|
|
971
1601
|
LOGGEDINUSERROLES: [{ type: Input, args: ['LOGGEDINUSERROLES',] }],
|
|
972
1602
|
orderDetail: [{ type: Input, args: ['orderDetail',] }],
|
|
973
1603
|
orderRef: [{ type: Input, args: ['orderRef',] }],
|
|
@@ -981,7 +1611,8 @@ var AddRemissionComponent = /** @class */ (function () {
|
|
|
981
1611
|
orderRemissionTotal: [{ type: Input, args: ['orderRemissionTotal',] }],
|
|
982
1612
|
cancelRemission: [{ type: Output }],
|
|
983
1613
|
refundListReason: [{ type: Output }],
|
|
984
|
-
refundListAmount: [{ type: Output }]
|
|
1614
|
+
refundListAmount: [{ type: Output }],
|
|
1615
|
+
refundFees: [{ type: Output }]
|
|
985
1616
|
};
|
|
986
1617
|
return AddRemissionComponent;
|
|
987
1618
|
}());
|
|
@@ -990,6 +1621,8 @@ if (false) {
|
|
|
990
1621
|
/** @type {?} */
|
|
991
1622
|
AddRemissionComponent.prototype.fee;
|
|
992
1623
|
/** @type {?} */
|
|
1624
|
+
AddRemissionComponent.prototype.fees;
|
|
1625
|
+
/** @type {?} */
|
|
993
1626
|
AddRemissionComponent.prototype.payment;
|
|
994
1627
|
/** @type {?} */
|
|
995
1628
|
AddRemissionComponent.prototype.remission;
|
|
@@ -1006,6 +1639,10 @@ if (false) {
|
|
|
1006
1639
|
/** @type {?} */
|
|
1007
1640
|
AddRemissionComponent.prototype.isRefundRemission;
|
|
1008
1641
|
/** @type {?} */
|
|
1642
|
+
AddRemissionComponent.prototype.isOldPcipalOff;
|
|
1643
|
+
/** @type {?} */
|
|
1644
|
+
AddRemissionComponent.prototype.isNewPcipalOff;
|
|
1645
|
+
/** @type {?} */
|
|
1009
1646
|
AddRemissionComponent.prototype.isStrategicFixEnable;
|
|
1010
1647
|
/** @type {?} */
|
|
1011
1648
|
AddRemissionComponent.prototype.paidAmount;
|
|
@@ -1016,8 +1653,18 @@ if (false) {
|
|
|
1016
1653
|
/** @type {?} */
|
|
1017
1654
|
AddRemissionComponent.prototype.isFromServiceRequestPage;
|
|
1018
1655
|
/** @type {?} */
|
|
1656
|
+
AddRemissionComponent.prototype.isFullyRefund;
|
|
1657
|
+
/** @type {?} */
|
|
1019
1658
|
AddRemissionComponent.prototype.feeamount;
|
|
1020
1659
|
/** @type {?} */
|
|
1660
|
+
AddRemissionComponent.prototype.refundPaymentReference;
|
|
1661
|
+
/** @type {?} */
|
|
1662
|
+
AddRemissionComponent.prototype.isFromRefundStatusPage;
|
|
1663
|
+
/** @type {?} */
|
|
1664
|
+
AddRemissionComponent.prototype.changeRefundReason;
|
|
1665
|
+
/** @type {?} */
|
|
1666
|
+
AddRemissionComponent.prototype.isServiceRequest;
|
|
1667
|
+
/** @type {?} */
|
|
1021
1668
|
AddRemissionComponent.prototype.LOGGEDINUSERROLES;
|
|
1022
1669
|
/** @type {?} */
|
|
1023
1670
|
AddRemissionComponent.prototype.orderDetail;
|
|
@@ -1046,8 +1693,14 @@ if (false) {
|
|
|
1046
1693
|
/** @type {?} */
|
|
1047
1694
|
AddRemissionComponent.prototype.refundListAmount;
|
|
1048
1695
|
/** @type {?} */
|
|
1696
|
+
AddRemissionComponent.prototype.refundFees;
|
|
1697
|
+
/** @type {?} */
|
|
1049
1698
|
AddRemissionComponent.prototype.refund;
|
|
1050
1699
|
/** @type {?} */
|
|
1700
|
+
AddRemissionComponent.prototype.contactDetailsObj;
|
|
1701
|
+
/** @type {?} */
|
|
1702
|
+
AddRemissionComponent.prototype.notification;
|
|
1703
|
+
/** @type {?} */
|
|
1051
1704
|
AddRemissionComponent.prototype.remissionForm;
|
|
1052
1705
|
/** @type {?} */
|
|
1053
1706
|
AddRemissionComponent.prototype.hasErrors;
|
|
@@ -1106,6 +1759,8 @@ if (false) {
|
|
|
1106
1759
|
/** @type {?} */
|
|
1107
1760
|
AddRemissionComponent.prototype.remissionamt;
|
|
1108
1761
|
/** @type {?} */
|
|
1762
|
+
AddRemissionComponent.prototype.elementId;
|
|
1763
|
+
/** @type {?} */
|
|
1109
1764
|
AddRemissionComponent.prototype.commonRefundReasons;
|
|
1110
1765
|
/** @type {?} */
|
|
1111
1766
|
AddRemissionComponent.prototype.showReasonText;
|
|
@@ -1126,6 +1781,32 @@ if (false) {
|
|
|
1126
1781
|
/** @type {?} */
|
|
1127
1782
|
AddRemissionComponent.prototype.sendOrderRef;
|
|
1128
1783
|
/** @type {?} */
|
|
1784
|
+
AddRemissionComponent.prototype.paymentReference;
|
|
1785
|
+
/** @type {?} */
|
|
1786
|
+
AddRemissionComponent.prototype.class;
|
|
1787
|
+
/** @type {?} */
|
|
1788
|
+
AddRemissionComponent.prototype.errorMsg;
|
|
1789
|
+
/** @type {?} */
|
|
1790
|
+
AddRemissionComponent.prototype.totalRefundAmount;
|
|
1791
|
+
/** @type {?} */
|
|
1792
|
+
AddRemissionComponent.prototype.quantityUpdated;
|
|
1793
|
+
/** @type {?} */
|
|
1794
|
+
AddRemissionComponent.prototype.fullRefund;
|
|
1795
|
+
/** @type {?} */
|
|
1796
|
+
AddRemissionComponent.prototype.allowedRefundAmount;
|
|
1797
|
+
/** @type {?} */
|
|
1798
|
+
AddRemissionComponent.prototype.isRemissionsMatch;
|
|
1799
|
+
/** @type {?} */
|
|
1800
|
+
AddRemissionComponent.prototype.paymentFees;
|
|
1801
|
+
/** @type {?} */
|
|
1802
|
+
AddRemissionComponent.prototype.paymentGroup;
|
|
1803
|
+
/** @type {?} */
|
|
1804
|
+
AddRemissionComponent.prototype.isStatusAllocated;
|
|
1805
|
+
/** @type {?} */
|
|
1806
|
+
AddRemissionComponent.prototype.isFromCheckAnsPage;
|
|
1807
|
+
/** @type {?} */
|
|
1808
|
+
AddRemissionComponent.prototype.refundAmtForFeeVolumes;
|
|
1809
|
+
/** @type {?} */
|
|
1129
1810
|
AddRemissionComponent.prototype.component;
|
|
1130
1811
|
/**
|
|
1131
1812
|
* @type {?}
|
|
@@ -1163,4 +1844,4 @@ if (false) {
|
|
|
1163
1844
|
*/
|
|
1164
1845
|
AddRemissionComponent.prototype.OrderslistService;
|
|
1165
1846
|
}
|
|
1166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBRXBHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDL0YsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztJQUVoRSxjQUFjLEdBQUcsdUJBQXVCO0FBRTlDO0lBd0ZFLCtCQUFvQixXQUF3QixFQUNsQyxNQUFjLEVBQ2Qsa0JBQXNDLEVBQ3RDLG1CQUF3QyxFQUN4QyxhQUE2QixFQUM3QixFQUFxQixFQUNyQixpQkFBb0M7UUFOMUIs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SUFDcEMsNkNBQW9COztJQUVwQixvREFBZ0M7O0lBQ2hDLCtDQUF3Qjs7SUFDeEIsd0RBQWlDOztJQUNqQyx3Q0FBZ0I7O0lBQ2hCLDZDQUFxQjs7SUFDckIsOENBQStCOztJQUMvQix5Q0FBaUI7O0lBQ2pCLHlDQUFpQjs7SUFDakIsZ0RBQXVCOztJQUN2Qiw2Q0FBcUI7O0lBQ3JCLDBDQUF3WDs7Ozs7SUFFNVcsNENBQWdDOzs7OztJQUMxQyx1Q0FBc0I7Ozs7O0lBQ3RCLG1EQUE4Qzs7Ozs7SUFDOUMsb0RBQWdEOzs7OztJQUNoRCw4Q0FBcUM7Ozs7O0lBQ3JDLG1DQUE2Qjs7Ozs7SUFDN0Isa0RBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCwgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJRmVlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRmVlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWRkUmVtaXNzaW9uUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvQWRkUmVtaXNzaW9uUmVxdWVzdCc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJUGF5bWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHsgUmVmdW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWZ1bmRzL3JlZnVuZHMuc2VydmljZSc7XG5pbXBvcnQgeyBJUmVmdW5kUmVhc29ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZFJlYXNvbnMnO1xuaW1wb3J0IHsgUmVmdW5kc1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1JlZnVuZHNSZXF1ZXN0JztcbmltcG9ydCB7IEFkZFJldHJvUmVtaXNzaW9uUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvQWRkUmV0cm9SZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IElzc3VlUmVmdW5kUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSXNzdWVSZWZ1bmRSZXF1ZXN0JztcbmltcG9ydCB7IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uJztcbmltcG9ydCB7IFBvc3RJc3N1ZVJlZnVuZFJldHJvUmVtaXNzaW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9Qb3N0SXNzdWVSZWZ1bmRSZXRyb1JlbWlzc2lvbic7XG5pbXBvcnQge0NoYW5nZURldGVjdG9yUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElSZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZW1pc3Npb24nO1xuaW1wb3J0IHsgT3JkZXJzbGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcmRlcnNsaXN0LnNlcnZpY2UnO1xuXG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1hZGQtcmVtaXNzaW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1yZW1pc3Npb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hZGQtcmVtaXNzaW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQWRkUmVtaXNzaW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZmVlOiBJRmVlO1xuICBASW5wdXQoKSBwYXltZW50OiBJUGF5bWVudDtcbiAgQElucHV0KCkgcmVtaXNzaW9uOiBJUmVtaXNzaW9uO1xuICBASW5wdXQoKSBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhc2VUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHZpZXdDb21wU3RhdHVzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBheW1lbnRHcm91cFJlZjogc3RyaW5nO1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzUmVmdW5kUmVtaXNzaW9uOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGFpZEFtb3VudDogYW55O1xuICBASW5wdXQoKSBpc0Zyb21SZWZ1bmRMaXN0UGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNGcm9tUGF5bWVudERldGFpbFBhZ2U6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZmVlYW1vdW50OiBudW1iZXI7XG4gIEBJbnB1dCgnTE9HR0VESU5VU0VSUk9MRVMnKSBMT0dHRURJTlVTRVJST0xFUzogc3RyaW5nW107XG4gIEBJbnB1dCgnb3JkZXJEZXRhaWwnKSBvcmRlckRldGFpbDogYW55W107XG4gIEBJbnB1dCgnb3JkZXJSZWYnKSBvcmRlclJlZjogc3RyaW5nO1xuICBASW5wdXQoJ29yZGVyU3RhdHVzJykgb3JkZXJTdGF0dXM6IHN0cmluZztcbiAgQElucHV0KCdvcmRlclBhcnR5Jykgb3JkZXJQYXJ0eTogc3RyaW5nO1xuICBASW5wdXQoJ29yZGVyQ3JlYXRlZCcpIG9yZGVyQ3JlYXRlZDogRGF0ZTtcbiAgQElucHV0KCdvcmRlckNDREV2ZW50Jykgb3JkZXJDQ0RFdmVudDogc3RyaW5nO1xuICBASW5wdXQoJ3Rha2VwYXltZW50JykgdGFrZVBheW1lbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgnb3JkZXJGZWVzVG90YWwnKSBvcmRlckZlZXNUb3RhbDogbnVtYmVyO1xuICBASW5wdXQoJ29yZGVyVG90YWxQYXltZW50cycpIG9yZGVyVG90YWxQYXltZW50czogbnVtYmVyO1xuICBASW5wdXQoJ29yZGVyUmVtaXNzaW9uVG90YWwnKSBvcmRlclJlbWlzc2lvblRvdGFsOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBjYW5jZWxSZW1pc3Npb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy9AT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKHtyZWFzb246c3RyaW5nLCBjb2RlOnN0cmluZ30pO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbiA9IG5ldyBFdmVudEVtaXR0ZXI8e3JlYXNvbjogc3RyaW5nLCBjb2RlOiBzdHJpbmd9PigpO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdEFtb3VudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVmdW5kID0ge1xuICAgIHJlYXNvbjoge1xuICAgICAgZHVwbGljYXRlOiAnRHVwbGljYXRlIHBheW1lbnQnLFxuICAgICAgaHVtYW5lcnJvcjogJ0h1bWFuIGVycm9yJyxcbiAgICAgIGNhc2VXaXRoZHJhd246ICdDYXNlIHdpdGhkcmF3bicsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuXG4gIHJlbWlzc2lvbkZvcm06IEZvcm1Hcm91cDtcbiAgaGFzRXJyb3JzID0gZmFsc2U7XG4gIHZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIGVycm9yTWVzc2FnZSA9IG51bGw7XG4gIG9wdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBic1BheW1lbnREY25OdW1iZXI6IHN0cmluZztcbiAgc2VsZWN0ZWRWYWx1ZSA9ICd5ZXMnO1xuICBhbW91bnQ6IGFueTtcbiAgcmV0cm9SZW1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVtaXNzaW9uUmVmZXJlbmNlOiBzdHJpbmcgPSAnJztcbiAgcmVmdW5kUmVmZXJlbmNlOiBzdHJpbmc7XG4gIHJlZnVuZEFtb3VudDogc3RyaW5nO1xuICBwYXltZW50RXhwbGFuYXRpb25IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICByZWZ1bmRSZWFzb246c3RyaW5nO1xuICBzZWxlY3RlZFJlZnVuZFJlYXNvbjogc3RyaW5nO1xuICBkaXNwbGF5UmVmdW5kUmVhc29uOiBzdHJpbmc7XG4gIHJlZnVuZENvZGU6c3RyaW5nO1xuICByZW1lc3Npb25QYXltZW50OklQYXltZW50O1xuICBpc1JlbWlzc2lvbkNvZGVFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICByZW1pc3Npb25Db2RlSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBbW91bnRFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlYXNvbkVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGFtb3VudEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICByZWZ1bmRIYXNFcnJvcjpib29sZWFuID0gZmFsc2U7XG4gIGlzUGF5bWVudFN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZW1pc3Npb25BcHBsaWVkOiBib29sZWFuID0gZmFsc2U7XG4gIHJlbWlzc2lvbmFtdDpudW1iZXI7XG4gIC8vIHJlZnVuZFJlYXNvbnM6IGFueVtdID0gW107XG4gIGNvbW1vblJlZnVuZFJlYXNvbnM6IGFueVtdID0gW107XG4gIHNob3dSZWFzb25UZXh0OiBib29sZWFuO1xuICBpc1JlZnVuZFJlYXNvbnNTZWxlY3RlZDogYm9vbGVhbjtcbiAgZGVmYXVsdDogc3RyaW5nO1xuICByZWFzb25MZW5ndGg6IG51bWJlcjtcbiAgcmVmdW5kUmVhc29uczpJUmVmdW5kUmVhc29uc1tdO1xuICBwYXR0ZXJuMTogc3RyaW5nO1xuICBwYXR0ZXJuMjogc3RyaW5nO1xuICBzZW5kT3JkZXJEZXRhaWw6IGFueVtdO1xuICBzZW5kT3JkZXJSZWY6IHN0cmluZztcbiAgY29tcG9uZW50OiB7IGFjY291bnRfbnVtYmVyOiBzdHJpbmc7IGFtb3VudDogbnVtYmVyOyBjYXNlX3JlZmVyZW5jZTogc3RyaW5nOyBjY2RfY2FzZV9udW1iZXI6IHN0cmluZzsgY2hhbm5lbDogc3RyaW5nOyBjdXJyZW5jeTogc3RyaW5nOyBjdXN0b21lcl9yZWZlcmVuY2U6IHN0cmluZzsgZGF0ZV9jcmVhdGVkOiBzdHJpbmc7IGRhdGVfdXBkYXRlZDogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBtZXRob2Q6IHN0cmluZzsgb3JnYW5pc2F0aW9uX25hbWU6IHN0cmluZzsgcGF5bWVudF9hbGxvY2F0aW9uOiBhbnlbXTsgcmVmZXJlbmNlOiBzdHJpbmc7IHNlcnZpY2VfbmFtZTogc3RyaW5nOyBzaXRlX2lkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nOyB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSByZWZ1bmRTZXJ2aWNlOiBSZWZ1bmRzU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIE9yZGVyc2xpc3RTZXJ2aWNlOiBPcmRlcnNsaXN0U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZWZhdWx0ID0gJ1NlbGVjdCBhIGRpZmZlcmVudCByZWFzb24nO1xuICAgIHRoaXMucGF0dGVybjEgPSAnXihbYS16QS1aMC05XXszfSktKFthLXpBLVowLTldezN9KS0oW2EtekEtWjAtOV17M30pJCc7XG4gICAgdGhpcy5wYXR0ZXJuMiA9ICdeKFtBLVphLXpdezJ9WzAtOV17Mn0pLShbMC05XXs2fSkkJztcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzICE9PSAnJyAmJiB0aGlzLnZpZXdDb21wU3RhdHVzICE9PSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJyc7XG4gICAgICB9XG4gICAgaWYodGhpcy5yZW1pc3Npb24pIHtcbiAgICB9XG4gICAgaWYodGhpcy5mZWUpIHtcbiAgICB0aGlzLmFtb3VudCA9ICh0aGlzLmZlZS52b2x1bWUgKiB0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBheW1lbnQpe1xuICAgICAgdGhpcy5yZW1lc3Npb25QYXltZW50ID0gdGhpcy5wYXltZW50O1xuICAgICAgaWYodGhpcy5wYXltZW50LnN0YXR1cyA9PT0gJ1N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMuaXNQYXltZW50U3VjY2VzcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmJzUGF5bWVudERjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5yZW1pc3Npb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICByZW1pc3Npb25Db2RlOiBuZXcgRm9ybUNvbnRyb2woJycsXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihgKCR7dGhpcy5wYXR0ZXJuMX0pfCgke3RoaXMucGF0dGVybjJ9KWApXG4gICAgICBdKVxuICAgICAgKSxcbiAgICAgIGFtb3VudDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bMC05XSsoXFwuWzAtOV17MSwyfSk/JCcpXG4gICAgICBdKSksXG4gICAgICByZWZ1bmRSZWFzb246IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgcmVmdW5kRERSZWFzb246IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgcmVhc29uOiBuZXcgRm9ybUNvbnRyb2woKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICByZW1pc3Npb25jdHJsc1sncmVmdW5kRERSZWFzb24nXS5zZXRWYWx1ZSgnU2VsZWN0IGEgZGlmZmVyZW50IHJlYXNvbicsIHtvbmx5U2VsZjogdHJ1ZX0pO1xuXG4gICAgaWYodGhpcy52aWV3Q29tcFN0YXR1cyA9PT0gJycpe1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgICB9XG5cbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAnaXNzdWVyZWZ1bmQnKXtcbiAgICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRSZWFzb25zKCkuc3Vic2NyaWJlKFxuICAgICAgICByZWZ1bmRSZWFzb25zID0+IHtcbiAgICAgICAgICB0aGlzLnJlZnVuZFJlYXNvbnMgPSByZWZ1bmRSZWFzb25zLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5yZWNlbnRseV91c2VkID09PSBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRSZWFzb25zID0gdGhpcy5yZWZ1bmRSZWFzb25zLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5uYW1lICE9PSAnUmV0cm9zcGVjdGl2ZSByZW1pc3Npb24nKTtcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLmNvbW1vblJlZnVuZFJlYXNvbnMgPSByZWZ1bmRSZWFzb25zLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5yZWNlbnRseV91c2VkID09PSB0cnVlKTtcbiAgICAgICAgICB0aGlzLmNvbW1vblJlZnVuZFJlYXNvbnMuc29ydCgoYSwgYikgPT4gYS50b1N0cmluZygpLmxvY2FsZUNvbXBhcmUoYikpO1xuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9ICk7XG4gICAgfVxuXG4gICAgaWYodGhpcy52aWV3Q29tcFN0YXR1cyA9PT0gJ3Byb2Nlc3NyZXRyb3JlbWlzc29ucGFnZScgJiYgdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSl7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlJztcbiAgICB9XG5cbiAgfVxuXG4gIGFkZFJlbWlzc2lvbigpIHtcbiAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdBbGwnKTtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMsXG4gICAgICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlID0gdGhpcy5mZWUuY2FsY3VsYXRlZF9hbW91bnQgPiByZW1pc3Npb25jdHJscy5hbW91bnQudmFsdWU7XG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnNldEVycm9ycyhudWxsKTtcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kRERSZWFzb24nXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSAmJiB0aGlzLnJlbWlzc2lvbkZvcm0udmFsaWQgJiYgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSkge1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NvbmZpcm1hdGlvbic7XG4gICAgfWVsc2Uge1xuXG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbGlkICYmICFpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKXtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtaXNzaW9uKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgY29uc3QgbmV3TmV0QW1vdW50ID0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLmFtb3VudC52YWx1ZSxcbiAgICAgcmVtaXNzaW9uQW1vdW50ID0gdGhpcy5mZWUubmV0X2Ftb3VudCAtIG5ld05ldEFtb3VudCxcbiAgICAgcmVxdWVzdEJvZHkgPSBuZXcgQWRkUmVtaXNzaW9uUmVxdWVzdFxuICAgICh0aGlzLmNjZENhc2VOdW1iZXIsIHRoaXMuZmVlLCByZW1pc3Npb25BbW91bnQsIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlLCB0aGlzLmNhc2VUeXBlKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UGF5bWVudEdyb3VwV2l0aFJlbWlzc2lvbnMoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucGF5bWVudEdyb3VwUmVmKS50cmltKCksIHRoaXMuZmVlLmlkLCByZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkuc3VjY2Vzcykge1xuICAgICAgICAgIGxldCBMRFVybCA9IHRoaXMuaXNUdXJuT2ZmID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnXG4gICAgICAgICAgICBMRFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gXG4gICAgICAgICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY24pIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWZlZS1zdW1tYXJ5JnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JnBheW1lbnRHcm91cFJlZj0ke3RoaXMucGF5bWVudEdyb3VwUmVmfSZkY249JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNufSR7TERVcmx9YCk7XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmVzZXRSZW1pc3Npb25Gb3JtKHZhbCwgZmllbGQpe1xuICAgIGlmIChmaWVsZD09PSdBbGwnKXtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25Db2RlRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLnJlbWlzc2lvbkNvZGVIYXNFcnJvciA9IHZhbFsxXTtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFsyXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbM107XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFs0XTtcbiAgICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IHZhbFs1XTtcbiAgICB9IGVsc2UgaWYoZmllbGQ9PT0ncmVtaXNzaW9uQ29kZScgfHwgZmllbGQ9PT0nQWxsJykge1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkNvZGVFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMucmVtaXNzaW9uQ29kZUhhc0Vycm9yID0gdmFsWzFdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQ9PT0nYW1vdW50JyB8fCBmaWVsZD09PSdBbGwnKXtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFsyXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbM107XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFs0XTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkPT09J3JlYXNvbicgfHwgZmllbGQ9PT0nQWxsJyl7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbNV07XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHJldHJvIHJlbWlzc2lvbiBjaGFuZ2VzXG4gIGFkZFJlbWlzc2lvbkNvZGUoKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gZmFsc2U7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzXG4gICAgIC8vIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWUgPSB0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudCA+PSByZW1pc3Npb25jdHJscy5hbW91bnQudmFsdWU7XG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnNldEVycm9ycyhudWxsKTtcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kRERSZWFzb24nXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ2Ftb3VudCddLnNldEVycm9ycyhudWxsKTtcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICYmIHRoaXMucmVtaXNzaW9uRm9ybS52YWxpZCApIHtcbiAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwicHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlXCI7XG4gICAgfWVsc2Uge1xuXG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZW1pc3Npb25Db2RlJyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVhc29uJ10udmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlXSwgJ3JlYXNvbicpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbGlkKXtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuXG4gICAgfVxuICB9XG5cblxuICBnb3RvQWRkUmV0cm9SZW1pc3Npb25Db2RlUGFnZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIGlmKHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZWZ1bmRMaXN0QW1vdW50LmVtaXQoKTtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlICkge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlZnVuZExpc3RSZWFzb24uZW1pdCh7cmVhc29uOiB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLCBjb2RlOiB0aGlzLnJlZnVuZFJlYXNvbn0pO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAneWVzJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gXCJhZGRyZW1pc3Npb25cIjtcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGlmKHRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UpIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LXZpZXcnO1xuICAgIH1cbiAgfVxuXG4gIGdvdG9DaGVja1JldHJvUmVtaXNzaW9uUGFnZShwYXltZW50OiBJUGF5bWVudCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgaWYoICF0aGlzLmlzUmVmdW5kUmVtaXNzaW9uKSB7XG4gICAgdmFyIHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scyxcbiAgICAgIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWUgPSB0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudCA+PSByZW1pc3Npb25jdHJscy5hbW91bnQudmFsdWU7XG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSApIHtcbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyB8fCByZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPCAwKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSBpZihyZW1pc3Npb25jdHJscy5hbW91bnQudmFsaWQgJiYgIWlzUmVtaXNzaW9uTGVzc1RoYW5GZWUpe1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAnYW1vdW50Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSBcImNoZWNrcmV0cm9yZW1pc3Npb25wYWdlXCI7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgLy9pZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICkge1xuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnIHx8IHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA8IDAgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwiY2hlY2tyZXRyb3JlbWlzc2lvbnBhZ2VcIjtcbiAgICAgICAgICB0aGlzLnJlZnVuZExpc3RBbW91bnQuZW1pdChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUpO1xuICAgICAgfVxuICAgIC8vfVxuXG4gIH1cbiAgfVxuXG4gIGdvdG9Qcm9jZXNzUmV0cm9SZW1pc3Npb25QYWdlKCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnYWRkcmVtaXNzaW9uJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICB9XG5cbiAgY29uZmlybVJldHJvUmVtaXNzaW9uKCkge1xuICAgIGlmKCF0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQpIHtcbiAgICB0aGlzLnJldHJvUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLnJlbWlzc2lvbmFtdCA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5hbW91bnQudmFsdWU7XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgQWRkUmV0cm9SZW1pc3Npb25SZXF1ZXN0KHRoaXMucmVtaXNzaW9uYW10LHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlIClcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UGF5bWVudEdyb3VwV2l0aFJldHJvUmVtaXNzaW9ucyhkZWNvZGVVUklDb21wb25lbnQodGhpcy5wYXltZW50R3JvdXBSZWYpLnRyaW0oKSwgdGhpcy5mZWUuaWQsIHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZXRyb3JlbWlzc2lvbmNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgIHRoaXMucmVtaXNzaW9uUmVmZXJlbmNlID1KU09OLnBhcnNlKHJlc3BvbnNlKS5yZW1pc3Npb25fcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1JlZnVuZCgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZW1pc3Npb25SZWZlcmVuY2UgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSA9PT0gJycpIHtcbiAgICAgIHRoaXMucmVtaXNzaW9uUmVmZXJlbmNlID0gdGhpcy5yZW1pc3Npb24ucmVtaXNzaW9uX3JlZmVyZW5jZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgUG9zdElzc3VlUmVmdW5kUmV0cm9SZW1pc3Npb24odGhpcy5yZW1pc3Npb25SZWZlcmVuY2UpO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgID0gJyc7XG4gICAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmVmdW5kY29uZmlybWF0aW9ucGFnZSc7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZFJlZmVyZW5jZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9yZWZlcmVuY2U7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0pXG4gIH1cblxuICAvLyBJc3N1ZSBSZWZ1bmQgY2hhbmdlc1xuXG4gIGdvdG9Jc3N1ZVJlZnVuZENvbmZpcm1hdGlvbihwYXltZW50OiBJUGF5bWVudCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSBmYWxzZTtcbiAgICBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuUkVGVU5ETElTVCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMucmVmdW5kUmVhc29uID0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRSZWFzb24nXS52YWx1ZSA9PT0gbnVsbCA/IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kRERSZWFzb24nXS52YWx1ZSA6IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kUmVhc29uJ10udmFsdWU7XG4gICAgaWYoIXRoaXMucmVmdW5kUmVhc29uIHx8IHRoaXMucmVmdW5kUmVhc29uID09PSAnU2VsZWN0IGEgZGlmZmVyZW50IHJlYXNvbicpIHtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSB0cnVlO1xuICAgIH0gZWxzZSBpZih0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLmluY2x1ZGVzKCdPdGhlcicpICYmICh0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlID09ICcnIHx8IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlXSwgJ3JlYXNvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbi5pbmNsdWRlcygnT3RoZXInKSAmJiB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlICE9PSAnJykge1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZ1bmRSZWFzb24gKz0gICctJyArIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWU7XG4gICAgICB0aGlzLmRpc3BsYXlSZWZ1bmRSZWFzb24gPSB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uICsgJy0nICsgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZTtcbiAgICAgIGlmICggdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSApIHtcbiAgICAgICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5kaXNwbGF5UmVmdW5kUmVhc29uLCBjb2RlOiB0aGlzLnJlZnVuZFJlYXNvbn0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY2hlY2tpc3N1ZXJlZnVuZHBhZ2UnO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVJlZnVuZFJlYXNvbiA9IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb247XG4gICAgICBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NoZWNraXNzdWVyZWZ1bmRwYWdlJztcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGdvdG9Jc3N1ZVJlZnVuZFBhZ2UoKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2lzc3VlcmVmdW5kJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSBmYWxzZTtcbiAgfVxuXG4gIGNoYW5nZUlzc3VlUmVmdW5kUmVhc29uKCkge1xuICAgLy8gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRSZWFzb24nXS5zZXRWYWx1ZSgnRHVwbGljYXRlIHBheW1lbnQnKTtcbiAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IGZhbHNlO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnaXNzdWVyZWZ1bmQnO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICB9XG5cbiAgY29uZmlybUlzc3VlUmVmdW5kKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICBpZiggdGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgICAgdGhpcy5yZXRyb1JlbWlzc2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uKHRoaXMucGF5bWVudC5yZWZlcmVuY2UsdGhpcy5yZWZ1bmRSZWFzb24pO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RSZWZ1bmRzUmVhc29uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICcnO1xuICAgICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRSZWZlcmVuY2UgPUpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9yZWZlcmVuY2U7XG4gICAgICAgICAgICBpZihKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gIH1cblxuLy8gUmV0cm8gUmVmdW5kXG5cbiAgY29uZmlybVJldHJvUmVmdW5kKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICBpZiggdGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgICAgdGhpcy5yZXRyb1JlbWlzc2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uKHRoaXMucGF5bWVudC5yZWZlcmVuY2UsJ1JSMDA0LVJldHJvc3BlY3RpdmUgcmVtaXNzaW9uJyk7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFJlZnVuZHNSZWFzb24ocmVxdWVzdEJvZHkpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgID0gJyc7XG4gICAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmV0cm9yZWZ1bmRjb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID1KU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfcmVmZXJlbmNlO1xuICAgICAgICAgICAgaWYoSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudCkge1xuICAgICAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdFJhZGlvQnV0dG9uKGtleSwgdmFsdWUpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm15cmFkaW9cIiwga2V5KTtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlZnVuZEREUmVhc29uJ10uc2V0VmFsdWUoJ1NlbGVjdCBhIGRpZmZlcmVudCByZWFzb24nLCB7b25seVNlbGY6IHRydWV9KTtcbiAgICByZW1pc3Npb25jdHJsc1sncmVhc29uJ10ucmVzZXQoKTtcbiAgICB0aGlzLmlzUmVmdW5kUmVhc29uc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd1JlYXNvblRleHQgPSBmYWxzZTtcbiAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiA9IGtleTtcbiAgICBpZih0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLmluY2x1ZGVzKCdPdGhlcicpKSB7XG4gICAgICB0aGlzLnNob3dSZWFzb25UZXh0ID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmdW5kUmVhc29uID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdGNoYW5nZShhcmdzKSB7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzO1xuICAgIHJlbWlzc2lvbmN0cmxzWydyZWZ1bmRSZWFzb24nXS5yZXNldCgpO1xuICAgIHJlbWlzc2lvbmN0cmxzWydyZWFzb24nXS5yZXNldCgpO1xuICAgIHRoaXMuaXNSZWZ1bmRSZWFzb25zU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dSZWFzb25UZXh0ID0gZmFsc2U7XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24gPSBhcmdzLnRhcmdldC5vcHRpb25zW2FyZ3MudGFyZ2V0Lm9wdGlvbnMuc2VsZWN0ZWRJbmRleF0uaWQ7XG4gICAgdGhpcy5yZWFzb25MZW5ndGggPSAoMjktdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbi5zcGxpdCgnLSAnKVsxXS5sZW5ndGgpO1xuXG4gICAgaWYodGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbi5pbmNsdWRlcygnT3RoZXInKSkge1xuICAgICAgdGhpcy5zaG93UmVhc29uVGV4dCA9IHRydWU7XG4gICAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZnVuZFJlYXNvbiA9IGFyZ3MudGFyZ2V0Lm9wdGlvbnNbYXJncy50YXJnZXQub3B0aW9ucy5zZWxlY3RlZEluZGV4XS5pZDtcbiAgICB9XG5cblxuICB9XG5cbiAgZ290b1NlcnZpY2VSZXF1ZXN0UGFnZShldmVudDogYW55KSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPScnO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlICYmICF0aGlzLmlzRnJvbVBheW1lbnREZXRhaWxQYWdlKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ29yZGVyLWZ1bGwtdmlldyc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgIH0gZWxzZSBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlZnVuZExpc3RSZWFzb24uZW1pdCh7cmVhc29uOiB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLCBjb2RlOiB0aGlzLnJlZnVuZFJlYXNvbn0pO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50TWV0aG9kID0gdGhpcy5wYXltZW50Lm1ldGhvZDtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlXG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSA9IHRoaXMucGF5bWVudC5yZWZlcmVuY2U7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGF5bWVudC12aWV3JztcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWYodGhpcy5vcmRlclJlZik7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyQ0NERXZlbnQodGhpcy5vcmRlckNDREV2ZW50KTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJDcmVhdGVkKHRoaXMub3JkZXJDcmVhdGVkKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJEZXRhaWwodGhpcy5vcmRlckRldGFpbCk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyUGFydHkodGhpcy5vcmRlclBhcnR5KTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJUb3RhbFBheW1lbnRzKHRoaXMub3JkZXJUb3RhbFBheW1lbnRzKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJSZW1pc3Npb25Ub3RhbCh0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckZlZXNUb3RhbCh0aGlzLm9yZGVyRmVlc1RvdGFsKTtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdwYXltZW50LXZpZXcnO1xuICAgICAgdGhpcy5zZW5kT3JkZXJEZXRhaWwgPSB0aGlzLm9yZGVyRGV0YWlsO1xuICAgICAgdGhpcy5zZW5kT3JkZXJSZWYgPSB0aGlzLm9yZGVyUmVmO1xuICAgICAgaWYodGhpcy5MT0dHRURJTlVTRVJST0xFUyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0VXNlclJvbGVzTGlzdCgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5MT0dHRURJTlVTRVJST0xFUyA9IGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgIH1cbiAgICAvLyBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID09PSB1bmRlZmluZWQgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVCA9ICdmYWxzZSc7XG4gICAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSBmYWxzZTtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgLy8gICAvL3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IGZhbHNlO1xuICAgIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSBmYWxzZTtcbiAgICAvLyAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJ1xuICAgIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICAvLyAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0aXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKHRydWUpO1xuICAgIC8vICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnc2VydmljZXJlcXVlc3RwYWdlJyk7XG4gICAgLy8gfVxuICAgIC8vIGlmICggdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSApIHtcbiAgICAvLyAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSB0cnVlO1xuICAgIC8vICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAvLyAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICAvLyB9XG4gICAgLy8gaWYoIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlKSAge1xuICAgIC8vICAgICBpZih0aGlzLnBheW1lbnQpIHtcbiAgICAvLyAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldHBheW1lbnRQYWdlVmlldyh7bWV0aG9kOiB0aGlzLnBheW1lbnQubWV0aG9kLHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiB0aGlzLnBheW1lbnRHcm91cFJlZiwgcmVmZXJlbmNlOnRoaXMucGF5bWVudC5yZWZlcmVuY2V9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHtcbiAgICAvLyAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdzZXJ2aWNlcmVxdWVzdHBhZ2UnKTtcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdwYXltZW50ZGV0YWlsc3BhZ2UnKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIC8vICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIC8vICAgICAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIC8vICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID0gdGhpcy5pc1R1cm5PZmY7XG5cbiAgICAvLyAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7XG4gICAgLy8gICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcbiAgICAvLyAgICAgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgIC8vICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICAvLyAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAgIC8vICAgICBwYXJ0VXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICAvLyAgICAgcGFydFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gO1xuICAgIC8vICAgICBpZih0aGlzLmlzRnJvbVBheW1lbnREZXRhaWxQYWdlKSB7XG4gICAgLy8gICAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUGF5bWVudERldGFpbFBhZ2VcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBpZighdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UKSB7XG4gICAgLy8gICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdW5kZWZpbmVkO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmICggdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUKSB7XG4gICAgLy8gICAgICAgY29uc3QgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0ke3BhcnRVcmx9YDtcbiAgICAvLyAgICAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgIC8vICAgICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICAvLyAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgY29uc3QgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlR9JnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICAgLy8gICAgICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICAvLyAgICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgLy8gICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgIC8vICAgICB9XG5cbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID09PSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgLy8gfVxuICB9XG5cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5WSUVXID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7XG4gICAgdGhpcy5yZXNldE9yZGVyRGF0YSgpO1xuICAgIGxldCBwYXJ0VXJsID0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICAgIGNvbnN0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UfSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgfVxuXG4gIGdvdG9DYXNldHJhbnNhdGlvblBhZ2VDYW5jZWxCdG5DbGlja2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYoICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVklFVyA9J2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gIC8vICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAvLyAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0aXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKGZhbHNlKTtcbiAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVklFVyA9J2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAvLyAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcbiAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gIC8vICAgdGhpcy5yZXNldE9yZGVyRGF0YSgpOyBsZXQgcGFydFVybCA9IHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID8gYCZkY249JHt0aGlzLmJzUGF5bWVudERjbk51bWJlcn1gIDogJyc7XG4gIC8vICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gIC8vICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAvLyAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgLy8gIGNvbnN0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UfSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAvLyAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgLy8gIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgLy8gIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5SRUZVTkRMSVNUKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kLWxpc3QnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID09PSB1bmRlZmluZWQgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVCA9ICdmYWxzZSc7XG4gICAgfVxuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0aXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKGZhbHNlKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldHBheW1lbnRQYWdlVmlldyh7bWV0aG9kOiAnJyxwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogJycsIHJlZmVyZW5jZTonJ30pO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcblxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGxldCBwYXJ0VXJsID0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICAgaWYodGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSkge1xuICAgICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheW1lbnREZXRhaWxQYWdlXG4gICAgIH1cblxuICAgICBpZighdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUKSB7XG4gICAgICBjb25zdCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVH0mc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0ke3BhcnRVcmx9YDtcbiAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB1cmwgPWAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT9zZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAgICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgcmVzZXRPcmRlckRhdGEoKSB7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRPcmRlclJlZihudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyQ0NERXZlbnQobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckNyZWF0ZWQobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckRldGFpbChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyUGFydHkobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclRvdGFsUGF5bWVudHMobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclJlbWlzc2lvblRvdGFsKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJGZWVzVG90YWwobnVsbCk7XG4gIH1cblxuXG4gIGdldEZvcm1hdHRlZEN1cnJlbmN5KGN1cnJlbmN5Om51bWJlcil7XG4gICAgaWYoY3VycmVuY3kudG9TdHJpbmcoKS5pbmNsdWRlcyhcIi5cIikpe1xuICAgICAgcmV0dXJuIGN1cnJlbmN5XG4gICAgfVxuICAgICByZXR1cm4gY3VycmVuY3kudG9TdHJpbmcoKS5jb25jYXQoXCIuMDBcIik7XG4gIH1cblxufVxuIl19
|
|
1847
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFnQyxNQUFNLGdCQUFnQixDQUFDO0FBRS9HLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDL0YsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztJQUdoRSxjQUFjLEdBQUcsdUJBQXVCOztJQUN4QyxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFFN0M7SUFnSEUsK0JBQW9CLFdBQXdCLEVBQ2xDLE1BQWMsRUFDZCxrQkFBc0MsRUFDdEMsbUJB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QTJCOztJQUMzQiw0Q0FBb0I7O0lBQ3BCLDZDQUE0Qjs7SUFDNUIsa0RBQTJCOztJQUMzQixtREFBNEI7O0lBQzVCLHVEQUErQjs7SUFFL0IsMENBQXdYOzs7OztJQUU1Vyw0Q0FBZ0M7Ozs7O0lBQzFDLHVDQUFzQjs7Ozs7SUFDdEIsbURBQThDOzs7OztJQUM5QyxvREFBZ0Q7Ozs7O0lBQ2hELDhDQUFxQzs7Ozs7SUFDckMsbUNBQTZCOzs7OztJQUM3QixrREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBSZXF1aXJlZFZhbGlkYXRvciwgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFkZFJlbWlzc2lvblJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FkZFJlbWlzc2lvblJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBJUGF5bWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHsgUmVmdW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWZ1bmRzL3JlZnVuZHMuc2VydmljZSc7XG5pbXBvcnQgeyBJUmVmdW5kUmVhc29ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZFJlYXNvbnMnO1xuaW1wb3J0IHsgQWRkUmV0cm9SZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZXRyb1JlbWlzc2lvblJlcXVlc3QnO1xuaW1wb3J0IHsgSVJlZnVuZENvbnRhY3REZXRhaWxzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kQ29udGFjdERldGFpbHMnO1xuaW1wb3J0IHsgUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9Qb3N0UmVmdW5kUmV0cm9SZW1pc3Npb24nO1xuaW1wb3J0IHsgUG9zdElzc3VlUmVmdW5kUmV0cm9SZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1Bvc3RJc3N1ZVJlZnVuZFJldHJvUmVtaXNzaW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVJlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQgeyBPcmRlcnNsaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyc2xpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJUGF5bWVudEdyb3VwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcbmNvbnN0IHJlc29sdmVkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktYWRkLXJlbWlzc2lvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtcmVtaXNzaW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFkZFJlbWlzc2lvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZlZTogSUZlZTtcbiAgQElucHV0KCkgZmVlczogYW55IFtdO1xuICBASW5wdXQoKSBwYXltZW50OiBJUGF5bWVudDtcbiAgQElucHV0KCkgcmVtaXNzaW9uOiBJUmVtaXNzaW9uO1xuICBASW5wdXQoKSBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhc2VUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHZpZXdDb21wU3RhdHVzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBheW1lbnRHcm91cFJlZjogc3RyaW5nO1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzUmVmdW5kUmVtaXNzaW9uOiBib29sZWFuO1xuICBASW5wdXQoKSBpc09sZFBjaXBhbE9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNOZXdQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSBwYWlkQW1vdW50OiBhbnk7XG4gIEBJbnB1dCgpIGlzRnJvbVJlZnVuZExpc3RQYWdlOiBib29sZWFuO1xuICBASW5wdXQoKSBpc0Zyb21QYXltZW50RGV0YWlsUGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlOiBib29sZWFuO1xuICBASW5wdXQoJ2lzRnVsbHlSZWZ1bmQnKSBpc0Z1bGx5UmVmdW5kOiBib29sZWFuO1xuICBASW5wdXQoKSBmZWVhbW91bnQ6IG51bWJlcjtcbiAgQElucHV0KCkgcmVmdW5kUGF5bWVudFJlZmVyZW5jZTogc3RyaW5nO1xuICBASW5wdXQoKSBpc0Zyb21SZWZ1bmRTdGF0dXNQYWdlOiBib29sZWFuO1xuICBASW5wdXQoKSBjaGFuZ2VSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgQElucHV0KFwiaXNTZXJ2aWNlUmVxdWVzdFwiKSBpc1NlcnZpY2VSZXF1ZXN0OiBzdHJpbmc7XG4gIEBJbnB1dCgnTE9HR0VESU5VU0VSUk9MRVMnKSBMT0dHRURJTlVTRVJST0xFUzogc3RyaW5nW107XG4gIEBJbnB1dCgnb3JkZXJEZXRhaWwnKSBvcmRlckRldGFpbDogYW55W107XG4gIEBJbnB1dCgnb3JkZXJSZWYnKSBvcmRlclJlZjogc3RyaW5nO1xuICBASW5wdXQoJ29yZGVyU3RhdHVzJykgb3JkZXJTdGF0dXM6IHN0cmluZztcbiAgQElucHV0KCdvcmRlclBhcnR5Jykgb3JkZXJQYXJ0eTogc3RyaW5nO1xuICBASW5wdXQoJ29yZGVyQ3JlYXRlZCcpIG9yZGVyQ3JlYXRlZDogRGF0ZTtcbiAgQElucHV0KCdvcmRlckNDREV2ZW50Jykgb3JkZXJDQ0RFdmVudDogc3RyaW5nO1xuICBASW5wdXQoJ3Rha2VwYXltZW50JykgdGFrZVBheW1lbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgnb3JkZXJGZWVzVG90YWwnKSBvcmRlckZlZXNUb3RhbDogbnVtYmVyO1xuICBASW5wdXQoJ29yZGVyVG90YWxQYXltZW50cycpIG9yZGVyVG90YWxQYXltZW50czogbnVtYmVyO1xuICBASW5wdXQoJ29yZGVyUmVtaXNzaW9uVG90YWwnKSBvcmRlclJlbWlzc2lvblRvdGFsOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBjYW5jZWxSZW1pc3Npb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy9AT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKHtyZWFzb246c3RyaW5nLCBjb2RlOnN0cmluZ30pO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbiA9IG5ldyBFdmVudEVtaXR0ZXI8e3JlYXNvbjogc3RyaW5nLCBjb2RlOiBzdHJpbmd9PigpO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdEFtb3VudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZWZ1bmRGZWVzOiBFdmVudEVtaXR0ZXI8SUZlZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUZlZVtdPigpO1xuICByZWZ1bmQgPSB7XG4gICAgcmVhc29uOiB7XG4gICAgICBkdXBsaWNhdGU6ICdEdXBsaWNhdGUgcGF5bWVudCcsXG4gICAgICBodW1hbmVycm9yOiAnSHVtYW4gZXJyb3InLFxuICAgICAgY2FzZVdpdGhkcmF3bjogJ0Nhc2Ugd2l0aGRyYXduJyxcbiAgICAgIG90aGVyOiAnT3RoZXInXG4gICAgfVxuICB9XG4gIGNvbnRhY3REZXRhaWxzT2JqOiBJUmVmdW5kQ29udGFjdERldGFpbHM7XG4gIG5vdGlmaWNhdGlvbjogYW55O1xuICByZW1pc3Npb25Gb3JtOiBGb3JtR3JvdXA7XG4gIGhhc0Vycm9ycyA9IGZhbHNlO1xuICB2aWV3U3RhdHVzID0gJ21haW4nO1xuICBlcnJvck1lc3NhZ2UgPSBudWxsO1xuICBvcHRpb246IHN0cmluZyA9IG51bGw7XG4gIGlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYnNQYXltZW50RGNuTnVtYmVyOiBzdHJpbmc7XG4gIHNlbGVjdGVkVmFsdWUgPSAneWVzJztcbiAgYW1vdW50OiBhbnk7XG4gIHJldHJvUmVtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHJlbWlzc2lvblJlZmVyZW5jZTogc3RyaW5nID0gJyc7XG4gIHJlZnVuZFJlZmVyZW5jZTogc3RyaW5nO1xuICByZWZ1bmRBbW91bnQ6IHN0cmluZztcbiAgcGF5bWVudEV4cGxhbmF0aW9uSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kUmVhc29uOnN0cmluZztcbiAgc2VsZWN0ZWRSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgZGlzcGxheVJlZnVuZFJlYXNvbjogc3RyaW5nO1xuICByZWZ1bmRDb2RlOnN0cmluZztcbiAgcmVtZXNzaW9uUGF5bWVudDpJUGF5bWVudDtcbiAgaXNSZW1pc3Npb25Db2RlRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVtaXNzaW9uQ29kZUhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQW1vdW50RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWFzb25FbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbW91bnRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kSGFzRXJyb3I6Ym9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnRTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xuICByZW1pc3Npb25hbXQ6bnVtYmVyO1xuICBlbGVtZW50SWQ6YW55O1xuICAvLyByZWZ1bmRSZWFzb25zOiBhbnlbXSA9IFtdO1xuICBjb21tb25SZWZ1bmRSZWFzb25zOiBhbnlbXSA9IFtdO1xuICBzaG93UmVhc29uVGV4dDogYm9vbGVhbjtcbiAgaXNSZWZ1bmRSZWFzb25zU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGRlZmF1bHQ6IHN0cmluZztcbiAgcmVhc29uTGVuZ3RoOiBudW1iZXI7XG4gIHJlZnVuZFJlYXNvbnM6SVJlZnVuZFJlYXNvbnNbXTtcbiAgcGF0dGVybjE6IHN0cmluZztcbiAgcGF0dGVybjI6IHN0cmluZztcbiAgc2VuZE9yZGVyRGV0YWlsOiBhbnlbXTtcbiAgc2VuZE9yZGVyUmVmOiBzdHJpbmc7XG4gIHBheW1lbnRSZWZlcmVuY2UgOiBzdHJpbmc7XG4gIGNsYXNzPScnO1xuICBlcnJvck1zZyA9IG5ldyBBcnJheSgpO1xuICB0b3RhbFJlZnVuZEFtb3VudDogbnVtYmVyO1xuICBxdWFudGl0eVVwZGF0ZWQ6IG51bWJlcjtcbiAgZnVsbFJlZnVuZDogYm9vbGVhbjtcbiAgYWxsb3dlZFJlZnVuZEFtb3VudDogbnVtYmVyO1xuICBpc1JlbWlzc2lvbnNNYXRjaDogYm9vbGVhbjtcbiAgcGF5bWVudEZlZXM6IElGZWVbXTtcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBpc1N0YXR1c0FsbG9jYXRlZDogYm9vbGVhbjtcbiAgaXNGcm9tQ2hlY2tBbnNQYWdlOiBib29sZWFuO1xuICByZWZ1bmRBbXRGb3JGZWVWb2x1bWVzOiBudW1iZXI7XG4gIFxuICBjb21wb25lbnQ6IHsgYWNjb3VudF9udW1iZXI6IHN0cmluZzsgYW1vdW50OiBudW1iZXI7IGNhc2VfcmVmZXJlbmNlOiBzdHJpbmc7IGNjZF9jYXNlX251bWJlcjogc3RyaW5nOyBjaGFubmVsOiBzdHJpbmc7IGN1cnJlbmN5OiBzdHJpbmc7IGN1c3RvbWVyX3JlZmVyZW5jZTogc3RyaW5nOyBkYXRlX2NyZWF0ZWQ6IHN0cmluZzsgZGF0ZV91cGRhdGVkOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmc7IG1ldGhvZDogc3RyaW5nOyBvcmdhbmlzYXRpb25fbmFtZTogc3RyaW5nOyBwYXltZW50X2FsbG9jYXRpb246IGFueVtdOyByZWZlcmVuY2U6IHN0cmluZzsgc2VydmljZV9uYW1lOiBzdHJpbmc7IHNpdGVfaWQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCxcbiAgICBwcml2YXRlIHJlZnVuZFNlcnZpY2U6IFJlZnVuZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpZXdDb21wU3RhdHVzKTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBbXTtcbiAgICB0aGlzLmRlZmF1bHQgPSAnU2VsZWN0IGEgZGlmZmVyZW50IHJlYXNvbic7XG4gICAgdGhpcy5wYXR0ZXJuMSA9ICdeKFthLXpBLVowLTldezN9KS0oW2EtekEtWjAtOV17M30pLShbYS16QS1aMC05XXszfSkkJztcbiAgICB0aGlzLnBhdHRlcm4yID0gJ14oW0EtWmEtel17Mn1bMC05XXsyfSktKFswLTldezZ9KSQnO1xuICAgIGlmKHRoaXMudmlld0NvbXBTdGF0dXMgIT09ICcnICYmIHRoaXMudmlld0NvbXBTdGF0dXMgIT09IHVuZGVmaW5lZCl7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICAgIH1cbiAgICBpZih0aGlzLnJlbWlzc2lvbikge1xuICAgIH1cbiAgICBpZih0aGlzLmZlZSkge1xuICAgIHRoaXMuYW1vdW50ID0gKHRoaXMuZmVlLnZvbHVtZSAqIHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50KTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMucGF5bWVudCl7XG4gICAgICB0aGlzLnBheW1lbnRSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnQucmVmZXJlbmNlO1xuICAgICAgdGhpcy5yZW1lc3Npb25QYXltZW50ID0gdGhpcy5wYXltZW50O1xuICAgICAgaWYodGhpcy5wYXltZW50LnN0YXR1cyA9PT0gJ1N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMuaXNQYXltZW50U3VjY2VzcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmJzUGF5bWVudERjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5yZW1pc3Npb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICByZW1pc3Npb25Db2RlOiBuZXcgRm9ybUNvbnRyb2woJycsIFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oYCgke3RoaXMucGF0dGVybjF9KXwoJHt0aGlzLnBhdHRlcm4yfSlgKVxuICAgICAgXSkgXG4gICAgICApLFxuICAgICAgYW1vdW50OiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXlswLTldKyhcXC5bMC05XXsxLDJ9KT8kJylcbiAgICAgIF0pKSxcbiAgICAgIHJlZnVuZFJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICByZWZ1bmRERFJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICByZWFzb246IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgZmVlQW1vdW50OiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICAgIGZlZXNMaXN0OiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICByZW1pc3Npb25jdHJsc1sncmVmdW5kRERSZWFzb24nXS5zZXRWYWx1ZSgnU2VsZWN0IGEgZGlmZmVyZW50IHJlYXNvbicsIHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgIGlmKHRoaXMucmVmdW5kUGF5bWVudFJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMucmVmdW5kUGF5bWVudFJlZmVyZW5jZS5sZW5ndGggPjApIHtcbiAgICAgIHRoaXMucGF5bWVudFJlZmVyZW5jZSA9IHRoaXMucmVmdW5kUGF5bWVudFJlZmVyZW5jZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnQucmVmZXJlbmNlO1xuICAgIH1cbiAgICBcblxuICAgIGlmKHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyh0aGlzLnBheW1lbnRSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgICBsZXQgZmVlcyA9IFtdO1xuICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSBmYWxzZTtcbiAgXG4gICAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZW0uZmVlX2NvZGUgPT09IGZlZS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZmVlWydyZW1pc3Npb25zJ10gPSByZW07XG4gICAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzID0gZmVlc1xuICAgICAgICAgIHRoaXMucGF5bWVudEZlZXMgPWZlZXM7XG4gICAgICAgICAgdGhpcy5mZWVzID0gZmVlcztcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcbiAgICAgICAgICBcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgICAgLy8gdGhpcy5pc1N0YXR1c0FsbG9jYXRlZCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+IDAgJiYgcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgPT09ICdBbGxvY2F0ZWQnIHx8IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgdGhpcy5yZWZ1bmRGZWVzTGlzdCgpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBcbiAgICBpZiAodGhpcy5mZWVzICYmIHRoaXMudmlld0NvbXBTdGF0dXMgPT09ICdpc3N1ZXJlZnVuZCcpIHtcbiAgICAgIHRoaXMucmVmdW5kRmVlc0xpc3QoKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAnJyl7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICAgIH1cbiBcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAnaXNzdWVyZWZ1bmRwYWdlMScpe1xuICAgICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLmdldFJlZnVuZFJlYXNvbnMoKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlZnVuZFJlYXNvbnMgPT4geyBcbiAgICAgICAgICB0aGlzLnJlZnVuZFJlYXNvbnMgPSByZWZ1bmRSZWFzb25zLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5yZWNlbnRseV91c2VkID09PSBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRSZWFzb25zID0gdGhpcy5yZWZ1bmRSZWFzb25zLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5uYW1lICE9PSAnUmV0cm9zcGVjdGl2ZSByZW1pc3Npb24nICYmIGRhdGEubmFtZSAhPT0gJ092ZXJwYXltZW50Jyk7XG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5jb21tb25SZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29ucy5maWx0ZXIoKGRhdGEpID0+IGRhdGEucmVjZW50bHlfdXNlZCA9PT0gdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5jb21tb25SZWZ1bmRSZWFzb25zLnNvcnQoKGEsIGIpID0+IGEudG9TdHJpbmcoKS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSApO1xuICAgICAgICB0aGlzLnJlZnVuZFJlYXNvbiA9IHRoaXMuY2hhbmdlUmVmdW5kUmVhc29uO1xuICAgIH1cbiAgICBcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAncHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlJyAmJiB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlKXtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICAgIH1cbiAgICBpZih0aGlzLm9yZGVyRGV0YWlsICE9PSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy5mZWVzID0gdGhpcy5vcmRlckRldGFpbFswXS5mZWVzO1xuICAgICAgdGhpcy5wYXltZW50UmVmZXJlbmNlID0gdGhpcy5vcmRlckRldGFpbFswXS5wYXltZW50c1swXS5yZWZlcmVuY2U7XG4gICAgfVxuXG4gIH1cbiAgZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50TWV0aG9kID0gdGhpcy5wYXltZW50Lm1ldGhvZDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5wYXltZW50R3JvdXBSZWY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnRSZWZlcmVuY2U7XG4gICAgLy90aGlzLlBheW1lbnRWaWV3Q29tcG9uZW50LnZpZXdDb21wU3RhdHVzID0gJ292ZXJwYXltZW50JztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGF5bWVudC12aWV3JztcbiAgfVxuICByZWZ1bmRGZWVzTGlzdCgpIHtcbiAgICBjb25zdCBjcmVkcyA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5mZWVzTGlzdCBhcyBGb3JtQXJyYXk7XG4gIC8vIGlmKGNyZWRzLmNvbnRyb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvcih2YXIgaT0wO2k8dGhpcy5mZWVzLmxlbmd0aDtpKyspIHtcbiAgICAgICAgY3JlZHMucHVzaCh0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICBpZDogdGhpcy5mZWVzW2ldLmlkLFxuICAgICAgICAgIGNvZGU6IHRoaXMuZmVlc1tpXS5jb2RlLFxuICAgICAgICAgIHZvbHVtZTogdGhpcy5mZWVzW2ldLnZvbHVtZSxcbiAgICAgICAgICBjYWxjdWxhdGVkX2Ftb3VudDogdGhpcy5mZWVzW2ldLmNhbGN1bGF0ZWRfYW1vdW50LFxuICAgICAgICAgIGFwcG9ydGlvbl9hbW91bnQ6IHRoaXMuZmVlc1tpXS5hcHBvcnRpb25fYW1vdW50LFxuICAgICAgICAgIGNjZF9jYXNlX251bWJlcjogdGhpcy5mZWVzW2ldLmNjZF9jYXNlX251bWJlcixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5mZWVzW2ldLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIG5ldF9hbW91bnQ6IHRoaXMuZmVlc1tpXS5uZXRfYW1vdW50LFxuICAgICAgICAgIHZlcnNpb246IHRoaXMuZmVlc1tpXS52ZXJzaW9uLFxuICAgICAgICAgIHJlZnVuZF9hbW91bnQgOiBbJyddLFxuICAgICAgICAgIHNlbGVjdGVkOlsnJ10gLFxuICAgICAgICAgIHVwZGF0ZWRfdm9sdW1lOiB0aGlzLmZlZXNbaV0udm9sdW1lXG4gICAgICAgIH0pKTtcbiAgIH1cbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgLy99XG4gIH1cblxuICBnZXQgZmVlc0xpc3QoKVxuICB7XG4gICAgY29uc3QgZGQgPXRoaXMucmVtaXNzaW9uRm9ybS5nZXQoJ2ZlZXNMaXN0JykgYXMgRm9ybUFycmF5IDtcbiAgICByZXR1cm4gdGhpcy5yZW1pc3Npb25Gb3JtLmdldCgnZmVlc0xpc3QnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBub25lU2VsZWN0ZWQoKXtcbiAgICBpZih0aGlzLmlzRnVsbHlSZWZ1bmQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoIXRoaXMuZmVlc0xpc3QuY29udHJvbHMuc29tZShpdGVtID0+IGl0ZW0uZ2V0KCdzZWxlY3RlZCcpLnZhbHVlID09PSB0cnVlKSkge1xuICAgICAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgICAgIFtdLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdpbmxpbmUtZXJyb3ItY2xhc3MnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gICF0aGlzLmZlZXNMaXN0LmNvbnRyb2xzLnNvbWUoaXRlbSA9PiBpdGVtLmdldCgnc2VsZWN0ZWQnKS52YWx1ZSA9PT0gdHJ1ZSk7XG4gIH1cbiAgfVxuICAgIFxuICBjaGVja19lbiAoaSx2MTogYW55LCBBcHBBbXQsVm9sdW1lKSB7XG4gICAgY29uc3QgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodjEpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLmZlZXNMaXN0IGFzIEZvcm1BcnJheTtcbiAgXG4gICAgaWYoZWxlLmNoZWNrZWQpe1xuICAgICAgZm9ybUFycmF5LmF0KGkpLmdldCgncmVmdW5kX2Ftb3VudCcpLnNldFZhbHVlKEFwcEFtdCk7XG4gICAgICBmb3JtQXJyYXkuYXQoaSkuZ2V0KCd2b2x1bWUnKS5zZXRWYWx1ZShWb2x1bWUpO1xuICAgICAgZm9ybUFycmF5LmF0KGkpLmdldCgnc2VsZWN0ZWQnKS5zZXRWYWx1ZSh0cnVlKTtcbiAgICAgIGZvcm1BcnJheS5hdChpKS5nZXQoJ3VwZGF0ZWRfdm9sdW1lJykuc2V0VmFsdWUoVm9sdW1lKTtcbiAgICAgICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlQW1vdW50XycrdjEpKS52YWx1ZSA9IEFwcEFtdDtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmZWVBbW91bnRfJyt2MSkucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7IFxuICAgICAgaWYoVm9sdW1lID09PSAxKSB7XG4gICAgICAgICAgICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnVm9sdW1lVXBkYXRlZF8nK3YxKSkudmFsdWUgPSBWb2x1bWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZVVwZGF0ZWRfJyt2MSkpLnZhbHVlID0gVm9sdW1lO1xuICAgICAgfVxuICAgIFxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmZWVWb2x1bWVVcGRhdGVkXycrdjEpICE9PSBudWxsKSB7XG4gICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmZWVBbW91bnRfJyt2MSkucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7IFxuICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlVm9sdW1lVXBkYXRlZF8nK3YxKS5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTsgICBcbiAgICAgIH0gICBcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpOyBcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IFtdOyAgXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlQW1vdW50XycrdjEpLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwidHJ1ZVwiKTsgXG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0udmFsdWUuZmVlc0xpc3RbaV1bXCJyZWZ1bmRfYW1vdW50XCJdID0gJyc7IFxuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLnZhbHVlLmZlZXNMaXN0W2ldW1widm9sdW1lXCJdID0gJyc7IFxuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLnZhbHVlLmZlZXNMaXN0W2ldW1wic2VsZWN0ZWRcIl0gPSBmYWxzZTsgXG4gICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZUFtb3VudF8nK3YxKSkudmFsdWUgPSAnJztcbiAgICAgIGlmKFZvbHVtZT4xKSB7XG4gICAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdFtpXVtcInZvbHVtZVwiXSA9ICcnOyBcbiAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZVVwZGF0ZWRfJyt2MSkpLnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlVm9sdW1lVXBkYXRlZF8nK3YxKSAhPT0gbnVsbCkge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZVVwZGF0ZWRfJyt2MSkucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7ICBcbiAgICAgIH1cbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gIFxuICB9XG5cblxuICBhZGRSZW1pc3Npb24oKSB7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID4gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kUmVhc29uJ10uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRERFJlYXNvbiddLnNldEVycm9ycyhudWxsKTtcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICYmIHRoaXMucmVtaXNzaW9uRm9ybS52YWxpZCAmJiBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKSB7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29uZmlybWF0aW9uJztcbiAgICB9ZWxzZSB7XG5cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJscy5hbW91bnQudmFsaWQgJiYgIWlzUmVtaXNzaW9uTGVzc1RoYW5GZWUpe1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1SZW1pc3Npb24oKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICBjb25zdCBuZXdOZXRBbW91bnQgPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlLFxuICAgICByZW1pc3Npb25BbW91bnQgPSB0aGlzLmZlZS5uZXRfYW1vdW50IC0gbmV3TmV0QW1vdW50LFxuICAgICByZXF1ZXN0Qm9keSA9IG5ldyBBZGRSZW1pc3Npb25SZXF1ZXN0XG4gICAgKHRoaXMuY2NkQ2FzZU51bWJlciwgdGhpcy5mZWUsIHJlbWlzc2lvbkFtb3VudCwgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLnJlbWlzc2lvbkNvZGUudmFsdWUsIHRoaXMuY2FzZVR5cGUpO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RQYXltZW50R3JvdXBXaXRoUmVtaXNzaW9ucyhkZWNvZGVVUklDb21wb25lbnQodGhpcy5wYXltZW50R3JvdXBSZWYpLnRyaW0oKSwgdGhpcy5mZWUuaWQsIHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzKSB7XG4gICAgICAgICAgbGV0IExEVXJsID0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSdcbiAgICAgICAgICAgIExEVXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLmNhc2VUeXBlfWBcbiAgICAgICAgICAgIExEVXJsICs9IHRoaXMuaXNOZXdQY2lwYWxPZmYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnXG4gICAgICAgICAgICBMRFVybCArPSB0aGlzLmlzT2xkUGNpcGFsT2ZmID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJ1xuICAgICAgICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1mZWUtc3VtbWFyeSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSZwYXltZW50R3JvdXBSZWY9JHt0aGlzLnBheW1lbnRHcm91cFJlZn0mZGNuPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbn0ke0xEVXJsfWApO1xuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJlc2V0UmVtaXNzaW9uRm9ybSh2YWwsIGZpZWxkKXtcbiAgICBpZiAoZmllbGQ9PT0nQWxsJyl7XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uQ29kZUVtcHR5ID0gdmFsWzBdO1xuICAgICAgdGhpcy5yZW1pc3Npb25Db2RlSGFzRXJyb3IgPSB2YWxbMV07XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMl07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzNdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbNF07XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbNV07XG4gICAgfSBlbHNlIGlmKGZpZWxkPT09J3JlbWlzc2lvbkNvZGUnIHx8IGZpZWxkPT09J0FsbCcpIHtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25Db2RlRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLnJlbWlzc2lvbkNvZGVIYXNFcnJvciA9IHZhbFsxXTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkPT09J2Ftb3VudCcgfHwgZmllbGQ9PT0nQWxsJyl7XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMl07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzNdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbNF07XG4gICAgfSBlbHNlIGlmIChmaWVsZD09PSdyZWFzb24nIHx8IGZpZWxkPT09J0FsbCcpe1xuICAgICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gdmFsWzVdO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCByZXRybyByZW1pc3Npb24gY2hhbmdlc1xuICBhZGRSZW1pc3Npb25Db2RlKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgLy8gdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBbXTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gZmFsc2U7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzXG4gICAgIC8vIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWUgPSB0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudCA+PSByZW1pc3Npb25jdHJscy5hbW91bnQudmFsdWU7IFxuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRSZWFzb24nXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZEREUmVhc29uJ10uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydhbW91bnQnXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSAmJiB0aGlzLnJlbWlzc2lvbkZvcm0udmFsaWQgKSB7XG4gICAgICBpZiAoIXRoaXMuaXNGcm9tQ2hlY2tBbnNQYWdlKSB7XG4gICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gXCJwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2VcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NoZWNrcmV0cm9yZW1pc3Npb25wYWdlJztcbiAgICAgIH1cbiAgICAgIFxuICAgIH1lbHNlIHtcblxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnZhbHVlID09ICcnKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV0sICdyZWFzb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICBcbiAgICB9XG4gIH1cblxuXG4gIGdvdG9BZGRSZXRyb1JlbWlzc2lvbkNvZGVQYWdlKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgaWYodGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlZnVuZExpc3RBbW91bnQuZW1pdCgpO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmdW5kTGlzdFJlYXNvbi5lbWl0KHtyZWFzb246IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24sIGNvZGU6IHRoaXMucmVmdW5kUmVhc29ufSk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfSBcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAneWVzJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gXCJhZGRyZW1pc3Npb25cIjtcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBbXTtcbiAgICBpZih0aGlzLmlzRnJvbVBheW1lbnREZXRhaWxQYWdlKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGF5bWVudC12aWV3JztcbiAgICB9XG4gIH1cblxuICBnb3RvQ2hlY2tSZXRyb1JlbWlzc2lvblBhZ2UocGF5bWVudDogSVBheW1lbnQpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ0FsbCcpO1xuICAgIGlmKCAhdGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgIHZhciByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMsXG4gICAgICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlID0gdGhpcy5mZWUuY2FsY3VsYXRlZF9hbW91bnQgPj0gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICkge1xuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnIHx8IHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA8IDApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfSBlbHNlIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfSBlbHNlIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCAmJiAhaXNSZW1pc3Npb25MZXNzVGhhbkZlZSl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwiY2hlY2tyZXRyb3JlbWlzc2lvbnBhZ2VcIjtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICAvL2lmICh0aGlzLnJlbWlzc2lvbkZvcm0uZGlydHkgKSB7XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycgfHwgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlIDwgMCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gXCJjaGVja3JldHJvcmVtaXNzaW9ucGFnZVwiO1xuICAgICAgICAgIHRoaXMucmVmdW5kTGlzdEFtb3VudC5lbWl0KHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSk7XG4gICAgICB9XG4gICAgLy99XG4gICBcbiAgfVxuICB9XG4gIGdvdG9BbW91bnRSZXRyb1JlbWlzc2lvbigpIHtcbiAgICB0aGlzLmlzRnJvbUNoZWNrQW5zUGFnZSA9IGZhbHNlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAvLyB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICB9XG4gIGdvdG9Qcm9jZXNzUmV0cm9SZW1pc3Npb25QYWdlKCkge1xuICAgIHRoaXMuaXNGcm9tQ2hlY2tBbnNQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2FkZHJlbWlzc2lvbic7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gIH1cblxuICBnb3RvUHJvY2Vzc1JldHJvUmVtaXNzaW9uKG5vdGU/OiBJUmVmdW5kQ29udGFjdERldGFpbHMpIHtcbiAgICBpZihub3RlKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IHsgY29udGFjdF9kZXRhaWxzOiBub3RlLCBub3RpZmljYXRpb25fdHlwZTogbm90ZS5ub3RpZmljYXRpb25fdHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmlzRnJvbUNoZWNrQW5zUGFnZSA9IHRydWU7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ3JlbWlzc2lvbkFkZHJlc3NQYWdlJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgfVxuXG4gIGNvbmZpcm1SZXRyb1JlbWlzc2lvbigpIHtcbiAgICBpZighdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkKSB7XG4gICAgdGhpcy5yZXRyb1JlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5yZW1pc3Npb25hbXQgPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlO1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IEFkZFJldHJvUmVtaXNzaW9uUmVxdWVzdCh0aGlzLnJlbWlzc2lvbmFtdCx0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMucmVtaXNzaW9uQ29kZS52YWx1ZSApXG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFBheW1lbnRHcm91cFdpdGhSZXRyb1JlbWlzc2lvbnMoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucGF5bWVudEdyb3VwUmVmKS50cmltKCksIHRoaXMuZmVlLmlkLCByZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uQXBwbGllZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmV0cm9yZW1pc3Npb25jb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICB0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSA9SlNPTi5wYXJzZShyZXNwb25zZSkucmVtaXNzaW9uX3JlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NSZWZ1bmQoKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICBpZiggdGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgICAgdGhpcy5yZXRyb1JlbWlzc2lvbiA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucmVtaXNzaW9uUmVmZXJlbmNlID09PSAnJykge1xuICAgICAgdGhpcy5yZW1pc3Npb25SZWZlcmVuY2UgPSB0aGlzLnJlbWlzc2lvbi5yZW1pc3Npb25fcmVmZXJlbmNlO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IG5ldyBQb3N0SXNzdWVSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSwgdGhpcy5jb250YWN0RGV0YWlsc09iaik7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZWZ1bmRjb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgICAgICAgICAgIHRoaXMucmVmdW5kQW1vdW50ID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSlcbiAgfVxuXG4gIC8vIElzc3VlIFJlZnVuZCBjaGFuZ2VzXG5cbiAgZ290b0lzc3VlUmVmdW5kQ29uZmlybWF0aW9uKHBheW1lbnQ6IElQYXltZW50KSB7XG4gICBcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gZmFsc2U7XG4gICAgaWYodGhpcy5wYXltZW50TGliQ29tcG9uZW50LlJFRlVORExJU1QgPT09IFwidHJ1ZVwiKSB7XG4gICAgICB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlID0gdHJ1ZTsgXG4gICAgfVxuXG4gICAgdGhpcy50b3RhbFJlZnVuZEFtb3VudCA9IHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdC5yZWR1Y2UoKGEsIGMpID0+IGEgKyBjLnJlZnVuZF9hbW91bnQgKiBjLnNlbGVjdGVkLCAwKTtcblxuXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5yZWZ1bmRSZWFzb24gPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnZhbHVlID09PSBudWxsID8gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRERFJlYXNvbiddLnZhbHVlIDogdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRSZWFzb24nXS52YWx1ZTtcbiAgICBpZighdGhpcy5yZWZ1bmRSZWFzb24gfHwgdGhpcy5yZWZ1bmRSZWFzb24gPT09ICdTZWxlY3QgYSBkaWZmZXJlbnQgcmVhc29uJykge1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IHRydWU7XG4gICAgfSBlbHNlIGlmKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykgJiYgKHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWUgPT0gJycgfHwgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZSA9PSBudWxsKSkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWVdLCAncmVhc29uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLmluY2x1ZGVzKCdPdGhlcicpICYmIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWUgIT09ICcnKSB7XG4gICAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZnVuZFJlYXNvbiArPSAgJy0nICsgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZTtcbiAgICAgIHRoaXMuZGlzcGxheVJlZnVuZFJlYXNvbiA9IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24gKyAnLScgKyB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlO1xuICAgICAgaWYgKCB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlICkge1xuICAgICAgICB0aGlzLnJlZnVuZExpc3RSZWFzb24uZW1pdCh7cmVhc29uOiB0aGlzLmRpc3BsYXlSZWZ1bmRSZWFzb24sIGNvZGU6IHRoaXMucmVmdW5kUmVhc29ufSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZih0aGlzLmlzRnJvbUNoZWNrQW5zUGFnZSkge1xuICAgICAgICAgIHRoaXMudG90YWxSZWZ1bmRBbW91bnQgPSB0aGlzLnJlbWlzc2lvbkZvcm0udmFsdWUuZmVlc0xpc3QucmVkdWNlKChhLCBjKSA9PiBhICsgYy5yZWZ1bmRfYW1vdW50ICogYy5zZWxlY3RlZCwgMCk7XG4gICAgICAgICAgdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY2hlY2tpc3N1ZXJlZnVuZHBhZ2UnO1xuICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29udGFjdERldGFpbHNQYWdlJztcbiAgICAgIH1cbiAgICAgIFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlSZWZ1bmRSZWFzb24gPSB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uO1xuICAgICAgaWYodGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UpIHtcbiAgICAgICAgdGhpcy50b3RhbFJlZnVuZEFtb3VudCA9IHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdC5yZWR1Y2UoKGEsIGMpID0+IGEgKyBjLnJlZnVuZF9hbW91bnQgKiBjLnNlbGVjdGVkLCAwKTtcbiAgICAgICAgdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NoZWNraXNzdWVyZWZ1bmRwYWdlJztcbiAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NvbnRhY3REZXRhaWxzUGFnZSc7XG4gICAgICB9XG4gICBcbiAgICB9XG4gIH1cblxuICBnb3RvSXNzdWVSZWZ1bmRQYWdlKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdpc3N1ZXJlZnVuZCc7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJyc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IGZhbHNlO1xuICB9XG5cbiAgZ290b0lzc3VlUGFnZShpc0Z1bGx5UmVmdW5kOiBhbnkpe1xuaWYoaXNGdWxseVJlZnVuZCkge1xuICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2lzc3VlcmVmdW5kcGFnZTEnO1xuICB0aGlzLmdldFJlZnVuZFJlYXNvbnMoKTtcbn0gZWxzZSB7XG4gICAgW10uZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0JyksIGZ1bmN0aW9uIChlbCkge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnaW5saW5lLWVycm9yLWNsYXNzJyk7XG4gICAgfSk7XG5cblx0ICB2YXIgY2hlY2tib3hzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XG5cdCAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnRvdGFsUmVmdW5kQW1vdW50ID0gMDtcbiAgICB0aGlzLmVycm9yTXNnID0gW107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdFx0XHRmb3IgKHZhciBqPTA7ajxjaGVja2JveHMubGVuZ3RoO2orKylcblx0XHRcdHtcblx0XHRcdFx0aWYoY2hlY2tib3hzW2pdLmNoZWNrZWQpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLmZ1bGxSZWZ1bmQgPSBmYWxzZTtcblx0XHRcdFx0XHRsZXQgcXVhbnRpdHk6IG51bWJlciA9ICsoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZV8nK2NoZWNrYm94c1tqXS52YWx1ZSkpLnZhbHVlO1xuICAgICAgICAgIGxldCBhbW91bnRUb1JlZnVuZDogbnVtYmVyID0gKyg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlQW1vdW50XycrY2hlY2tib3hzW2pdLnZhbHVlKSkudmFsdWU7XG5cdFx0XHRcdFx0bGV0IGFwcG9ydGlvbkFtb3VudDogbnVtYmVyID0gKyg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlQXBwb3J0aW9uQW1vdW50XycrY2hlY2tib3hzW2pdLnZhbHVlKSkudmFsdWU7XG5cdFx0XHRcdFx0bGV0IGNhbGN1bGF0ZWRBbW91bnQ6IG51bWJlciA9ICsoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbGN1bGF0ZWRBbW91bnRfJytjaGVja2JveHNbal0udmFsdWUpKS52YWx1ZTsgXG4gICAgICAgICBcbiAgICAgICAgICBpZiggYW1vdW50VG9SZWZ1bmQgPT09IGFwcG9ydGlvbkFtb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mdWxsUmVmdW5kID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihhbW91bnRUb1JlZnVuZCA9PT0gMCl7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRJZCA9ICdmZWVBbW91bnRfJytjaGVja2JveHNbal0udmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVycm9yTXNnLnB1c2goJ1lvdSBuZWVkIHRvIGVudGVyIGEgcmVmdW5kIGFtb3VudCcpO1xuICAgICAgICAgICAgdGhpcy5nZXRFcnJvckNsYXNzKHRoaXMuZWxlbWVudElkKTtcblx0XHRcdFx0XHR9XG5cbiAgICAgICAgIFxuXG4gICAgICAgICAgaWYgKHF1YW50aXR5ID09PSAxKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmKGFtb3VudFRvUmVmdW5kID4gMCAmJiBhbW91bnRUb1JlZnVuZCA+IGFwcG9ydGlvbkFtb3VudCl7XG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudElkID0gJ2ZlZUFtb3VudF8nK2NoZWNrYm94c1tqXS52YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1zZy5wdXNoKCdUaGUgYW1vdW50IHlvdSB3YW50IHRvIHJlZnVuZCBpcyBtb3JlIHRoYW4gdGhlIGFtb3VudCBwYWlkJyk7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0RXJyb3JDbGFzcyh0aGlzLmVsZW1lbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBcblxuXHRcdFx0XHRcdGlmKHF1YW50aXR5ID4gMSkge1xuXG5cdFx0XHRcdFx0XHR0aGlzLnF1YW50aXR5VXBkYXRlZCA9ICsoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZVVwZGF0ZWRfJytjaGVja2JveHNbal0udmFsdWUpKS52YWx1ZTtcblxuICAgICAgICAgICAgaWYodGhpcy5xdWFudGl0eVVwZGF0ZWQgPT09IDApe1xuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRJZCA9ICdmZWVWb2x1bWVVcGRhdGVkXycrY2hlY2tib3hzW2pdLnZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTXNnLnB1c2goJ1lvdSBuZWVkIHRvIGVudGVyIHF1YW50aXR5JylcbiAgICAgICAgICAgICAgdGhpcy5nZXRFcnJvckNsYXNzKHRoaXMuZWxlbWVudElkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuZnVsbFJlZnVuZCAmJiBxdWFudGl0eSAhPT0gdGhpcy5xdWFudGl0eVVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50SWQgPSAnZmVlVm9sdW1lVXBkYXRlZF8nK2NoZWNrYm94c1tqXS52YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1zZy5wdXNoKCdUaGUgcXVhbnRpdHkgeW91IHdhbnQgdG8gcmVmdW5kIHNob3VsZCBiZSBtYXhpbXVuIGF2YWlsYWJsZSBxdWFudGl0eScpO1xuICAgICAgICAgICAgICB0aGlzLmdldEVycm9yQ2xhc3ModGhpcy5lbGVtZW50SWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuZnVsbFJlZnVuZCAmJiB0aGlzLnF1YW50aXR5VXBkYXRlZCA+IDAgJiYgYW1vdW50VG9SZWZ1bmQgPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVmdW5kQW10Rm9yRmVlVm9sdW1lcyA9ICsoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZPbF8nK2NoZWNrYm94c1tqXS52YWx1ZSkpLmlubmVyVGV4dDtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd2VkUmVmdW5kQW1vdW50ID0gdGhpcy5xdWFudGl0eVVwZGF0ZWQgKiB0aGlzLnJlZnVuZEFtdEZvckZlZVZvbHVtZXM7XG4gICAgICAgICAgICAgIGlmKCB0aGlzLmFsbG93ZWRSZWZ1bmRBbW91bnQgIT09IGFtb3VudFRvUmVmdW5kKSBcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudElkID0gJ2ZlZUFtb3VudF8nK2NoZWNrYm94c1tqXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTXNnLnB1c2goJ1RoZSBBbW91bnQgdG8gUmVmdW5kIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgcHJvZHVjdCBvZiBGZWUgQW1vdW50IGFuZCBxdWFudGl0eScpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RXJyb3JDbGFzcyh0aGlzLmVsZW1lbnRJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoIXRoaXMuZnVsbFJlZnVuZCAmJiBhbW91bnRUb1JlZnVuZCA+IGFwcG9ydGlvbkFtb3VudClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50SWQgPSAnZmVlQW1vdW50XycrY2hlY2tib3hzW2pdLnZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTXNnLnB1c2goJ1RoZSBhbW91bnQgeW91IHdhbnQgdG8gcmVmdW5kIGlzIG1vcmUgdGhhbiB0aGUgYW1vdW50IHBhaWQnKTtcbiAgICAgICAgICAgICAgdGhpcy5nZXRFcnJvckNsYXNzKHRoaXMuZWxlbWVudElkKTtcbiAgICAgICAgICAgIH1cblx0XG4gICAgICAgICAgICBpZiggIXRoaXMuZnVsbFJlZnVuZCAmJiB0aGlzLnF1YW50aXR5VXBkYXRlZCA+MCAmJiB0aGlzLnF1YW50aXR5VXBkYXRlZCA+IHF1YW50aXR5KXtcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50SWQgPSAnZmVlVm9sdW1lVXBkYXRlZF8nK2NoZWNrYm94c1tqXS52YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1zZy5wdXNoKCdUaGUgcXVhbnRpdHkgeW91IHdhbnQgdG8gcmVmdW5kIGlzIG1vcmUgdGhhbiB0aGUgYXZhaWxhYmxlIHF1YW50aXR5Jyk7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0RXJyb3JDbGFzcyh0aGlzLmVsZW1lbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy90aGlzLnJlbWlzc2lvbkZvcm0udmFsdWUuZmVlc0xpc3QuZmluZChpZD0+aWQ9Y2hlY2tib3hzW2pdLnZhbHVlKVsncmVmdW5kX2Ftb3VudCddID0gYXBwb3J0aW9uQW1vdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cbiAgICAgIGlmKHRoaXMuZXJyb3JNc2cubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRnJvbUNoZWNrQW5zUGFnZSkge1xuICAgICAgICAgIHRoaXMuaXNGcm9tQ2hlY2tBbnNQYWdlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy50b3RhbFJlZnVuZEFtb3VudCA9IHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdC5yZWR1Y2UoKGEsIGMpID0+IGEgKyBjLnJlZnVuZF9hbW91bnQgKiBjLnNlbGVjdGVkLCAwKTtcbiAgICAgICAgICB0aGlzLmZlZXMgPSB0aGlzLnJlbWlzc2lvbkZvcm0udmFsdWUuZmVlc0xpc3QuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnNlbGVjdGVkPT09dHJ1ZSk7XG4gICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NoZWNraXNzdWVyZWZ1bmRwYWdlJ1xuICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlKXtcbiAgICAgICAgICB2YXIgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzO1xuICAgICAgICAgIHRoaXMudG90YWxSZWZ1bmRBbW91bnQgPSB0aGlzLnJlbWlzc2lvbkZvcm0udmFsdWUuZmVlc0xpc3QucmVkdWNlKChhLCBjKSA9PiBhICsgYy5yZWZ1bmRfYW1vdW50ICogYy5zZWxlY3RlZCwgMCk7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRMaXN0QW1vdW50LmVtaXQodGhpcy50b3RhbFJlZnVuZEFtb3VudC50b1N0cmluZygpKTtcbiAgICAgICAgICB0aGlzLmZlZXMgPSB0aGlzLnJlbWlzc2lvbkZvcm0udmFsdWUuZmVlc0xpc3QuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnNlbGVjdGVkPT09dHJ1ZSk7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRGZWVzLmVtaXQodGhpcy5mZWVzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdpc3N1ZXJlZnVuZHBhZ2UxJztcbiAgICAgICAgdGhpcy5nZXRSZWZ1bmRSZWFzb25zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FsQW10VG9SZWZ1bmQodmFsdWUsYW1vdW50LHZvbHVtZSwgaTogYW55KSB7XG4gICAgIGNvbnN0IHZvbHVtZUZlZSA9IGFtb3VudC92b2x1bWU7XG4gICAgIGNvbnN0IGFtdFRvUmVmdW5kID0gdmFsdWUgKiB2b2x1bWVGZWU7XG4gICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5mZWVzTGlzdCBhcyBGb3JtQXJyYXk7XG4gICAgIGZvcm1BcnJheS5hdChpKS5nZXQoJ3JlZnVuZF9hbW91bnQnKS5zZXRWYWx1ZShhbXRUb1JlZnVuZCk7XG4gICAgLy8gZm9ybUFycmF5LmF0KGkpLmdldCgndm9sdW1lJykuc2V0VmFsdWUodmFsdWUpO1xuICAgLy8gICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlQW1vdW50XycraSkpLnZhbHVlID0gK2FtdFRvUmVmdW5kO1xuICAgIC8vICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5mZWVzTGlzdFsndm9sdW1lJ10uYXQoaSk7XG4gICAgLy8gIGZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcblxuICB9XG4gIGdvdG9Db250YWN0RGV0YWlsc1BhZ2Uobm90ZT86IElSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIGlmIChub3RlKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IHsgY29udGFjdF9kZXRhaWxzOiBub3RlLCBub3RpZmljYXRpb25fdHlwZTogbm90ZS5ub3RpZmljYXRpb25fdHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29udGFjdERldGFpbHNQYWdlJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICB9XG4gIFxuICBnZXRSZWZ1bmRSZWFzb25zKCl7XG4gIGlmKHRoaXMudmlld0NvbXBTdGF0dXMgPT09ICdpc3N1ZXJlZnVuZHBhZ2UxJyl7XG4gICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLmdldFJlZnVuZFJlYXNvbnMoKS5zdWJzY3JpYmUoXG4gICAgICByZWZ1bmRSZWFzb25zID0+IHsgXG4gICAgICAgIHRoaXMucmVmdW5kUmVhc29ucyA9IHJlZnVuZFJlYXNvbnMuZmlsdGVyKChkYXRhKSA9PiBkYXRhLnJlY2VudGx5X3VzZWQgPT09IGZhbHNlKTtcbiAgICAgICAgdGhpcy5yZWZ1bmRSZWFzb25zID0gdGhpcy5yZWZ1bmRSZWFzb25zLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5uYW1lICE9PSAnUmV0cm9zcGVjdGl2ZSByZW1pc3Npb24nKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY29tbW9uUmVmdW5kUmVhc29ucyA9IHJlZnVuZFJlYXNvbnMuZmlsdGVyKChkYXRhKSA9PiBkYXRhLnJlY2VudGx5X3VzZWQgPT09IHRydWUpO1xuICAgICAgICB0aGlzLmNvbW1vblJlZnVuZFJlYXNvbnMuc29ydCgoYSwgYikgPT4gYS50b1N0cmluZygpLmxvY2FsZUNvbXBhcmUoYikpO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gKTtcbiAgfVxufVxuICAgZ2V0RXJyb3JDbGFzcyhlbGVtZW50SWQpIHtcbiAgICAgaWYodGhpcy5lcnJvck1zZy5sZW5ndGggPiAwKSB7XG4gICAgICAgY29uc3QgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICAgICBlbGUuY2xhc3NMaXN0LmFkZCgnaW5saW5lLWVycm9yLWNsYXNzJyk7XG4gICAgIH1cbiAgICAgIFxuICB9XG5cbiAgY2hhbmdlSXNzdWVSZWZ1bmRSZWFzb24oKSB7XG4gICAgdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvck1zZyA9IFtdO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2lzc3VlcmVmdW5kcGFnZTEnO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICB9XG5cbiAgY29uZmlybUlzc3VlUmVmdW5kKGlzRnVsbHlSZWZ1bmQ6IGFueSkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZihpc0Z1bGx5UmVmdW5kKSB7XG4gICAgICB0aGlzLnRvdGFsUmVmdW5kQW1vdW50ID0gdGhpcy5wYXltZW50LmFtb3VudDtcbiAgICB9XG4gICAgaWYoIWlzRnVsbHlSZWZ1bmQpIHtcbiAgICAgIHRoaXMuZmVlcyA9IHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdC5maWx0ZXIodmFsdWUgPT4gdmFsdWUuc2VsZWN0ZWQ9PT10cnVlKTtcbiAgICB9XG4gICAgdGhpcy5mZWVzICA9IHRoaXMuZmVlcy5tYXAob2JqID0+ICh7IGlkOiBvYmouaWQsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IG9iai5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246b2JqLnZlcnNpb24sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcG9ydGlvbl9hbW91bnQ6IG9iai5hcHBvcnRpb25fYW1vdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRfYW1vdW50OiBvYmouY2FsY3VsYXRlZF9hbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZF92b2x1bWU6IG9iai51cGRhdGVkX3ZvbHVtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZ1bmRfYW1vdW50Om9iai5yZWZ1bmRfYW1vdW50IH0pKTtcbiBcbiAgXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uKHRoaXMuY29udGFjdERldGFpbHNPYmosIHRoaXMuZmVlcyx0aGlzLnBheW1lbnQucmVmZXJlbmNlLCB0aGlzLnJlZnVuZFJlYXNvbiwgXG4gICAgICB0aGlzLnRvdGFsUmVmdW5kQW1vdW50KTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UmVmdW5kc1JlYXNvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZWZ1bmRjb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID1KU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfcmVmZXJlbmNlO1xuICAgICAgICAgICAgaWYoSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudCkge1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRBbW91bnQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICB9XG5cbiAgZ290b1JlZnVuZFJlYXNvblBhZ2UgKCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnaXNzdWVyZWZ1bmRwYWdlMSc7XG4gICAgXG4gIH1cblxuLy8gUmV0cm8gUmVmdW5kXG5cbiAgLy8gY29uZmlybVJldHJvUmVmdW5kKCkge1xuICAvLyAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gIC8vICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgLy8gICB0aGlzLmVycm9yTXNnID0gW107XG4gIC8vICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgLy8gICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLnBheW1lbnQucmVmZXJlbmNlLCdSUjAwNC1SZXRyb3NwZWN0aXZlIHJlbWlzc2lvbicsIHRoaXMuY29udGFjdERldGFpbHNPYmopO1xuICAvLyAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RSZWZ1bmRzUmVhc29uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gIC8vICAgICByZXNwb25zZSA9PiB7XG4gIC8vICAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpKSB7XG4gIC8vICAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICcnO1xuICAvLyAgICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3JldHJvcmVmdW5kY29uZmlybWF0aW9ucGFnZSc7XG4gIC8vICAgICAgICAgICB0aGlzLnJlZnVuZFJlZmVyZW5jZSA9SlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgLy8gICAgICAgICAgIGlmKEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQpIHtcbiAgLy8gICAgICAgICAgICAgdGhpcy5yZWZ1bmRBbW91bnQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50O1xuICAvLyAgICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgfSxcbiAgLy8gICAgIChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gIC8vICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAvLyAgICAgfSk7XG4gIC8vIH1cblxuICBzZWxlY3RSYWRpb0J1dHRvbihrZXksIHZhbHVlKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJteXJhZGlvXCIsIGtleSk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzO1xuICAgIHJlbWlzc2lvbmN0cmxzWydyZWZ1bmRERFJlYXNvbiddLnNldFZhbHVlKCdTZWxlY3QgYSBkaWZmZXJlbnQgcmVhc29uJywge29ubHlTZWxmOiB0cnVlfSk7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnJlc2V0KCk7XG4gICAgdGhpcy5pc1JlZnVuZFJlYXNvbnNTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gZmFsc2U7XG4gICAgdGhpcy5zaG93UmVhc29uVGV4dCA9IGZhbHNlO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uID0ga2V5O1xuICAgIGlmKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykpIHtcbiAgICAgIHRoaXMuc2hvd1JlYXNvblRleHQgPSB0cnVlO1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZ1bmRSZWFzb24gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Y2hhbmdlKGFyZ3MpIHtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlZnVuZFJlYXNvbiddLnJlc2V0KCk7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnJlc2V0KCk7XG4gICAgdGhpcy5pc1JlZnVuZFJlYXNvbnNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd1JlYXNvblRleHQgPSBmYWxzZTtcbiAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiA9IGFyZ3MudGFyZ2V0Lm9wdGlvbnNbYXJncy50YXJnZXQub3B0aW9ucy5zZWxlY3RlZEluZGV4XS5pZDtcbiAgICB0aGlzLnJlYXNvbkxlbmd0aCA9ICgyOS10aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLnNwbGl0KCctICcpWzFdLmxlbmd0aCk7XG5cbiAgICBpZih0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLmluY2x1ZGVzKCdPdGhlcicpKSB7XG4gICAgICB0aGlzLnNob3dSZWFzb25UZXh0ID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmdW5kUmVhc29uID0gYXJncy50YXJnZXQub3B0aW9uc1thcmdzLnRhcmdldC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdLmlkO1xuICAgIH1cblxuXG4gIH1cbiAgZ2V0Q29udGFjdERldGFpbHMob2JqOklSZWZ1bmRDb250YWN0RGV0YWlscywgdHlwZSkge1xuICAgIHRoaXMuY29udGFjdERldGFpbHNPYmogPSBvYmo7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgIHRoaXMudmlld1N0YXR1cyA9IHR5cGU7XG4gIH1cblxuICBnb3RvUGFydGlhbEZlZVJlZnVuZFNjcmVlbigpIHtcblxuICAgIGlmICh0aGlzLmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2Upe1xuICAgICAgdmFyIHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICAgIHRoaXMucmVmdW5kTGlzdFJlYXNvbi5lbWl0KHtyZWFzb246IHRoaXMuZGlzcGxheVJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgID0gJ2lzc3VlcmVmdW5kJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgfVxuXG4gIFxuXG4gIGdvdG9TZXJ2aWNlUmVxdWVzdFBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0nJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSBmYWxzZTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKHRoaXMuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSl7XG4gICAgICB2YXIgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzO1xuICAgICAgdGhpcy50b3RhbFJlZnVuZEFtb3VudCA9IHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdC5yZWR1Y2UoKGEsIGMpID0+IGEgKyBjLnJlZnVuZF9hbW91bnQgKiBjLnNlbGVjdGVkLCAwKTtcbiAgICAgIHRoaXMucmVmdW5kTGlzdEFtb3VudC5lbWl0KHRoaXMudG90YWxSZWZ1bmRBbW91bnQudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSAmJiAhdGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdvcmRlci1mdWxsLXZpZXcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB9IGVsc2UgaWYgKCB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlICkge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudE1ldGhvZCA9IHRoaXMucGF5bWVudC5tZXRob2Q7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZVxuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnQucmVmZXJlbmNlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtdmlldyc7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldE9yZGVyUmVmKHRoaXMub3JkZXJSZWYpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckNDREV2ZW50KHRoaXMub3JkZXJDQ0RFdmVudCk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyQ3JlYXRlZCh0aGlzLm9yZGVyQ3JlYXRlZCk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRGV0YWlsKHRoaXMub3JkZXJEZXRhaWwpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclBhcnR5KHRoaXMub3JkZXJQYXJ0eSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyVG90YWxQYXltZW50cyh0aGlzLm9yZGVyVG90YWxQYXltZW50cyk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyUmVtaXNzaW9uVG90YWwodGhpcy5vcmRlclJlbWlzc2lvblRvdGFsKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJGZWVzVG90YWwodGhpcy5vcmRlckZlZXNUb3RhbCk7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5bWVudC12aWV3JztcbiAgICAgIHRoaXMuc2VuZE9yZGVyRGV0YWlsID0gdGhpcy5vcmRlckRldGFpbDtcbiAgICAgIHRoaXMuc2VuZE9yZGVyUmVmID0gdGhpcy5vcmRlclJlZjtcbiAgICAgIGlmKHRoaXMuTE9HR0VESU5VU0VSUk9MRVMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldFVzZXJSb2xlc0xpc3QoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMuTE9HR0VESU5VU0VSUk9MRVMgPSBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB9XG5cbiAgfVxuICBnb3RvQWRkcmVzc1BhZ2Uobm90ZT86IElSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIGlmIChub3RlKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IHsgY29udGFjdF9kZXRhaWxzOiBub3RlLCBub3RpZmljYXRpb25fdHlwZTogbm90ZS5ub3RpZmljYXRpb25fdHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICB9XG4gIGdvdG9SZW1pc3Npb25TdWNjZXNzKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ3JldHJvcmVtaXNzaW9uY29uZmlybWF0aW9ucGFnZSc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIGdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKSB7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvck1zZyA9IFtdO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlZJRVcgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPSB0aGlzLmlzTmV3UGNpcGFsT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA9IHRoaXMuaXNPbGRQY2lwYWxPZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7ICBcbiAgICB0aGlzLnJlc2V0T3JkZXJEYXRhKCk7XG4gICAgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJztcbiAgICBjb25zdCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVH0mc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0ke3BhcnRVcmx9YDtcbiAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gIH1cblxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlQ2FuY2VsQnRuQ2xpY2tlZChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBbXTtcbiAgICBpZiggdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVklFVyA9J2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0aXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKGZhbHNlKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVklFVyA9J2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gZmFsc2U7XG4gICAgdGhpcy5yZXNldE9yZGVyRGF0YSgpOyBsZXQgcGFydFVybCA9IHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID8gYCZkY249JHt0aGlzLmJzUGF5bWVudERjbk51bWJlcn1gIDogJyc7XG4gICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAgIHBhcnRVcmwgKz0gdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuICAgY29uc3QgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlR9JnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICB9IGVsc2UgeyAgXG5cbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LlJFRlVORExJU1QpIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdyZWZ1bmQtbGlzdCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUID0gJ2ZhbHNlJztcbiAgICB9XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0cGF5bWVudFBhZ2VWaWV3KHttZXRob2Q6ICcnLHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiAnJywgcmVmZXJlbmNlOicnfSk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTTkVXUENJUEFMT0ZGID0gdGhpcy5pc05ld1BjaXBhbE9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkYgPSB0aGlzLmlzT2xkUGNpcGFsT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0cnVlOyAgXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgIGxldCBwYXJ0VXJsID0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgIGlmKHRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UpIHtcbiAgICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZVxuICAgICB9XG5cbiAgICAgaWYoIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVCkge1xuICAgICAgY29uc3QgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlR9JnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdXJsID1gL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/c2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0ke3BhcnRVcmx9YDtcbiAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgIH1cbiAgICB9XG4gICAgXG4gIH1cblxuICByZXNldE9yZGVyRGF0YSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldE9yZGVyUmVmKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJDQ0RFdmVudChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyQ3JlYXRlZChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRGV0YWlsKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJQYXJ0eShudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyVG90YWxQYXltZW50cyhudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyUmVtaXNzaW9uVG90YWwobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckZlZXNUb3RhbChudWxsKTtcbiAgfVxuXG4gIGNoYW5nZVJlZnVuZEFtb3VudCgpIHsgIFxuICAgIHRoaXMuaXNGcm9tQ2hlY2tBbnNQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2lzc3VlcmVmdW5kJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgfVxuXG4gIGdldEZvcm1hdHRlZEN1cnJlbmN5KGN1cnJlbmN5Om51bWJlcil7XG4gICAgaWYoY3VycmVuY3kudG9TdHJpbmcoKS5pbmNsdWRlcyhcIi5cIikpe1xuICAgICAgcmV0dXJuIGN1cnJlbmN5XG4gICAgfVxuICAgICByZXR1cm4gY3VycmVuY3kudG9TdHJpbmcoKS5jb25jYXQoXCIuMDBcIik7XG4gIH1cbiAgXG59Il19
|