@hmcts/ccpay-web-component 4.0.0-beta60 → 4.0.0-beta604
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 +6868 -2571
- 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 +32 -26
- package/esm2015/lib/components/add-remission/add-remission.component.js +874 -138
- package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +342 -217
- package/esm2015/lib/components/card-details/card-details.component.js +22 -57
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +932 -350
- package/esm2015/lib/components/error-banner/error-banner.component.js +5 -17
- package/esm2015/lib/components/fee-summary/fee-summary.component.js +229 -231
- package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +137 -156
- package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +178 -177
- package/esm2015/lib/components/page-not-found.component.js +3 -4
- package/esm2015/lib/components/payment-list/payment-list.component.js +22 -80
- package/esm2015/lib/components/payment-view/payment-view.component.js +358 -127
- package/esm2015/lib/components/pba-details/pba-details.component.js +5 -39
- package/esm2015/lib/components/process-refund/process-refund.component.js +392 -0
- package/esm2015/lib/components/processed-payments/processed-payments.component.js +13 -41
- package/esm2015/lib/components/refund-list/refund-list.component.js +131 -0
- package/esm2015/lib/components/refund-status/refund-status.component.js +511 -0
- package/esm2015/lib/components/reports/reports.component.js +96 -107
- package/esm2015/lib/components/status-history/status-history.component.js +28 -35
- package/esm2015/lib/components/table/table.component.js +179 -0
- package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +168 -91
- package/esm2015/lib/interfaces/AddRemissionRequest.js +6 -7
- package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +21 -0
- package/esm2015/lib/interfaces/AllocatePaymentRequest.js +11 -9
- package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +2 -3
- package/esm2015/lib/interfaces/IBSPayments.js +38 -35
- package/esm2015/lib/interfaces/ICardDetails.js +14 -13
- package/esm2015/lib/interfaces/IFee.js +44 -43
- package/esm2015/lib/interfaces/IOrderReferenceFee.js +25 -0
- package/esm2015/lib/interfaces/IPatchRefundAction.js +15 -0
- package/esm2015/lib/interfaces/IPayment.js +56 -55
- package/esm2015/lib/interfaces/IPaymentGroup.js +12 -11
- package/esm2015/lib/interfaces/IPaymentStatus.js +2 -3
- package/esm2015/lib/interfaces/IPaymentView.js +17 -0
- package/esm2015/lib/interfaces/IPayments.js +6 -5
- package/esm2015/lib/interfaces/IRefundAction.js +15 -0
- package/esm2015/lib/interfaces/IRefundList.js +29 -0
- package/esm2015/lib/interfaces/IRefundReasons.js +19 -0
- package/esm2015/lib/interfaces/IRefundRejectReason.js +15 -0
- package/esm2015/lib/interfaces/IRefundStatus.js +23 -0
- package/esm2015/lib/interfaces/IRefundStatusHistory.js +15 -0
- package/esm2015/lib/interfaces/IRemission.js +18 -17
- package/esm2015/lib/interfaces/IResubmitRefundRequest.js +21 -0
- package/esm2015/lib/interfaces/IStatusHistories.js +12 -11
- package/esm2015/lib/interfaces/IStatusHistory.js +14 -13
- package/esm2015/lib/interfaces/IssueRefundRequest.js +25 -0
- package/esm2015/lib/interfaces/PayhubAntennaRequest.js +28 -0
- package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +7 -12
- package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +17 -0
- package/esm2015/lib/interfaces/PostRefundRetroRemission.js +21 -0
- package/esm2015/lib/interfaces/RefundsRequest.js +21 -0
- package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +2 -3
- package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +2 -3
- package/esm2015/lib/payment-lib.component.js +124 -20
- package/esm2015/lib/payment-lib.module.js +27 -6
- package/esm2015/lib/payment-lib.service.js +18 -4
- package/esm2015/lib/pipes/capitalize.pipe.js +24 -0
- package/esm2015/lib/pipes/ccd-hyphens.pipe.js +3 -4
- package/esm2015/lib/pipes/key-value.pipe.js +3 -4
- package/esm2015/lib/pipes/sanitize-html.pipe.js +7 -5
- package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +52 -14
- package/esm2015/lib/services/card-details/card-details.service.js +19 -8
- package/esm2015/lib/services/case-transactions/case-transactions.service.js +19 -8
- package/esm2015/lib/services/orderslist.service.js +211 -0
- package/esm2015/lib/services/payment-list/payment-list.service.js +19 -8
- package/esm2015/lib/services/payment-view/payment-view.service.js +96 -11
- package/esm2015/lib/services/refunds/refunds.service.js +203 -0
- package/esm2015/lib/services/shared/error-handler.service.js +24 -4
- package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +27 -9
- package/esm2015/lib/services/shared/logger/console-logger.service.js +7 -5
- package/esm2015/lib/services/shared/logger/logger.service.js +7 -5
- package/esm2015/lib/services/status-history/status-history.service.js +19 -8
- package/esm2015/lib/services/xl-file/xl-file.service.js +56 -51
- package/esm2015/public_api.js +1 -2
- package/esm5/hmcts-ccpay-web-component.js +32 -26
- package/esm5/lib/components/add-remission/add-remission.component.js +941 -47
- package/esm5/lib/components/allocate-payments/allocate-payments.component.js +358 -74
- package/esm5/lib/components/card-details/card-details.component.js +22 -9
- package/esm5/lib/components/case-transactions/case-transactions.component.js +1003 -110
- package/esm5/lib/components/error-banner/error-banner.component.js +3 -4
- package/esm5/lib/components/fee-summary/fee-summary.component.js +232 -56
- package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +136 -45
- package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +179 -65
- package/esm5/lib/components/page-not-found.component.js +3 -4
- package/esm5/lib/components/payment-list/payment-list.component.js +21 -8
- package/esm5/lib/components/payment-view/payment-view.component.js +425 -20
- package/esm5/lib/components/pba-details/pba-details.component.js +5 -6
- package/esm5/lib/components/process-refund/process-refund.component.js +469 -0
- package/esm5/lib/components/processed-payments/processed-payments.component.js +12 -7
- package/esm5/lib/components/refund-list/refund-list.component.js +134 -0
- package/esm5/lib/components/refund-status/refund-status.component.js +570 -0
- package/esm5/lib/components/reports/reports.component.js +97 -26
- package/esm5/lib/components/status-history/status-history.component.js +27 -9
- package/esm5/lib/components/table/table.component.js +214 -0
- package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +178 -27
- package/esm5/lib/interfaces/AddRemissionRequest.js +5 -6
- package/esm5/lib/interfaces/AddRetroRemissionRequest.js +19 -0
- package/esm5/lib/interfaces/AllocatePaymentRequest.js +9 -8
- package/esm5/lib/interfaces/IAllocationPaymentsRequest.js +2 -3
- package/esm5/lib/interfaces/IBSPayments.js +38 -35
- package/esm5/lib/interfaces/ICardDetails.js +14 -13
- package/esm5/lib/interfaces/IFee.js +44 -43
- package/esm5/lib/interfaces/IOrderReferenceFee.js +25 -0
- package/esm5/lib/interfaces/IPatchRefundAction.js +15 -0
- package/esm5/lib/interfaces/IPayment.js +56 -55
- package/esm5/lib/interfaces/IPaymentGroup.js +12 -11
- package/esm5/lib/interfaces/IPaymentStatus.js +2 -3
- package/esm5/lib/interfaces/IPaymentView.js +17 -0
- package/esm5/lib/interfaces/IPayments.js +6 -5
- package/esm5/lib/interfaces/IRefundAction.js +15 -0
- package/esm5/lib/interfaces/IRefundList.js +29 -0
- package/esm5/lib/interfaces/IRefundReasons.js +19 -0
- package/esm5/lib/interfaces/IRefundRejectReason.js +15 -0
- package/esm5/lib/interfaces/IRefundStatus.js +23 -0
- package/esm5/lib/interfaces/IRefundStatusHistory.js +15 -0
- package/esm5/lib/interfaces/IRemission.js +18 -17
- package/esm5/lib/interfaces/IResubmitRefundRequest.js +19 -0
- package/esm5/lib/interfaces/IStatusHistories.js +12 -11
- package/esm5/lib/interfaces/IStatusHistory.js +14 -13
- package/esm5/lib/interfaces/IssueRefundRequest.js +22 -0
- package/esm5/lib/interfaces/PayhubAntennaRequest.js +25 -0
- package/esm5/lib/interfaces/PaymentToPayhubRequest.js +6 -10
- package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +16 -0
- package/esm5/lib/interfaces/PostRefundRetroRemission.js +19 -0
- package/esm5/lib/interfaces/RefundsRequest.js +19 -0
- package/esm5/lib/interfaces/UnidentifiedPaymentsRequest.js +2 -3
- package/esm5/lib/interfaces/UnsolicitedPaymentsRequest.js +2 -3
- package/esm5/lib/payment-lib.component.js +99 -14
- package/esm5/lib/payment-lib.module.js +27 -6
- package/esm5/lib/payment-lib.service.js +25 -4
- package/esm5/lib/pipes/capitalize.pipe.js +32 -0
- package/esm5/lib/pipes/ccd-hyphens.pipe.js +3 -4
- package/esm5/lib/pipes/key-value.pipe.js +3 -4
- package/esm5/lib/pipes/sanitize-html.pipe.js +7 -5
- package/esm5/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +61 -14
- package/esm5/lib/services/card-details/card-details.service.js +19 -8
- package/esm5/lib/services/case-transactions/case-transactions.service.js +19 -8
- package/esm5/lib/services/orderslist.service.js +276 -0
- package/esm5/lib/services/payment-list/payment-list.service.js +19 -8
- package/esm5/lib/services/payment-view/payment-view.service.js +135 -11
- package/esm5/lib/services/refunds/refunds.service.js +243 -0
- package/esm5/lib/services/shared/error-handler.service.js +24 -4
- package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +27 -9
- package/esm5/lib/services/shared/logger/console-logger.service.js +7 -5
- package/esm5/lib/services/shared/logger/logger.service.js +7 -5
- package/esm5/lib/services/status-history/status-history.service.js +19 -8
- package/esm5/lib/services/xl-file/xl-file.service.js +62 -51
- package/esm5/public_api.js +1 -2
- package/fesm2015/hmcts-ccpay-web-component.js +4622 -2024
- package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
- package/fesm5/hmcts-ccpay-web-component.js +7021 -2540
- package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
- package/hmcts-ccpay-web-component.d.ts +30 -23
- package/hmcts-ccpay-web-component.metadata.json +1 -1
- package/lib/components/add-remission/add-remission.component.d.ts +100 -3
- package/lib/components/allocate-payments/allocate-payments.component.d.ts +29 -1
- package/lib/components/case-transactions/case-transactions.component.d.ts +64 -2
- package/lib/components/fee-summary/fee-summary.component.d.ts +10 -1
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +2 -0
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +4 -0
- package/lib/components/payment-view/payment-view.component.d.ts +41 -1
- package/lib/components/process-refund/process-refund.component.d.ts +53 -0
- package/lib/components/refund-list/refund-list.component.d.ts +23 -0
- package/lib/components/refund-status/refund-status.component.d.ts +68 -0
- package/lib/components/reports/reports.component.d.ts +4 -1
- package/lib/components/status-history/status-history.component.d.ts +1 -0
- package/lib/components/table/table.component.d.ts +36 -0
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +24 -4
- package/lib/interfaces/AddRemissionRequest.d.ts +2 -2
- package/lib/interfaces/AddRetroRemissionRequest.d.ts +5 -0
- package/lib/interfaces/AllocatePaymentRequest.d.ts +16 -3
- package/lib/interfaces/IBSPayments.d.ts +1 -0
- package/lib/interfaces/IOrderReferenceFee.d.ts +9 -0
- package/lib/interfaces/IPatchRefundAction.d.ts +4 -0
- package/lib/interfaces/IPaymentView.d.ts +5 -0
- package/lib/interfaces/IRefundAction.d.ts +4 -0
- package/lib/interfaces/IRefundList.d.ts +14 -0
- package/lib/interfaces/IRefundReasons.d.ts +6 -0
- package/lib/interfaces/IRefundRejectReason.d.ts +4 -0
- package/lib/interfaces/IRefundStatus.d.ts +8 -0
- package/lib/interfaces/IRefundStatusHistory.d.ts +5 -0
- package/lib/interfaces/IResubmitRefundRequest.d.ts +5 -0
- package/lib/interfaces/IssueRefundRequest.d.ts +6 -0
- package/lib/interfaces/PayhubAntennaRequest.d.ts +7 -0
- package/lib/interfaces/PaymentToPayhubRequest.d.ts +2 -3
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +4 -0
- package/lib/interfaces/PostRefundRetroRemission.d.ts +5 -0
- package/lib/interfaces/RefundsRequest.d.ts +5 -0
- package/lib/payment-lib.component.d.ts +30 -4
- package/lib/payment-lib.service.d.ts +3 -0
- package/lib/pipes/capitalize.pipe.d.ts +5 -0
- package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +2 -0
- package/lib/services/orderslist.service.d.ts +40 -0
- package/lib/services/payment-view/payment-view.service.d.ts +15 -0
- package/lib/services/refunds/refunds.service.d.ts +30 -0
- package/lib/services/xl-file/xl-file.service.d.ts +6 -6
- package/package.json +5 -1
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
4
|
*/
|
|
5
|
-
import { Component } from '@angular/core';
|
|
5
|
+
import { Component, Input } from '@angular/core';
|
|
6
6
|
import { PaymentLibComponent } from '../../payment-lib.component';
|
|
7
7
|
import { CaseTransactionsService } from '../../services/case-transactions/case-transactions.service';
|
|
8
8
|
import { BulkScaningPaymentService } from '../../services/bulk-scaning-payment/bulk-scaning-payment.service';
|
|
9
9
|
import { PaymentViewService } from '../../services/payment-view/payment-view.service';
|
|
10
|
+
import { OrderslistService } from '../../services/orderslist.service';
|
|
10
11
|
import { Router } from '@angular/router';
|
|
12
|
+
import * as ls from "local-storage";
|
|
13
|
+
/** @type {?} */
|
|
14
|
+
const BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
|
|
11
15
|
export class CaseTransactionsComponent {
|
|
12
16
|
/**
|
|
13
17
|
* @param {?} router
|
|
@@ -15,50 +19,208 @@ export class CaseTransactionsComponent {
|
|
|
15
19
|
* @param {?} bulkScaningPaymentService
|
|
16
20
|
* @param {?} caseTransactionsService
|
|
17
21
|
* @param {?} paymentLibComponent
|
|
22
|
+
* @param {?} OrderslistService
|
|
18
23
|
*/
|
|
19
|
-
constructor(router, paymentViewService, bulkScaningPaymentService, caseTransactionsService, paymentLibComponent) {
|
|
24
|
+
constructor(router, paymentViewService, bulkScaningPaymentService, caseTransactionsService, paymentLibComponent, OrderslistService) {
|
|
20
25
|
this.router = router;
|
|
21
26
|
this.paymentViewService = paymentViewService;
|
|
22
27
|
this.bulkScaningPaymentService = bulkScaningPaymentService;
|
|
23
28
|
this.caseTransactionsService = caseTransactionsService;
|
|
24
29
|
this.paymentLibComponent = paymentLibComponent;
|
|
30
|
+
this.OrderslistService = OrderslistService;
|
|
25
31
|
this.paymentGroups = [];
|
|
26
32
|
this.payments = [];
|
|
27
33
|
this.nonPayments = [];
|
|
28
34
|
this.allPayments = [];
|
|
29
35
|
this.remissions = [];
|
|
30
36
|
this.fees = [];
|
|
37
|
+
this.isRefundRemission = true;
|
|
31
38
|
this.isAddFeeBtnEnabled = true;
|
|
32
39
|
this.isExceptionRecord = false;
|
|
33
40
|
this.isUnprocessedRecordSelected = false;
|
|
34
41
|
this.isAnyFeeGroupAvilable = true;
|
|
42
|
+
this.isHistoricGroupAvailable = false;
|
|
35
43
|
this.viewStatus = 'main';
|
|
36
44
|
this.isRemoveBtnDisabled = false;
|
|
37
45
|
this.clAmountDue = 0;
|
|
46
|
+
this.isFeeRecordsExist = false;
|
|
47
|
+
this.isGrpOutstandingAmtPositive = false;
|
|
48
|
+
this.lsCcdNumber = ls.get('ccdNumber');
|
|
49
|
+
//Order changes
|
|
50
|
+
this.orderDetail = [];
|
|
51
|
+
this.isAddRemissionEnable = false;
|
|
52
|
+
this.orderRemissionDetails = [];
|
|
53
|
+
this.orderLevelFees = [];
|
|
54
|
+
this.cpoDetails = null;
|
|
55
|
+
this.orderFeesTotal = 0.00;
|
|
56
|
+
this.orderRemissionTotal = 0.00;
|
|
57
|
+
this.orderTotalPayments = 0.00;
|
|
58
|
+
this.orderPendingPayments = 0.00;
|
|
59
|
+
this.isPBA = false;
|
|
60
|
+
this.isIssueRefunfBtnEnable = false;
|
|
61
|
+
this.isAddRemissionBtnEnabled = false;
|
|
62
|
+
this.isRefundRemissionBtnEnable = false;
|
|
63
|
+
this.allowedRolesToAccessRefund = ['payments-refund-approver', 'payments-refund'];
|
|
64
|
+
this.check4AllowedRoles2AccessRefund = (/**
|
|
65
|
+
* @return {?}
|
|
66
|
+
*/
|
|
67
|
+
() => {
|
|
68
|
+
return this.allowedRolesToAccessRefund.some((/**
|
|
69
|
+
* @param {?} role
|
|
70
|
+
* @return {?}
|
|
71
|
+
*/
|
|
72
|
+
role => this.LOGGEDINUSERROLES.indexOf(role) !== -1));
|
|
73
|
+
});
|
|
74
|
+
this.allowFurtherAccessAfter4Days = (/**
|
|
75
|
+
* @param {?} payment
|
|
76
|
+
* @return {?}
|
|
77
|
+
*/
|
|
78
|
+
(payment) => {
|
|
79
|
+
if (payment !== null && payment !== undefined) {
|
|
80
|
+
/** @type {?} */
|
|
81
|
+
let tmp4DayAgo = new Date();
|
|
82
|
+
tmp4DayAgo.setDate(tmp4DayAgo.getDate() - 4);
|
|
83
|
+
return tmp4DayAgo >= new Date(payment.date_created);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
38
86
|
}
|
|
39
87
|
/**
|
|
40
88
|
* @return {?}
|
|
41
89
|
*/
|
|
42
90
|
ngOnInit() {
|
|
91
|
+
this.navigationpage = '';
|
|
92
|
+
if (this.OrderslistService.getpaymentPageView() !== null) {
|
|
93
|
+
this.OrderslistService.getpaymentPageView().subscribe((/**
|
|
94
|
+
* @param {?} data
|
|
95
|
+
* @return {?}
|
|
96
|
+
*/
|
|
97
|
+
(data) => this.paymentView = data));
|
|
98
|
+
}
|
|
99
|
+
if (this.OrderslistService.getnavigationPageValue() !== null) {
|
|
100
|
+
this.OrderslistService.getnavigationPageValue().subscribe((/**
|
|
101
|
+
* @param {?} data
|
|
102
|
+
* @return {?}
|
|
103
|
+
*/
|
|
104
|
+
(data) => this.navigationpage = data));
|
|
105
|
+
}
|
|
106
|
+
if (this.paymentView !== undefined && this.paymentView !== null && this.paymentView.payment_group_reference !== undefined && this.navigationpage === 'paymentdetailspage') {
|
|
107
|
+
this.goToPayementView(this.paymentView.payment_group_reference, this.paymentView.reference, this.paymentView.method);
|
|
108
|
+
}
|
|
109
|
+
this.isGrpOutstandingAmtPositive = false;
|
|
43
110
|
this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
|
|
111
|
+
this.caseType = this.paymentLibComponent.CASETYPE;
|
|
44
112
|
if (this.paymentLibComponent.CCD_CASE_NUMBER === '') {
|
|
45
113
|
this.ccdCaseNumber = this.paymentLibComponent.EXC_REFERENCE;
|
|
46
114
|
}
|
|
47
115
|
this.excReference = this.paymentLibComponent.EXC_REFERENCE;
|
|
48
116
|
this.takePayment = this.paymentLibComponent.TAKEPAYMENT;
|
|
117
|
+
this.servicerequest = this.paymentLibComponent.SERVICEREQUEST;
|
|
118
|
+
if (this.paymentLibComponent.SERVICEREQUEST === 'true') {
|
|
119
|
+
this.serviveRequestValue = 'true';
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.serviveRequestValue = 'false';
|
|
123
|
+
}
|
|
49
124
|
this.isBulkScanEnable = this.paymentLibComponent.ISBSENABLE;
|
|
50
|
-
this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe(paymentGroups => {
|
|
51
|
-
this.paymentGroups = paymentGroups['payment_groups'];
|
|
52
|
-
this.calculateAmounts();
|
|
53
|
-
this.calculateRefundAmount();
|
|
54
|
-
}, (error) => {
|
|
55
|
-
this.errorMessage = /** @type {?} */ (error);
|
|
56
|
-
this.isAnyFeeGroupAvilable = false;
|
|
57
|
-
this.setDefaults();
|
|
58
|
-
});
|
|
59
125
|
this.dcnNumber = this.paymentLibComponent.DCN_NUMBER;
|
|
60
126
|
this.selectedOption = this.paymentLibComponent.SELECTED_OPTION.toLocaleLowerCase();
|
|
61
|
-
this.
|
|
127
|
+
this.isTurnOff = this.paymentLibComponent.ISTURNOFF;
|
|
128
|
+
this.isNewPcipalOff = this.paymentLibComponent.ISNEWPCIPALOFF;
|
|
129
|
+
this.isOldPcipalOff = this.paymentLibComponent.ISOLDPCIPALOFF;
|
|
130
|
+
this.isStrategicFixEnable = this.paymentLibComponent.ISSFENABLE;
|
|
131
|
+
if (!this.isTurnOff) {
|
|
132
|
+
if (this.lsCcdNumber !== this.ccdCaseNumber) {
|
|
133
|
+
this.router.navigateByUrl(`/ccd-search?takePayment=true`);
|
|
134
|
+
}
|
|
135
|
+
this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe((/**
|
|
136
|
+
* @param {?} paymentGroups
|
|
137
|
+
* @return {?}
|
|
138
|
+
*/
|
|
139
|
+
paymentGroups => {
|
|
140
|
+
this.isAnyFeeGroupAvilable = true;
|
|
141
|
+
this.paymentGroups = paymentGroups['payment_groups'];
|
|
142
|
+
this.calculateAmounts();
|
|
143
|
+
this.calculateOrderFeesAmounts();
|
|
144
|
+
this.calculateRefundAmount();
|
|
145
|
+
if (this.isFromServiceRequestPage) {
|
|
146
|
+
this.OrderslistService.getSelectedOrderRefId().subscribe((/**
|
|
147
|
+
* @param {?} data
|
|
148
|
+
* @return {?}
|
|
149
|
+
*/
|
|
150
|
+
(data) => this.orderRef = data));
|
|
151
|
+
this.goToOrderViewDetailSection(this.orderRef);
|
|
152
|
+
// this.viewStatus = 'order-full-view';
|
|
153
|
+
}
|
|
154
|
+
this.paymentViewService.getPartyDetails(this.ccdCaseNumber).subscribe((/**
|
|
155
|
+
* @param {?} response
|
|
156
|
+
* @return {?}
|
|
157
|
+
*/
|
|
158
|
+
response => {
|
|
159
|
+
this.cpoDetails = JSON.parse(response).data.content[0];
|
|
160
|
+
}), (/**
|
|
161
|
+
* @param {?} error
|
|
162
|
+
* @return {?}
|
|
163
|
+
*/
|
|
164
|
+
(error) => {
|
|
165
|
+
this.errorMessage = (/** @type {?} */ (error.replace(/"/g, "")));
|
|
166
|
+
this.isCPODown = true;
|
|
167
|
+
}));
|
|
168
|
+
}), (/**
|
|
169
|
+
* @param {?} error
|
|
170
|
+
* @return {?}
|
|
171
|
+
*/
|
|
172
|
+
(error) => {
|
|
173
|
+
this.errorMessage = (/** @type {?} */ (error.replace(/"/g, "")));
|
|
174
|
+
this.isAnyFeeGroupAvilable = false;
|
|
175
|
+
this.setDefaults();
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe((/**
|
|
180
|
+
* @param {?} paymentGroups
|
|
181
|
+
* @return {?}
|
|
182
|
+
*/
|
|
183
|
+
paymentGroups => {
|
|
184
|
+
this.isAnyFeeGroupAvilable = true;
|
|
185
|
+
this.paymentGroups = paymentGroups['payment_groups'];
|
|
186
|
+
this.calculateAmounts();
|
|
187
|
+
this.calculateOrderFeesAmounts();
|
|
188
|
+
this.totalRefundAmount = this.calculateRefundAmount();
|
|
189
|
+
this.paymentViewService.getPartyDetails(this.ccdCaseNumber).subscribe((/**
|
|
190
|
+
* @param {?} response
|
|
191
|
+
* @return {?}
|
|
192
|
+
*/
|
|
193
|
+
response => {
|
|
194
|
+
this.cpoDetails = JSON.parse(response).data.content[0];
|
|
195
|
+
}), (/**
|
|
196
|
+
* @param {?} error
|
|
197
|
+
* @return {?}
|
|
198
|
+
*/
|
|
199
|
+
(error) => {
|
|
200
|
+
this.errorMessage = (/** @type {?} */ (error.replace(/"/g, "")));
|
|
201
|
+
this.setDefaults();
|
|
202
|
+
this.isCPODown = true;
|
|
203
|
+
}));
|
|
204
|
+
}), (/**
|
|
205
|
+
* @param {?} error
|
|
206
|
+
* @return {?}
|
|
207
|
+
*/
|
|
208
|
+
(error) => {
|
|
209
|
+
this.errorMessage = (/** @type {?} */ (error.replace(/"/g, "")));
|
|
210
|
+
this.isAnyFeeGroupAvilable = false;
|
|
211
|
+
this.setDefaults();
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
if (this.paymentGroups !== undefined) {
|
|
215
|
+
this.checkForExceptionRecord();
|
|
216
|
+
}
|
|
217
|
+
if (this.OrderslistService.getisFromServiceRequestPages() !== null) {
|
|
218
|
+
this.OrderslistService.getisFromServiceRequestPages().subscribe((/**
|
|
219
|
+
* @param {?} data
|
|
220
|
+
* @return {?}
|
|
221
|
+
*/
|
|
222
|
+
(data) => this.isFromServiceRequestPage = data));
|
|
223
|
+
}
|
|
62
224
|
}
|
|
63
225
|
/**
|
|
64
226
|
* @return {?}
|
|
@@ -67,6 +229,7 @@ export class CaseTransactionsComponent {
|
|
|
67
229
|
this.totalPayments = 0.00;
|
|
68
230
|
this.totalRemissions = 0.00;
|
|
69
231
|
this.totalNonOffPayments = 0.00;
|
|
232
|
+
this.totalFees = 0.00;
|
|
70
233
|
}
|
|
71
234
|
/**
|
|
72
235
|
* @param {?} payments
|
|
@@ -84,8 +247,12 @@ export class CaseTransactionsComponent {
|
|
|
84
247
|
* @return {?}
|
|
85
248
|
*/
|
|
86
249
|
checkForExceptionRecord() {
|
|
87
|
-
if (this.paymentGroups.length === 0 && this.selectedOption.toLocaleLowerCase() === 'ccdorexception') {
|
|
88
|
-
this.bulkScaningPaymentService.getBSPaymentsByCCD(this.ccdCaseNumber).subscribe(
|
|
250
|
+
if (this.paymentGroups.length === 0 && (this.selectedOption.toLocaleLowerCase() === 'ccdorexception' || this.selectedOption.toLocaleLowerCase() === 'rc')) {
|
|
251
|
+
this.bulkScaningPaymentService.getBSPaymentsByCCD(this.ccdCaseNumber).subscribe((/**
|
|
252
|
+
* @param {?} recordData
|
|
253
|
+
* @return {?}
|
|
254
|
+
*/
|
|
255
|
+
recordData => {
|
|
89
256
|
if (recordData['data'] && recordData['data'].exception_record_reference && recordData['data'].exception_record_reference.length > 0 && recordData['data'].ccd_reference > 0) {
|
|
90
257
|
this.isExceptionRecord = false;
|
|
91
258
|
this.isAddFeeBtnEnabled = true;
|
|
@@ -98,7 +265,7 @@ export class CaseTransactionsComponent {
|
|
|
98
265
|
this.isExceptionRecord = false;
|
|
99
266
|
this.isAddFeeBtnEnabled = true;
|
|
100
267
|
}
|
|
101
|
-
});
|
|
268
|
+
}));
|
|
102
269
|
}
|
|
103
270
|
if (this.paymentGroups.length === 0 && this.selectedOption.toLocaleLowerCase() === 'dcn') {
|
|
104
271
|
if (this.paymentLibComponent.CCD_CASE_NUMBER.length > 0 && this.paymentLibComponent.EXC_REFERENCE.length > 0) {
|
|
@@ -115,11 +282,18 @@ export class CaseTransactionsComponent {
|
|
|
115
282
|
}
|
|
116
283
|
}
|
|
117
284
|
if (this.paymentGroups.length > 0)
|
|
118
|
-
this.paymentGroups.forEach(
|
|
285
|
+
this.paymentGroups.forEach((/**
|
|
286
|
+
* @param {?} paymentGroup
|
|
287
|
+
* @return {?}
|
|
288
|
+
*/
|
|
289
|
+
paymentGroup => {
|
|
119
290
|
if (paymentGroup.payments) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
291
|
+
paymentGroup.payments.forEach((/**
|
|
292
|
+
* @param {?} payment
|
|
293
|
+
* @return {?}
|
|
294
|
+
*/
|
|
295
|
+
payment => {
|
|
296
|
+
if (payment.case_reference !== undefined && payment.ccd_case_number === undefined) {
|
|
123
297
|
this.isExceptionRecord = true;
|
|
124
298
|
this.isAddFeeBtnEnabled = false;
|
|
125
299
|
}
|
|
@@ -127,111 +301,448 @@ export class CaseTransactionsComponent {
|
|
|
127
301
|
this.isExceptionRecord = false;
|
|
128
302
|
this.isAddFeeBtnEnabled = true;
|
|
129
303
|
}
|
|
130
|
-
});
|
|
304
|
+
}));
|
|
305
|
+
}
|
|
306
|
+
}));
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* @return {?}
|
|
310
|
+
*/
|
|
311
|
+
calculateOrderFeesAmounts() {
|
|
312
|
+
/** @type {?} */
|
|
313
|
+
let feesTotal = 0.00;
|
|
314
|
+
this.paymentGroups.forEach((/**
|
|
315
|
+
* @param {?} paymentGroup
|
|
316
|
+
* @return {?}
|
|
317
|
+
*/
|
|
318
|
+
paymentGroup => {
|
|
319
|
+
this.resetOrderVariables();
|
|
320
|
+
if (paymentGroup.fees) {
|
|
321
|
+
paymentGroup.fees.forEach((/**
|
|
322
|
+
* @param {?} fee
|
|
323
|
+
* @return {?}
|
|
324
|
+
*/
|
|
325
|
+
fee => {
|
|
326
|
+
this.orderFeesTotal = this.orderFeesTotal + fee.calculated_amount;
|
|
327
|
+
}));
|
|
328
|
+
}
|
|
329
|
+
if (paymentGroup.remissions) {
|
|
330
|
+
paymentGroup.remissions.forEach((/**
|
|
331
|
+
* @param {?} remission
|
|
332
|
+
* @return {?}
|
|
333
|
+
*/
|
|
334
|
+
remission => {
|
|
335
|
+
this.orderRemissionTotal = this.orderRemissionTotal + remission.hwf_amount;
|
|
336
|
+
}));
|
|
337
|
+
}
|
|
338
|
+
if (paymentGroup.payments) {
|
|
339
|
+
paymentGroup.payments.forEach((/**
|
|
340
|
+
* @param {?} payment
|
|
341
|
+
* @return {?}
|
|
342
|
+
*/
|
|
343
|
+
payment => {
|
|
344
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
345
|
+
this.orderTotalPayments = this.orderTotalPayments + payment.amount;
|
|
346
|
+
}
|
|
347
|
+
}));
|
|
348
|
+
}
|
|
349
|
+
this.orderPendingPayments = (this.orderFeesTotal - this.orderRemissionTotal) - this.orderTotalPayments;
|
|
350
|
+
if (this.orderPendingPayments <= 0.00) {
|
|
351
|
+
this.orderStatus = 'Paid';
|
|
352
|
+
this.orderAddBtnEnable = false;
|
|
353
|
+
}
|
|
354
|
+
else if (this.orderFeesTotal > 0 && (this.orderTotalPayments > 0 || this.orderRemissionTotal > 0) && (this.orderTotalPayments < this.orderPendingPayments)) {
|
|
355
|
+
this.orderStatus = 'Partially paid';
|
|
356
|
+
this.orderAddBtnEnable = true;
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
this.orderStatus = 'Not paid';
|
|
360
|
+
this.orderAddBtnEnable = true;
|
|
361
|
+
}
|
|
362
|
+
//this.orderLevelFees.push({orderRefId:paymentGroup['payment_group_reference'],orderTotalFees: this.orderFeesTotal,orderStatus: this.orderStatus,orderParty:'Santosh', orderCCDEvent:'Case Creation',orderCreated: new Date(), orderAddBtnEnable: this.orderAddBtnEnable}); this.cpoDetails['createdTimestamp']
|
|
363
|
+
if (this.cpoDetails !== null) {
|
|
364
|
+
this.orderLevelFees.push({ orderRefId: paymentGroup['payment_group_reference'], orderTotalFees: this.orderFeesTotal, orderStatus: this.orderStatus, orderParty: this.cpoDetails['responsibleParty'], orderCCDEvent: this.cpoDetails['action'], orderCreated: paymentGroup['date_created'], orderAddBtnEnable: this.orderAddBtnEnable });
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
this.orderLevelFees.push({ orderRefId: paymentGroup['payment_group_reference'], orderTotalFees: this.orderFeesTotal, orderStatus: this.orderStatus, orderParty: '', orderCCDEvent: '', orderCreated: paymentGroup['date_created'], orderAddBtnEnable: this.orderAddBtnEnable });
|
|
368
|
+
}
|
|
369
|
+
if (this.orderStatus !== 'Paid') {
|
|
370
|
+
this.OrderslistService.setOrdersList(this.orderLevelFees);
|
|
371
|
+
}
|
|
372
|
+
}));
|
|
373
|
+
}
|
|
374
|
+
;
|
|
375
|
+
/**
|
|
376
|
+
* @return {?}
|
|
377
|
+
*/
|
|
378
|
+
resetOrderVariables() {
|
|
379
|
+
this.orderFeesTotal = 0.00;
|
|
380
|
+
this.orderTotalPayments = 0.00;
|
|
381
|
+
this.orderRemissionTotal = 0.00;
|
|
382
|
+
this.orderPendingPayments = 0.00;
|
|
383
|
+
this.isAddFeeBtnEnabled = true;
|
|
384
|
+
}
|
|
385
|
+
;
|
|
386
|
+
/**
|
|
387
|
+
* @param {?} orderReferenceObj
|
|
388
|
+
* @return {?}
|
|
389
|
+
*/
|
|
390
|
+
goToOrderViewDetailSection(orderReferenceObj) {
|
|
391
|
+
if (this.isFromServiceRequestPage) {
|
|
392
|
+
this.OrderslistService.setOrderRefId(orderReferenceObj);
|
|
393
|
+
this.orderRef = orderReferenceObj;
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
this.OrderslistService.setOrderRefId(orderReferenceObj.orderRefId);
|
|
397
|
+
this.orderRef = orderReferenceObj.orderRefId;
|
|
398
|
+
}
|
|
399
|
+
this.orderFeesTotal = 0.00;
|
|
400
|
+
this.orderRemissionTotal = 0.00;
|
|
401
|
+
this.orderTotalPayments = 0.00;
|
|
402
|
+
this.orderPendingPayments = 0.00;
|
|
403
|
+
this.orderDetail = this.paymentGroups.filter((/**
|
|
404
|
+
* @param {?} x
|
|
405
|
+
* @return {?}
|
|
406
|
+
*/
|
|
407
|
+
x => x.payment_group_reference === this.orderRef));
|
|
408
|
+
this.orderDetail.forEach((/**
|
|
409
|
+
* @param {?} orderDetail
|
|
410
|
+
* @return {?}
|
|
411
|
+
*/
|
|
412
|
+
orderDetail => {
|
|
413
|
+
if (orderDetail.fees) {
|
|
414
|
+
orderDetail.fees.forEach((/**
|
|
415
|
+
* @param {?} fee
|
|
416
|
+
* @return {?}
|
|
417
|
+
*/
|
|
418
|
+
fee => {
|
|
419
|
+
this.orderFeesTotal = this.orderFeesTotal + fee.calculated_amount;
|
|
420
|
+
}));
|
|
421
|
+
}
|
|
422
|
+
if (orderDetail.remissions) {
|
|
423
|
+
orderDetail.remissions.forEach((/**
|
|
424
|
+
* @param {?} remission
|
|
425
|
+
* @return {?}
|
|
426
|
+
*/
|
|
427
|
+
remission => {
|
|
428
|
+
this.orderRemissionTotal = this.orderRemissionTotal + remission.hwf_amount;
|
|
429
|
+
}));
|
|
430
|
+
if (orderDetail.payments) {
|
|
431
|
+
this.payment = orderDetail.payments[0];
|
|
432
|
+
orderDetail.payments.forEach((/**
|
|
433
|
+
* @param {?} payment
|
|
434
|
+
* @return {?}
|
|
435
|
+
*/
|
|
436
|
+
payment => {
|
|
437
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
438
|
+
this.orderTotalPayments = this.orderTotalPayments + payment.amount;
|
|
439
|
+
}
|
|
440
|
+
}));
|
|
131
441
|
}
|
|
132
|
-
}
|
|
442
|
+
}
|
|
443
|
+
}));
|
|
444
|
+
this.orderPendingPayments = (this.orderFeesTotal - this.orderRemissionTotal) - this.orderTotalPayments;
|
|
445
|
+
// this.orderRef = orderReferenceObj.orderRefId;
|
|
446
|
+
if (this.orderPendingPayments <= 0.00) {
|
|
447
|
+
this.orderStatus = 'Paid';
|
|
448
|
+
}
|
|
449
|
+
else if (this.orderFeesTotal > 0 && (this.orderTotalPayments > 0 || this.orderRemissionTotal > 0) && (this.orderTotalPayments < this.orderPendingPayments)) {
|
|
450
|
+
this.orderStatus = 'Partially paid';
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
this.orderStatus = 'Not paid';
|
|
454
|
+
}
|
|
455
|
+
if (this.cpoDetails !== null) {
|
|
456
|
+
this.orderParty = this.cpoDetails['responsibleParty'];
|
|
457
|
+
this.orderCreated = this.cpoDetails['createdTimestamp'];
|
|
458
|
+
this.orderCCDEvent = this.cpoDetails['action'];
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
this.orderParty = '';
|
|
462
|
+
this.orderCCDEvent = '';
|
|
463
|
+
this.orderCreated = orderReferenceObj.orderCreated;
|
|
464
|
+
}
|
|
465
|
+
this.viewStatus = 'order-full-view';
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* @param {?} event
|
|
469
|
+
* @param {?} orderef
|
|
470
|
+
* @return {?}
|
|
471
|
+
*/
|
|
472
|
+
redirectToOrderFeeSearchPage(event, orderef) {
|
|
473
|
+
if (orderef.orderAddBtnEnable) {
|
|
474
|
+
event.preventDefault();
|
|
475
|
+
this.paymentLibComponent.bspaymentdcn = null;
|
|
476
|
+
this.paymentLibComponent.paymentGroupReference = orderef.orderRefId;
|
|
477
|
+
this.paymentLibComponent.isTurnOff = this.isTurnOff;
|
|
478
|
+
this.paymentLibComponent.viewName = 'fee-summary';
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* @param {?} event
|
|
483
|
+
* @return {?}
|
|
484
|
+
*/
|
|
485
|
+
goToCaseTransationPage(event) {
|
|
486
|
+
event.preventDefault();
|
|
487
|
+
this.isFromServiceRequestPage = false;
|
|
488
|
+
this.viewStatus = 'main';
|
|
489
|
+
this.paymentLibComponent.viewName = 'case-transactions';
|
|
133
490
|
}
|
|
134
491
|
/**
|
|
135
492
|
* @return {?}
|
|
136
493
|
*/
|
|
137
494
|
calculateAmounts() {
|
|
495
|
+
/** @type {?} */
|
|
496
|
+
let feesTotal = 0.00;
|
|
138
497
|
/** @type {?} */
|
|
139
498
|
let paymentsTotal = 0.00;
|
|
140
499
|
/** @type {?} */
|
|
141
500
|
let remissionsTotal = 0.00;
|
|
142
501
|
/** @type {?} */
|
|
143
502
|
let nonOffLinePayment = 0.00;
|
|
144
|
-
this.paymentGroups.forEach(
|
|
503
|
+
this.paymentGroups.forEach((/**
|
|
504
|
+
* @param {?} paymentGroup
|
|
505
|
+
* @return {?}
|
|
506
|
+
*/
|
|
507
|
+
paymentGroup => {
|
|
145
508
|
if (paymentGroup.fees) {
|
|
146
|
-
paymentGroup.fees.forEach(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
509
|
+
paymentGroup.fees.forEach((/**
|
|
510
|
+
* @param {?} fee
|
|
511
|
+
* @return {?}
|
|
512
|
+
*/
|
|
513
|
+
fee => {
|
|
514
|
+
// new feature Apportionment toggle changes
|
|
515
|
+
if (!this.isTurnOff) {
|
|
516
|
+
if (fee.date_created) {
|
|
517
|
+
/** @type {?} */
|
|
518
|
+
let a = fee.amount_due === undefined;
|
|
519
|
+
/** @type {?} */
|
|
520
|
+
let b = fee.amount_due <= 0;
|
|
521
|
+
this.clAmountDue = a ? this.clAmountDue + fee.net_amount : b ? this.clAmountDue + 0 : this.clAmountDue + fee.amount_due;
|
|
522
|
+
}
|
|
523
|
+
fee['payment_group_reference'] = paymentGroup['payment_group_reference'];
|
|
524
|
+
this.fees.push(fee);
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
feesTotal = feesTotal + fee.calculated_amount;
|
|
528
|
+
this.fees.push(fee);
|
|
153
529
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
530
|
+
}));
|
|
531
|
+
}
|
|
532
|
+
if (this.isTurnOff) {
|
|
533
|
+
this.totalFees = feesTotal;
|
|
157
534
|
}
|
|
158
535
|
if (paymentGroup.payments) {
|
|
159
|
-
paymentGroup.payments.forEach(
|
|
160
|
-
|
|
161
|
-
|
|
536
|
+
paymentGroup.payments.forEach((/**
|
|
537
|
+
* @param {?} payment
|
|
538
|
+
* @return {?}
|
|
539
|
+
*/
|
|
540
|
+
payment => {
|
|
541
|
+
// new feature Apportionment toggle changes
|
|
542
|
+
if (!this.isTurnOff) {
|
|
162
543
|
/** @type {?} */
|
|
163
544
|
let allocationLen = payment.payment_allocation;
|
|
164
|
-
if (
|
|
165
|
-
|
|
545
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
546
|
+
paymentsTotal = paymentsTotal + payment.amount;
|
|
547
|
+
if (allocationLen.length === 0 || allocationLen.length > 0 && allocationLen[0].allocation_status === 'Allocated') {
|
|
548
|
+
nonOffLinePayment = nonOffLinePayment + payment.amount;
|
|
549
|
+
}
|
|
550
|
+
if (allocationLen.length > 0) {
|
|
551
|
+
this.nonPayments.push(payment);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
if (allocationLen.length === 0) {
|
|
555
|
+
this.payments.push(payment);
|
|
556
|
+
}
|
|
557
|
+
payment.paymentGroupReference = paymentGroup.payment_group_reference;
|
|
558
|
+
this.allPayments.push(payment);
|
|
559
|
+
}
|
|
560
|
+
else {
|
|
561
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
562
|
+
paymentsTotal = paymentsTotal + payment.amount;
|
|
563
|
+
this.payments.push(payment);
|
|
166
564
|
}
|
|
167
|
-
|
|
565
|
+
payment.paymentGroupReference = paymentGroup.payment_group_reference;
|
|
566
|
+
this.allPayments.push(payment);
|
|
168
567
|
}
|
|
169
|
-
|
|
170
|
-
this.allPayments.push(payment);
|
|
171
|
-
});
|
|
568
|
+
}));
|
|
172
569
|
}
|
|
173
570
|
this.totalPayments = paymentsTotal;
|
|
174
|
-
|
|
571
|
+
// new feature Apportionment toggle changes
|
|
572
|
+
if (!this.isTurnOff) {
|
|
573
|
+
this.totalNonOffPayments = nonOffLinePayment;
|
|
574
|
+
}
|
|
175
575
|
if (paymentGroup.remissions) {
|
|
176
|
-
paymentGroup.remissions.forEach(
|
|
576
|
+
paymentGroup.remissions.forEach((/**
|
|
577
|
+
* @param {?} remisison
|
|
578
|
+
* @return {?}
|
|
579
|
+
*/
|
|
580
|
+
remisison => {
|
|
177
581
|
remissionsTotal = remissionsTotal + remisison.hwf_amount;
|
|
178
582
|
this.remissions.push(remisison);
|
|
179
|
-
});
|
|
583
|
+
}));
|
|
180
584
|
}
|
|
181
585
|
this.totalRemissions = remissionsTotal;
|
|
182
|
-
});
|
|
586
|
+
}));
|
|
183
587
|
}
|
|
184
588
|
/**
|
|
185
589
|
* @return {?}
|
|
186
590
|
*/
|
|
187
591
|
calculateRefundAmount() {
|
|
188
|
-
|
|
189
|
-
let isNewPaymentGroup = false;
|
|
190
|
-
/** @type {?} */
|
|
191
|
-
let isOldPaymentGroup = false;
|
|
192
|
-
this.paymentGroups.forEach(paymentGroup => {
|
|
193
|
-
/** @type {?} */
|
|
194
|
-
let grpOutstandingAmount = 0.00;
|
|
592
|
+
if (!this.isTurnOff) {
|
|
195
593
|
/** @type {?} */
|
|
196
|
-
let
|
|
594
|
+
let isNewPaymentGroup = false;
|
|
595
|
+
this.paymentGroups.forEach((/**
|
|
596
|
+
* @param {?} paymentGroup
|
|
597
|
+
* @param {?} index
|
|
598
|
+
* @return {?}
|
|
599
|
+
*/
|
|
600
|
+
(paymentGroup, index) => {
|
|
601
|
+
/** @type {?} */
|
|
602
|
+
let grpOutstandingAmount = 0.00;
|
|
603
|
+
/** @type {?} */
|
|
604
|
+
let feesTotal = 0.00;
|
|
605
|
+
/** @type {?} */
|
|
606
|
+
let paymentsTotal = 0.00;
|
|
607
|
+
/** @type {?} */
|
|
608
|
+
let remissionsTotal = 0.00;
|
|
609
|
+
/** @type {?} */
|
|
610
|
+
let fees = [];
|
|
611
|
+
if (paymentGroup.fees) {
|
|
612
|
+
// this.isFeeRecordsExist = true;
|
|
613
|
+
paymentGroup.fees.forEach((/**
|
|
614
|
+
* @param {?} fee
|
|
615
|
+
* @return {?}
|
|
616
|
+
*/
|
|
617
|
+
fee => {
|
|
618
|
+
feesTotal = feesTotal + fee.calculated_amount;
|
|
619
|
+
this.isRemissionsMatch = false;
|
|
620
|
+
paymentGroup.remissions.forEach((/**
|
|
621
|
+
* @param {?} rem
|
|
622
|
+
* @return {?}
|
|
623
|
+
*/
|
|
624
|
+
rem => {
|
|
625
|
+
if (rem.fee_code === fee.code) {
|
|
626
|
+
this.isRemissionsMatch = true;
|
|
627
|
+
fee['remissions'] = rem;
|
|
628
|
+
// if(!fees.find(k => k.code=fee.code))
|
|
629
|
+
// {
|
|
630
|
+
fees.push(fee);
|
|
631
|
+
//}
|
|
632
|
+
}
|
|
633
|
+
}));
|
|
634
|
+
if (!this.isRemissionsMatch) {
|
|
635
|
+
fees.push(fee);
|
|
636
|
+
}
|
|
637
|
+
if (fee.date_created) {
|
|
638
|
+
isNewPaymentGroup = true;
|
|
639
|
+
}
|
|
640
|
+
else {
|
|
641
|
+
this.isHistoricGroupAvailable = true;
|
|
642
|
+
this.paymentGroups[index]['old'] = true;
|
|
643
|
+
}
|
|
644
|
+
}));
|
|
645
|
+
this.paymentGroups[index].fees = fees;
|
|
646
|
+
}
|
|
647
|
+
if (paymentGroup.payments) {
|
|
648
|
+
paymentGroup.payments.forEach((/**
|
|
649
|
+
* @param {?} payment
|
|
650
|
+
* @return {?}
|
|
651
|
+
*/
|
|
652
|
+
payment => {
|
|
653
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
654
|
+
paymentsTotal = paymentsTotal + payment.amount;
|
|
655
|
+
}
|
|
656
|
+
}));
|
|
657
|
+
}
|
|
658
|
+
if (paymentGroup.remissions) {
|
|
659
|
+
paymentGroup.remissions.forEach((/**
|
|
660
|
+
* @param {?} remission
|
|
661
|
+
* @return {?}
|
|
662
|
+
*/
|
|
663
|
+
remission => {
|
|
664
|
+
remissionsTotal = remissionsTotal + remission.hwf_amount;
|
|
665
|
+
}));
|
|
666
|
+
}
|
|
667
|
+
grpOutstandingAmount = (feesTotal - remissionsTotal) - paymentsTotal;
|
|
668
|
+
if (grpOutstandingAmount > 0 && isNewPaymentGroup) {
|
|
669
|
+
this.isAnyFeeGroupAvilable = true;
|
|
670
|
+
this.isFeeRecordsExist = true;
|
|
671
|
+
this.paymentRef = paymentGroup.payment_group_reference;
|
|
672
|
+
}
|
|
673
|
+
if (paymentGroup.fees && paymentGroup.fees.length > 0 && grpOutstandingAmount <= 0 && isNewPaymentGroup) {
|
|
674
|
+
this.isAnyFeeGroupAvilable = false;
|
|
675
|
+
}
|
|
676
|
+
}));
|
|
677
|
+
if ((!isNewPaymentGroup && this.isHistoricGroupAvailable) || (!isNewPaymentGroup && !this.isHistoricGroupAvailable)) {
|
|
678
|
+
this.isAnyFeeGroupAvilable = false;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
else {
|
|
197
682
|
/** @type {?} */
|
|
198
|
-
let
|
|
683
|
+
let totalRefundAmount = 0;
|
|
199
684
|
/** @type {?} */
|
|
200
|
-
let
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
685
|
+
let isFeeAmountZero = false;
|
|
686
|
+
this.paymentGroups.forEach((/**
|
|
687
|
+
* @param {?} paymentGroup
|
|
688
|
+
* @return {?}
|
|
689
|
+
*/
|
|
690
|
+
paymentGroup => {
|
|
691
|
+
/** @type {?} */
|
|
692
|
+
let grpOutstandingAmount = 0.00;
|
|
693
|
+
/** @type {?} */
|
|
694
|
+
let feesTotal = 0.00;
|
|
695
|
+
/** @type {?} */
|
|
696
|
+
let paymentsTotal = 0.00;
|
|
697
|
+
/** @type {?} */
|
|
698
|
+
let remissionsTotal = 0.00;
|
|
699
|
+
if (paymentGroup.fees) {
|
|
700
|
+
this.isFeeRecordsExist = true;
|
|
701
|
+
paymentGroup.fees.forEach((/**
|
|
702
|
+
* @param {?} fee
|
|
703
|
+
* @return {?}
|
|
704
|
+
*/
|
|
705
|
+
fee => {
|
|
706
|
+
feesTotal = feesTotal + fee.calculated_amount;
|
|
707
|
+
if (fee.calculated_amount === 0) {
|
|
708
|
+
isFeeAmountZero = true;
|
|
709
|
+
}
|
|
710
|
+
}));
|
|
711
|
+
}
|
|
712
|
+
if (paymentGroup.payments) {
|
|
713
|
+
paymentGroup.payments.forEach((/**
|
|
714
|
+
* @param {?} payment
|
|
715
|
+
* @return {?}
|
|
716
|
+
*/
|
|
717
|
+
payment => {
|
|
718
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
719
|
+
paymentsTotal = paymentsTotal + payment.amount;
|
|
720
|
+
}
|
|
721
|
+
}));
|
|
722
|
+
}
|
|
723
|
+
if (paymentGroup.remissions) {
|
|
724
|
+
paymentGroup.remissions.forEach((/**
|
|
725
|
+
* @param {?} remission
|
|
726
|
+
* @return {?}
|
|
727
|
+
*/
|
|
728
|
+
remission => {
|
|
729
|
+
remissionsTotal = remissionsTotal + remission.hwf_amount;
|
|
730
|
+
}));
|
|
731
|
+
}
|
|
732
|
+
grpOutstandingAmount = (feesTotal - remissionsTotal) - paymentsTotal;
|
|
733
|
+
if (grpOutstandingAmount < 0) {
|
|
734
|
+
if (totalRefundAmount === 0) {
|
|
735
|
+
totalRefundAmount = grpOutstandingAmount;
|
|
206
736
|
}
|
|
207
737
|
else {
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
if (paymentGroup.payments) {
|
|
213
|
-
paymentGroup.payments.forEach(payment => {
|
|
214
|
-
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
215
|
-
paymentsTotal = paymentsTotal + payment.amount;
|
|
738
|
+
totalRefundAmount = (totalRefundAmount + grpOutstandingAmount);
|
|
216
739
|
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
grpOutstandingAmount = (feesTotal - remissionsTotal) - paymentsTotal;
|
|
225
|
-
if (grpOutstandingAmount > 0 && isNewPaymentGroup) {
|
|
226
|
-
this.isAnyFeeGroupAvilable = true;
|
|
227
|
-
this.paymentRef = paymentGroup.payment_group_reference;
|
|
228
|
-
}
|
|
229
|
-
if (grpOutstandingAmount <= 0 && isNewPaymentGroup) {
|
|
230
|
-
this.isAnyFeeGroupAvilable = false;
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
if ((!isNewPaymentGroup && isOldPaymentGroup) || (!isNewPaymentGroup && !isOldPaymentGroup)) {
|
|
234
|
-
this.isAnyFeeGroupAvilable = false;
|
|
740
|
+
}
|
|
741
|
+
else if (grpOutstandingAmount > 0 || (grpOutstandingAmount === 0 && isFeeAmountZero)) {
|
|
742
|
+
this.isGrpOutstandingAmtPositive = true;
|
|
743
|
+
}
|
|
744
|
+
}));
|
|
745
|
+
return totalRefundAmount * -1;
|
|
235
746
|
}
|
|
236
747
|
}
|
|
237
748
|
/**
|
|
@@ -248,17 +759,87 @@ export class CaseTransactionsComponent {
|
|
|
248
759
|
*/
|
|
249
760
|
redirectToFeeSearchPage(event) {
|
|
250
761
|
event.preventDefault();
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
762
|
+
/** @type {?} */
|
|
763
|
+
let url = this.isBulkScanEnable ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
|
|
764
|
+
url += this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
765
|
+
url += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
766
|
+
url += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
767
|
+
url += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
768
|
+
url += `&caseType=${this.caseType}`;
|
|
769
|
+
this.router.navigateByUrl(`/fee-search?selectedOption=${this.selectedOption}&ccdCaseNumber=${this.ccdCaseNumber}${url}`);
|
|
770
|
+
}
|
|
771
|
+
/**
|
|
772
|
+
* @param {?} fee
|
|
773
|
+
* @return {?}
|
|
774
|
+
*/
|
|
775
|
+
addRemission(fee) {
|
|
776
|
+
if (this.chkForAddRemission(fee.code)) {
|
|
777
|
+
this.feeId = fee;
|
|
778
|
+
this.viewStatus = 'addremission';
|
|
779
|
+
this.paymentViewService.getApportionPaymentDetails(this.payment.reference).subscribe((/**
|
|
780
|
+
* @param {?} paymentGroup
|
|
781
|
+
* @return {?}
|
|
782
|
+
*/
|
|
783
|
+
paymentGroup => {
|
|
784
|
+
this.paymentGroup = paymentGroup;
|
|
785
|
+
this.paymentGroup.payments = this.paymentGroup.payments.filter((/**
|
|
786
|
+
* @param {?} paymentGroupObj
|
|
787
|
+
* @return {?}
|
|
788
|
+
*/
|
|
789
|
+
paymentGroupObj => paymentGroupObj['reference'].includes(this.paymentLibComponent.paymentReference)));
|
|
790
|
+
this.payment = this.paymentGroup.payments[0];
|
|
791
|
+
// const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
|
|
792
|
+
// this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
|
|
793
|
+
}), (/**
|
|
794
|
+
* @param {?} error
|
|
795
|
+
* @return {?}
|
|
796
|
+
*/
|
|
797
|
+
(error) => this.errorMessage = error.replace(/"/g, "")));
|
|
260
798
|
}
|
|
261
799
|
}
|
|
800
|
+
/**
|
|
801
|
+
* @param {?} payment
|
|
802
|
+
* @param {?} remission
|
|
803
|
+
* @param {?} fees
|
|
804
|
+
* @return {?}
|
|
805
|
+
*/
|
|
806
|
+
addRefundForRemission(payment, remission, fees) {
|
|
807
|
+
this.viewStatus = 'addrefundforremission';
|
|
808
|
+
this.payment = payment;
|
|
809
|
+
this.paymentViewService.getApportionPaymentDetails(this.payment.reference).subscribe((/**
|
|
810
|
+
* @param {?} paymentGroup
|
|
811
|
+
* @return {?}
|
|
812
|
+
*/
|
|
813
|
+
paymentGroup => {
|
|
814
|
+
this.paymentGroup = paymentGroup;
|
|
815
|
+
this.paymentGroup.payments = this.paymentGroup.payments.filter((/**
|
|
816
|
+
* @param {?} paymentGroupObj
|
|
817
|
+
* @return {?}
|
|
818
|
+
*/
|
|
819
|
+
paymentGroupObj => paymentGroupObj['reference'].includes(this.payment.reference)));
|
|
820
|
+
this.payment = this.paymentGroup.payments[0];
|
|
821
|
+
this.remissions = remission;
|
|
822
|
+
this.remissionFeeAmt = fees.filter((/**
|
|
823
|
+
* @param {?} data
|
|
824
|
+
* @return {?}
|
|
825
|
+
*/
|
|
826
|
+
data => data.code === this.remissions['fee_code']))[0].net_amount;
|
|
827
|
+
// const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
|
|
828
|
+
// this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
|
|
829
|
+
}), (/**
|
|
830
|
+
* @param {?} error
|
|
831
|
+
* @return {?}
|
|
832
|
+
*/
|
|
833
|
+
(error) => this.errorMessage = error));
|
|
834
|
+
}
|
|
835
|
+
/**
|
|
836
|
+
* @param {?} event
|
|
837
|
+
* @return {?}
|
|
838
|
+
*/
|
|
839
|
+
redirectToremissionPage(event) {
|
|
840
|
+
event.preventDefault();
|
|
841
|
+
this.paymentLibComponent.viewName = 'remission';
|
|
842
|
+
}
|
|
262
843
|
/**
|
|
263
844
|
* @param {?} event
|
|
264
845
|
* @return {?}
|
|
@@ -274,6 +855,7 @@ export class CaseTransactionsComponent {
|
|
|
274
855
|
loadFeeSummaryPage(paymentGroup) {
|
|
275
856
|
this.paymentLibComponent.bspaymentdcn = null;
|
|
276
857
|
this.paymentLibComponent.paymentGroupReference = paymentGroup.payment_group_reference;
|
|
858
|
+
this.paymentLibComponent.isTurnOff = this.isTurnOff;
|
|
277
859
|
this.paymentLibComponent.viewName = 'fee-summary';
|
|
278
860
|
}
|
|
279
861
|
/**
|
|
@@ -301,9 +883,15 @@ export class CaseTransactionsComponent {
|
|
|
301
883
|
*/
|
|
302
884
|
selectedUnprocessedFeeEvent(unprocessedRecordId) {
|
|
303
885
|
if (unprocessedRecordId) {
|
|
886
|
+
if (this.isTurnOff) {
|
|
887
|
+
this.isAddFeeBtnEnabled = false;
|
|
888
|
+
}
|
|
304
889
|
this.isUnprocessedRecordSelected = true;
|
|
305
890
|
}
|
|
306
891
|
else {
|
|
892
|
+
if (this.isTurnOff) {
|
|
893
|
+
this.isAddFeeBtnEnabled = true;
|
|
894
|
+
}
|
|
307
895
|
this.isUnprocessedRecordSelected = false;
|
|
308
896
|
}
|
|
309
897
|
}
|
|
@@ -320,7 +908,7 @@ export class CaseTransactionsComponent {
|
|
|
320
908
|
*/
|
|
321
909
|
calculateAmountDue(fee) {
|
|
322
910
|
if (fee.date_created) {
|
|
323
|
-
return fee.amount_due ? fee.amount_due : fee.net_amount;
|
|
911
|
+
return fee.amount_due !== undefined ? fee.amount_due : fee.net_amount;
|
|
324
912
|
}
|
|
325
913
|
else {
|
|
326
914
|
return "0.00";
|
|
@@ -347,12 +935,20 @@ export class CaseTransactionsComponent {
|
|
|
347
935
|
*/
|
|
348
936
|
removeFee(fee) {
|
|
349
937
|
this.isRemoveBtnDisabled = true;
|
|
350
|
-
this.paymentViewService.deleteFeeFromPaymentGroup(fee).subscribe((
|
|
938
|
+
this.paymentViewService.deleteFeeFromPaymentGroup(fee).subscribe((/**
|
|
939
|
+
* @param {?} success
|
|
940
|
+
* @return {?}
|
|
941
|
+
*/
|
|
942
|
+
(success) => {
|
|
351
943
|
window.location.reload();
|
|
352
|
-
}, (
|
|
944
|
+
}), (/**
|
|
945
|
+
* @param {?} error
|
|
946
|
+
* @return {?}
|
|
947
|
+
*/
|
|
948
|
+
(error) => {
|
|
353
949
|
this.errorMessage = error;
|
|
354
950
|
this.isRemoveBtnDisabled = false;
|
|
355
|
-
});
|
|
951
|
+
}));
|
|
356
952
|
}
|
|
357
953
|
/**
|
|
358
954
|
* @param {?} amountDue
|
|
@@ -361,253 +957,124 @@ export class CaseTransactionsComponent {
|
|
|
361
957
|
isCheckAmountdueExist(amountDue) {
|
|
362
958
|
return typeof amountDue === 'undefined';
|
|
363
959
|
}
|
|
960
|
+
/**
|
|
961
|
+
* @param {?} payment
|
|
962
|
+
* @return {?}
|
|
963
|
+
*/
|
|
964
|
+
issueRefund(payment) {
|
|
965
|
+
if (payment !== null && payment !== undefined) {
|
|
966
|
+
if (this.chkIssueRefundBtnEnable(payment)) {
|
|
967
|
+
this.viewStatus = 'issuerefund';
|
|
968
|
+
this.payment = payment;
|
|
969
|
+
this.isRefundRemission = true;
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
/**
|
|
974
|
+
* @param {?} feeCode
|
|
975
|
+
* @return {?}
|
|
976
|
+
*/
|
|
977
|
+
chkForAddRemission(feeCode) {
|
|
978
|
+
if (this.chkForPBAPayment() && this.check4AllowedRoles2AccessRefund()) {
|
|
979
|
+
if (this.orderDetail[0]['remissions'].length > 0) {
|
|
980
|
+
for (const remission of this.orderDetail[0]['remissions']) {
|
|
981
|
+
if (remission.fee_code === feeCode) {
|
|
982
|
+
return false;
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
return true;
|
|
987
|
+
}
|
|
988
|
+
else {
|
|
989
|
+
return false;
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
/**
|
|
993
|
+
* @return {?}
|
|
994
|
+
*/
|
|
995
|
+
chkForPBAPayment() {
|
|
996
|
+
if (this.orderDetail !== null && this.orderDetail !== undefined) {
|
|
997
|
+
this.orderDetail.forEach((/**
|
|
998
|
+
* @param {?} orderDetail
|
|
999
|
+
* @return {?}
|
|
1000
|
+
*/
|
|
1001
|
+
orderDetail => {
|
|
1002
|
+
if (orderDetail.payments) {
|
|
1003
|
+
orderDetail.payments.forEach((/**
|
|
1004
|
+
* @param {?} payment
|
|
1005
|
+
* @return {?}
|
|
1006
|
+
*/
|
|
1007
|
+
payment => {
|
|
1008
|
+
if (payment.method.toLocaleLowerCase() === 'payment by account' && this.allowFurtherAccessAfter4Days(payment)) {
|
|
1009
|
+
this.isPBA = true;
|
|
1010
|
+
}
|
|
1011
|
+
}));
|
|
1012
|
+
}
|
|
1013
|
+
}));
|
|
1014
|
+
if (this.isPBA) {
|
|
1015
|
+
return true;
|
|
1016
|
+
}
|
|
1017
|
+
else {
|
|
1018
|
+
return false;
|
|
1019
|
+
}
|
|
1020
|
+
;
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
/**
|
|
1024
|
+
* @param {?} payment
|
|
1025
|
+
* @return {?}
|
|
1026
|
+
*/
|
|
1027
|
+
chkIssueRefundBtnEnable(payment) {
|
|
1028
|
+
if (this.check4AllowedRoles2AccessRefund() && this.allowFurtherAccessAfter4Days(payment) &&
|
|
1029
|
+
payment.method === 'payment by account' && payment.status.toLocaleLowerCase() === 'success') {
|
|
1030
|
+
this.isIssueRefunfBtnEnable = true;
|
|
1031
|
+
}
|
|
1032
|
+
if (this.isIssueRefunfBtnEnable) {
|
|
1033
|
+
return true;
|
|
1034
|
+
}
|
|
1035
|
+
else {
|
|
1036
|
+
return false;
|
|
1037
|
+
}
|
|
1038
|
+
;
|
|
1039
|
+
}
|
|
1040
|
+
/**
|
|
1041
|
+
* @return {?}
|
|
1042
|
+
*/
|
|
1043
|
+
chkIsRefundRemissionBtnEnable() {
|
|
1044
|
+
if (this.orderDetail !== null && this.orderDetail !== undefined) {
|
|
1045
|
+
this.orderDetail.forEach((/**
|
|
1046
|
+
* @param {?} orderDetail
|
|
1047
|
+
* @return {?}
|
|
1048
|
+
*/
|
|
1049
|
+
orderDetail => {
|
|
1050
|
+
if (orderDetail.payments) {
|
|
1051
|
+
orderDetail.payments.forEach((/**
|
|
1052
|
+
* @param {?} payment
|
|
1053
|
+
* @return {?}
|
|
1054
|
+
*/
|
|
1055
|
+
payment => {
|
|
1056
|
+
if (payment.method.toLocaleLowerCase() === 'payment by account' && payment.status.toLocaleLowerCase() === 'success' && this.allowFurtherAccessAfter4Days(payment)) {
|
|
1057
|
+
this.isRefundRemissionBtnEnable = true;
|
|
1058
|
+
}
|
|
1059
|
+
}));
|
|
1060
|
+
}
|
|
1061
|
+
}));
|
|
1062
|
+
if (this.isRefundRemissionBtnEnable) {
|
|
1063
|
+
return true;
|
|
1064
|
+
}
|
|
1065
|
+
else {
|
|
1066
|
+
return false;
|
|
1067
|
+
}
|
|
1068
|
+
;
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
364
1071
|
}
|
|
365
1072
|
CaseTransactionsComponent.decorators = [
|
|
366
1073
|
{ type: Component, args: [{
|
|
367
1074
|
selector: 'ccpay-case-transactions',
|
|
368
|
-
template: `<div class="govuk-width-container">
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
<div *ngIf="viewStatus === 'main'">
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
<div *ngIf="takePayment" class="govuk-grid-row">
|
|
375
|
-
<div class="govuk-grid-column-two-thirds">
|
|
376
|
-
<h1 class="govuk-heading-xl">Case transactions</h1>
|
|
377
|
-
</div>
|
|
378
|
-
</div>
|
|
379
|
-
|
|
380
|
-
<div *ngIf="takePayment" class="govuk-grid-row">
|
|
381
|
-
<div *ngIf='!isExceptionRecord' class="govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6">
|
|
382
|
-
<h3 class="heading-medium">CCD reference:</h3>
|
|
383
|
-
<span> {{ ccdCaseNumber | ccdHyphens }}</span>
|
|
384
|
-
</div>
|
|
385
|
-
|
|
386
|
-
<div *ngIf='isExceptionRecord' class="govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6">
|
|
387
|
-
<h3 class="heading-medium">Exception reference:</h3>
|
|
388
|
-
<span> {{ ccdCaseNumber | ccdHyphens }}</span>
|
|
389
|
-
</div>
|
|
390
|
-
|
|
391
|
-
<div class="govuk-grid-column-full govuk-!-padding-bottom-3">
|
|
392
|
-
<hr class="govuk-section-break govuk-section-break--visible">
|
|
393
|
-
<table class="govuk-table">
|
|
394
|
-
<thead class="govuk-table__head">
|
|
395
|
-
<tr class="govuk-table__row">
|
|
396
|
-
<td class="govuk-table__header" scope="col">Total payments</td>
|
|
397
|
-
<td class="govuk-table__header" scope="col">Total remissions</td>
|
|
398
|
-
<td class="govuk-table__header" scope="col">Amount due</td>
|
|
399
|
-
<td class="govuk-table__header govuk-table__header--custom" scope="col" *ngIf="isBulkScanEnable">Unallocated payments</td>
|
|
400
|
-
</tr>
|
|
401
|
-
</thead>
|
|
402
|
-
<tbody class="govuk-table__body">
|
|
403
|
-
<tr class="totalpayments govuk-table__row">
|
|
404
|
-
<td class="govuk-table__cell">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>
|
|
405
|
-
<td class="govuk-table__cell">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>
|
|
406
|
-
<td class="govuk-table__cell">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>
|
|
407
|
-
<td class="govuk-table__cell case-transaction__color" *ngIf="isBulkScanEnable">{{unprocessedRecordCount}}</td>
|
|
408
|
-
</tr>
|
|
409
|
-
</tbody>
|
|
410
|
-
</table>
|
|
411
|
-
</div>
|
|
412
|
-
|
|
413
|
-
<div class="govuk-grid-column-two-thirds govuk-!-padding-bottom-6" *ngIf="takePayment">
|
|
414
|
-
<button type="submit" (click)="redirectToFeeSearchPage($event)"
|
|
415
|
-
[disabled]="!isAddFeeBtnEnabled"
|
|
416
|
-
[ngClass]='!isAddFeeBtnEnabled ? "govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1" : "govuk-button govuk-button--secondary govuk-!-margin-right-1"'>
|
|
417
|
-
Take telephony payment
|
|
418
|
-
</button>
|
|
419
|
-
</div>
|
|
420
|
-
|
|
421
|
-
</div>
|
|
422
|
-
|
|
423
|
-
<div class="govuk-grid-row">
|
|
424
|
-
<div *ngIf="takePayment">
|
|
425
|
-
<hr class="govuk-section-records-break">
|
|
426
|
-
</div>
|
|
427
|
-
<ccpay-app-unprocessed-payments
|
|
428
|
-
*ngIf="isBulkScanEnable"
|
|
429
|
-
[IS_BUTTON_ENABLE]="takePayment"
|
|
430
|
-
[FEE_RECORDS_EXISTS]="isAnyFeeGroupAvilable"
|
|
431
|
-
[PAYMENTREF]="paymentRef"
|
|
432
|
-
(getUnprocessedFeeCount) = "getUnprocessedFeeCount($event)"
|
|
433
|
-
(selectedUnprocessedFeeEvent) = "selectedUnprocessedFeeEvent($event)">
|
|
434
|
-
</ccpay-app-unprocessed-payments>
|
|
435
|
-
<hr class="govuk-section-records-break">
|
|
436
|
-
<ccpay-app-processed-payments
|
|
437
|
-
*ngIf="takePayment" [NONPAYMENTS]="nonPayments"
|
|
438
|
-
(goToPaymentViewComponent) = "goToPaymentViewComponent($event)" >
|
|
439
|
-
</ccpay-app-processed-payments>
|
|
440
|
-
<hr class="govuk-section-records-break">
|
|
441
|
-
</div>
|
|
442
|
-
<div *ngIf="takePayment">
|
|
443
|
-
|
|
444
|
-
<div class="govuk-grid-row">
|
|
445
|
-
<div class="govuk-grid-column-full">
|
|
446
|
-
<span class="heading-small">Fees</span>
|
|
447
|
-
</div>
|
|
448
|
-
|
|
449
|
-
<div class="govuk-grid-column-full">
|
|
450
|
-
<table class="govuk-table">
|
|
451
|
-
<thead class="govuk-table__head">
|
|
452
|
-
<tr class="govuk-table__row">
|
|
453
|
-
<td class="govuk-table__header" scope="col">Code</td>
|
|
454
|
-
<td class="govuk-table__header" scope="col">Description</td>
|
|
455
|
-
<td class="govuk-table__header" scope="col">Volume</td>
|
|
456
|
-
<td class="govuk-table__header" scope="col">Fee amount</td>
|
|
457
|
-
<td class="govuk-table__header" scope="col">Calculated amount</td>
|
|
458
|
-
<td class="govuk-table__header" scope="col">Amount due</td>
|
|
459
|
-
<td class="govuk-table__header" scope="col">Action</td>
|
|
460
|
-
|
|
461
|
-
</tr>
|
|
462
|
-
</thead>
|
|
463
|
-
<tbody class="govuk-table__body" *ngIf="paymentGroups?.length > 0">
|
|
464
|
-
<tr class="govuk-table__row" *ngFor="let fee of fees;">
|
|
465
|
-
<td class="govuk-table__cell"> {{fee.code}} </td>
|
|
466
|
-
<td class="govuk-table__cell">{{fee.description}}</td>
|
|
467
|
-
<td class="govuk-table__cell">{{fee.volume? fee.volume : '-'}}</td>
|
|
468
|
-
<td class="govuk-table__cell">{{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>
|
|
469
|
-
<td class="govuk-table__cell">{{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>
|
|
470
|
-
<td class="govuk-table__cell"> {{calculateAmountDue(fee) | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>
|
|
471
|
-
<td class="govuk-table__cell">
|
|
472
|
-
<a (click)="confirmRemoveFee(fee.id)" [ngClass]='!isCheckAmountdueExist(fee.amount_due) ? "disable-link" : ""'>Remove</a>
|
|
473
|
-
</td>
|
|
474
|
-
</tr>
|
|
475
|
-
</tbody>
|
|
476
|
-
<tbody class="govuk-table__body" *ngIf="paymentGroups?.length === 0">
|
|
477
|
-
<tr class="govuk-table__row" >
|
|
478
|
-
<td class="govuk-table__cell" colspan="7">No fees recorded</td>
|
|
479
|
-
</tr>
|
|
480
|
-
</tbody>
|
|
481
|
-
</table>
|
|
482
|
-
</div>
|
|
483
|
-
</div>
|
|
484
|
-
<details *ngIf="allPayments?.length > 0 || remissions?.length > 0">
|
|
485
|
-
<summary class="govuk-hidetext">
|
|
486
|
-
<span class="summary">Payments and remissions</span>
|
|
487
|
-
</summary>
|
|
488
|
-
|
|
489
|
-
<div class="panel panel-border-narrow">
|
|
490
|
-
<!-- payments -->
|
|
491
|
-
<table class="govuk-table">
|
|
492
|
-
<thead class="govuk-table__head">
|
|
493
|
-
<tr class="govuk-table__row">
|
|
494
|
-
<td class="govuk-table__header" scope="col">Payment reference</td>
|
|
495
|
-
<td class="govuk-table__header" scope="col">Date created</td>
|
|
496
|
-
<td class="govuk-table__header" scope="col">Channel</td>
|
|
497
|
-
<td class="govuk-table__header" scope="col">Method</td>
|
|
498
|
-
<td class="govuk-table__header" scope="col">Amount</td>
|
|
499
|
-
<td class="govuk-table__header" scope="col">Allocation status</td>
|
|
500
|
-
<td class="govuk-table__header" scope="col">Payment status</td>
|
|
501
|
-
</tr>
|
|
502
|
-
</thead>
|
|
503
|
-
<tbody class="govuk-table__body" *ngIf="allPayments?.length > 0">
|
|
504
|
-
<tr class="govuk-table__row" *ngFor="let payment of allPayments">
|
|
505
|
-
<td class="govuk-table__cell whitespace-inherit">
|
|
506
|
-
<a href="javascript:void(0)" (click)="goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)">{{ payment.reference }}</a>
|
|
507
|
-
</td>
|
|
508
|
-
<td class="govuk-table__cell whitespace-inherit">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>
|
|
509
|
-
<td class="channel govuk-table__cell whitespace-inherit">{{ payment.channel | lowercase }}</td>
|
|
510
|
-
<td class="govuk-table__cell capitalize whitespace-inherit">{{ payment.method | lowercase}}</td>
|
|
511
|
-
<td class="govuk-table__cell whitespace-inherit">{{ payment.amount }}</td>
|
|
512
|
-
<td class="govuk-table__cell whitespace-inherit"> {{getAllocationStatus(payment)}}</td>
|
|
513
|
-
<td class="govuk-table__cell whitespace-inherit">{{ payment.status }}</td>
|
|
514
|
-
</tr>
|
|
515
|
-
</tbody>
|
|
516
|
-
<tbody class="govuk-table__body" *ngIf="allPayments?.length === 0">
|
|
517
|
-
<td class="govuk-table__cell" colspan="6">No payments recorded</td>
|
|
518
|
-
</tbody>
|
|
519
|
-
</table>
|
|
520
|
-
|
|
521
|
-
<!-- remissions -->
|
|
522
|
-
<table class="govuk-table">
|
|
523
|
-
<thead class="govuk-table__head">
|
|
524
|
-
<tr class="govuk-table__row">
|
|
525
|
-
<td class="govuk-table__header" scope="col">Fee code</td>
|
|
526
|
-
<td class="govuk-table__header" scope="col">Remission reference</td>
|
|
527
|
-
<td class="govuk-table__header" scope="col">Date created</td>
|
|
528
|
-
<td class="govuk-table__header" scope="col">Remission code</td>
|
|
529
|
-
<td class="govuk-table__header" scope="col">Remission amount</td>
|
|
530
|
-
</tr>
|
|
531
|
-
</thead>
|
|
532
|
-
<tbody class="govuk-table__body" *ngIf="remissions?.length > 0">
|
|
533
|
-
<tr class="govuk-table__row" *ngFor="let remission of remissions">
|
|
534
|
-
<td class="govuk-table__cell whitespace-inherit">{{ remission.fee_code }}</td>
|
|
535
|
-
<td class="govuk-table__cell whitespace-inherit">{{ remission.remission_reference }}</td>
|
|
536
|
-
<td class="govuk-table__cell whitespace-inherit">{{ remission.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>
|
|
537
|
-
<td class="govuk-table__cell whitespace-inherit">{{ remission.hwf_reference }}</td>
|
|
538
|
-
<td class="govuk-table__cell whitespace-inherit">{{ remission.hwf_amount }}</td>
|
|
539
|
-
</tr>
|
|
540
|
-
</tbody>
|
|
541
|
-
<tbody class="govuk-table__body" *ngIf="remissions?.length === 0">
|
|
542
|
-
<td class="govuk-table__cell" colspan="5">No remissions recorded</td>
|
|
543
|
-
</tbody>
|
|
544
|
-
</table>
|
|
545
|
-
</div>
|
|
546
|
-
</details>
|
|
547
|
-
</div>
|
|
548
|
-
</div>
|
|
549
|
-
<div *ngIf="!takePayment" class="govuk-grid-row govuk-grid__surplus-payments">
|
|
550
|
-
<div class="govuk-grid-column-full">
|
|
551
|
-
<span class="heading-medium">Processed payments</span>
|
|
552
|
-
<table class="govuk-table">
|
|
553
|
-
<thead class="govuk-table__head">
|
|
554
|
-
<tr class="govuk-table__row">
|
|
555
|
-
<td class="govuk-table__header" scope="col">Payment reference</td>
|
|
556
|
-
<td class="govuk-table__header" scope="col">Date created</td>
|
|
557
|
-
<td class="govuk-table__header" scope="col">Date updated</td>
|
|
558
|
-
<td class="govuk-table__header" scope="col">Channel</td>
|
|
559
|
-
<td class="govuk-table__header" scope="col">Method</td>
|
|
560
|
-
<td class="govuk-table__header" scope="col">Amount</td>
|
|
561
|
-
<td class="govuk-table__header" scope="col">Allocation status</td>
|
|
562
|
-
<td class="govuk-table__header" scope="col">Status</td>
|
|
563
|
-
</tr>
|
|
564
|
-
</thead>
|
|
565
|
-
<tbody class="govuk-table__body" *ngIf="allPayments?.length > 0">
|
|
566
|
-
<tr class="govuk-table__row" *ngFor="let payment of allPayments">
|
|
567
|
-
<td class="govuk-table__cell whitespace-inherit">
|
|
568
|
-
<a href="javascript:void(0)" (click)="goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)">{{ payment.reference }}</a>
|
|
569
|
-
</td>
|
|
570
|
-
<td class="govuk-table__cell whitespace-inherit">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>
|
|
571
|
-
<td class="govuk-table__cell whitespace-inherit">{{ payment.date_updated | date:'dd MMM yyyy HH:mm:ss' }}</td>
|
|
572
|
-
<td class="channel govuk-table__cell whitespace-inherit">{{ payment.channel | lowercase }}</td>
|
|
573
|
-
<td class="govuk-table__cell capitalize whitespace-inherit">{{ payment.method | lowercase}}</td>
|
|
574
|
-
<td class="govuk-table__cell whitespace-inherit">{{ payment.amount }}</td>
|
|
575
|
-
<td class="govuk-table__cell whitespace-inherit"> {{getAllocationStatus(payment)}}</td>
|
|
576
|
-
<td class="govuk-table__cell whitespace-inherit">{{ payment.status }}</td>
|
|
577
|
-
</tr>
|
|
578
|
-
</tbody>
|
|
579
|
-
<tbody class="govuk-table__body" *ngIf="allPayments?.length === 0">
|
|
580
|
-
<td class="govuk-table__cell" colspan="8">No payments recorded</td>
|
|
581
|
-
</tbody>
|
|
582
|
-
</table>
|
|
583
|
-
</div>
|
|
584
|
-
</div>
|
|
585
|
-
<ng-container *ngIf="viewStatus === 'feeRemovalConfirmation'">
|
|
586
|
-
<div class="govuk-warning-text">
|
|
587
|
-
<span class="govuk-warning-text__icon" aria-hidden="true">!</span>
|
|
588
|
-
<strong class="govuk-warning-text__text">
|
|
589
|
-
<span class="govuk-warning-text__assistive">Warning</span>
|
|
590
|
-
Are you sure you want to delete this fee?
|
|
591
|
-
</strong>
|
|
592
|
-
</div>
|
|
593
|
-
<div class="govuk-button-grb">
|
|
594
|
-
<form novalidate>
|
|
595
|
-
<button type="submit" class="button govuk-button--secondary" (click)="cancelRemoval()">
|
|
596
|
-
Cancel
|
|
597
|
-
</button>
|
|
598
|
-
<button type="submit" class="button"
|
|
599
|
-
[disabled]="isRemoveBtnDisabled"
|
|
600
|
-
[ngClass]='isRemoveBtnDisabled ? "button button--disabled govuk-!-margin-right-1" : "button govuk-!-margin-right-1"'
|
|
601
|
-
(click)="removeFee(feeId)">
|
|
602
|
-
Remove
|
|
603
|
-
</button>
|
|
604
|
-
</form>
|
|
605
|
-
</div>
|
|
606
|
-
</ng-container>
|
|
607
|
-
</main>
|
|
608
|
-
`,
|
|
609
|
-
styles: [`.govuk-grid-column-full--gr{position:relative;margin-bottom:10px}.disable{text-decoration:none;cursor:default;color:#fff;background-color:grey;pointer-events:none}.govuk-grid__surplus-payments{margin:20px 0}.govuk-grid__surplus-payments>.govuk-grid-column-full{padding:0}.govuk-grid__surplus-payments-col1{margin-bottom:10px}.govuk-inset-text__no-border{border-left:0}.govuk-hidetext{font-size:22px;padding-bottom:10px}.lowercase{text-transform:lowercase}.channel::first-letter{text-transform:uppercase}.govuk-heading-xl{font-size:48px;margin-bottom:1px}.govuk-section-break--visible{border-bottom:2px solid #000}.totalpayments.govuk-table__row{border-bottom:2px solid #000!important}.govuk-inset-text{margin-left:1em}.govuk-button{font-size:19px}.govuk-table__cell.govuk-table__cell--col6.govuk-table__custom--col6,.groupamount.govuk-table__header{text-align:right}.feeclass{padding-left:.7em}.align-center{text-align:center}details summary{display:list-item}.case-transaction__color{color:#a71414;font-weight:700;text-align:center}.capitalize::first-letter{text-transform:uppercase}.govuk-inset-text__no-left-margin{margin-left:0;padding-left:0}.whitespace-inherit{white-space:inherit!important}.govuk-section-records-break{margin:10px;border-bottom:2px solid #000!important}.exisitng-fees{margin-left:12px}.add-telephony-payment{margin-top:-2em;margin-left:-2em}.govuk-table__header--custom{text-align:center}.disable-link{cursor:default;pointer-events:none;color:#8e8c8c}`]
|
|
610
|
-
},] },
|
|
1075
|
+
template: "<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper\">\n <ng-container *ngIf=\"viewStatus === 'main1'\">\n <div *ngIf=\"viewStatus === 'main1'&& !isTurnOff && takePayment\">\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n <div *ngIf='!isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div *ngIf='isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">Exception reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header govuk-table__header--custom\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"govuk-grid-column-two-thirds\" *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"redirectToFeeSearchPage($event)\"\n [disabled]=\"!isAddFeeBtnEnabled\"\n [ngClass]='!isAddFeeBtnEnabled ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button>\n </div>\n\n </div>\n <div class=\"govuk-grid-row\">\n <!-- <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [FEE_RECORDS_EXISTS]=\"isAnyFeeGroupAvilable\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTREF]=\"paymentRef\"\n [ISNEWPCIPALOFF]=\"isNewPcipalOff\"\n [ISOLDPCIPALOFF]=\"isOldPcipalOff\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments> -->\n </div>\n <div *ngIf=\"takePayment\" class=\" govuk-!-margin-top-9\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <h3 class=\"heading-medium\">Fees</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header\" scope=\"col\">Action</td>\n\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let paymentGroup of paymentGroups;\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell\">\t{{fee.code}} </td>\n <td class=\"govuk-table__cell\">{{fee.description}}</td>\n <td class=\"govuk-table__cell\">{{fee.volume? fee.volume : '-'}}</td>\n <td class=\"govuk-table__cell\">{{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"paymentGroup.old && i==0\"> {{getGroupOutstandingAmount(paymentGroup)| currency:'GBP':'symbol-narrow':'1.2-2'}}* </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\"> {{calculateAmountDue(fee) | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='!isCheckAmountdueExist(fee.amount_due) || fee.remissions ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n <td class=\"govuk-table__cell\" *ngIf=\"paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='paymentGroup.payments?.length > 0 || paymentGroup.remissions?.length > 0 ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroups?.length === 0\">\n <tr class=\"govuk-table__row\" >\n <td class=\"govuk-table__cell\" colspan=\"7\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"hmcts-banner\" *ngIf=\"isHistoricGroupAvailable\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n * These fees have already been processed offline. Check the notes in CCD for more information.\n </div>\n </div>\n <div class=\"panel panel-no--style\" *ngIf=\"allPayments?.length > 0 || remissions?.length > 0\">\n <!-- payments -->\n <h3 class=\"heading-medium\">Payments</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-28\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header col-15\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Payment status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"7\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <h3 class=\"heading-medium\">Remissions</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"takePayment && isTurnOff\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n\n <div class=\"govuk-grid-column-one-third\" align=\"right\" >\n <a [ngClass]=\"{ 'disable': !isAddFeeBtnEnabled} \" (click)=\"redirectToFeeSearchPage($event)\" class=\"button\">Add a new fee</a>\n </div>\n </div> \n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ (totalFees - totalRemissions) - totalPayments | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n\n <!-- No fees start -->\n <div *ngIf=\"paymentGroups?.length === 0\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Existing fees</span>\n </div>\n\n <div class=\"govuk-grid-column-full\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- No fees end -->\n\n <div *ngFor=\"let paymentGroup of paymentGroups\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full govuk-grid-column-full--gr\">\n <span class=\"heading-medium\">Group reference: {{paymentGroup.payment_group_reference}}</span>\n </div>\n </div>\n <div class=\"govuk-grid-row\">\n\n <!--New Code start-->\n\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Exisiting fees</span>\n </div>\n <div class=feeclass>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"groupamount govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" >\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3 align-center\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\"> {{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\"> {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6 govuk-table__custom--col6\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length==0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"govuk-inset-text govuk-inset-text__no-border\" *ngIf=\"paymentGroup.payments || paymentGroup.remissions\">\n <details>\n <summary class=\"govuk-hidetext\">\n <span class=\"summary\">Allocated payments and remissions</span>\n </summary>\n\n <div class=\"panel panel-border-narrow\">\n <!-- payments -->\n <span class=\"heading-medium\">Payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of paymentGroup.payments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(paymentGroup.payment_group_reference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <span class=\"heading-medium\">Remissions</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee applied against</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of paymentGroup.remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </details>\n \n\n <div *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"loadFeeSummaryPage(paymentGroup)\"\n [disabled]=\"(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected)\"\n [ngClass]='(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected) ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Add telephone payment\n </button>\n </div>\n </div>\n </div>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"5\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISNEWPCIPALOFF]=\"isNewPcipalOff\"\n [ISOLDPCIPALOFF]=\"isOldPcipalOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n <div class=\"govuk-grid-row govuk-grid__surplus-payments\" *ngIf=\"totalRefundAmount > 0 && takePayment\">\n <div class=\"govuk-grid-column-full govuk-grid__surplus-payments-col1\">\n <h3 class=\"heading-medium\">Surplus payments</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n Total surplus payments received: {{totalRefundAmount | currency :'GBP':'symbol':'1.2-2'}}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\">\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"1\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n\n <div *ngIf=\"!takePayment\" class=\"govuk-grid-row govuk-grid__surplus-payments\">\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 Sorry, there is a problem with the service\n </h2>\n <p>Payment requests and payments cannot currently be shown. Try again.</p>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div> -->\n <div class=\"govuk-grid-column-full\">\n \n <span class=\"heading-medium\">Payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-13\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-14\" scope=\"col\">Date allocated</td>\n <td class=\"govuk-table__header col-20\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell col-13 whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell col-10 whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell col-17 whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell col-24 whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell col-13 whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n \n <!-- <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"8\">No payments recorded</td>\n </tbody> -->\n </table>\n <ccpay-app-unprocessed-payments class=\"govuk-table\"\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"2\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n </div>\n </ng-container>\n\n<!--Order Case Transactions Page-->\n <ng-container *ngIf=\"viewStatus === 'main' && !isTurnOff && takePayment\">\n <div>\n \n <div class=\"govuk-grid-row\">\n <h1 class=\"govuk-grid-column-two-thirds govuk-heading-l govuk-!-margin-top-0\">Case transactions</h1>\n <ng-container *ngIf='!isExceptionRecord' class=\" govuk-!-margin-bottom-6 alignself\">\n <b> Case reference: </b>{{ ccdCaseNumber | ccdHyphens }}\n </ng-container>\n <ng-container *ngIf='isExceptionRecord' class=\"govuk-!-margin-bottom-3 col-55 alignself\" >\n <b> Exception reference:</b>{{ ccdCaseNumber | ccdHyphens }}\n </ng-container>\n <div class=\"govuk-grid-row\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-25\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header govuk-table__header--custom col-25\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Amount due</td>\n \n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n \n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ORDERIDDETAILS'>\n\n <!--Payment Request-->\n <div class=\"paymentrequest\">\n <span class=\"heading-medium\">Service requests</span>\n <ng-container>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Party</td>\n <td class=\"govuk-table__header col-21\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header col\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"orderLevelFees?.length > 0\">\n <tr *ngFor=\"let orderRef of orderLevelFees;let i = index;\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderStatus}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td *ngIf=\"cpoDetails !== null\" class=\"govuk-table__cell whitespace-inherit\">{{cpoDetails['responsibleParty']}}</td> \n <td *ngIf=\"cpoDetails === null\" class=\"govuk-table__cell whitespace-inherit\"></td> \n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderRefId}}</td>\n <td class=\"govuk-table__cell\">\t\n <a href=\"javascript:void(0)\" (click)=\"goToOrderViewDetailSection(orderRef)\">Review</a>\n </td>\n <td class=\"alignright\">\n \n <button type=\"submit\" (click)=\"redirectToOrderFeeSearchPage($event,orderRef)\"\n [disabled]=\"!orderRef.orderAddBtnEnable\"\n [ngClass]='!orderRef.orderAddBtnEnable ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button></td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body alignleft\" *ngIf=\"orderLevelFees?.length === 0\">\n <td colspan=\"6\">No service requests on this case.</td>\n </tbody>\n </table>\n </ng-container>\n <!-- <ng-container *ngIf=\"orderLevelFees?.length === 0\">\n <br/>No service requests on this case.<br/>\n </ng-container> -->\n <span>\n <br/>\n <a (click)=\"redirectToFeeSearchPage($event)\"\n [class.disabled]=\"!isAddFeeBtnEnabled\">Create service request and pay</a><br/>\n </span>\n </div>\n <div>\n <span class=\"heading-medium\"><br/>Payments</span>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"3\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTREF]=\"paymentRef\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\" \n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n\n <ng-container>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell col-14 whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell col-10 whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell col-17 whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell col-24 whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell col-13 whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n \n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0 && unprocessedRecordCount <= 0\">\n <td colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n \n </ng-container>\n \n </div>\n <div>\n <span class=\"heading-medium\"><br/>Refunds</span>\n <ccpay-refund-status\n [ccdCaseNumber]=\"ccdCaseNumber\" \n [isTurnOff]=\"isTurnOff\"\n [LOGGEDINUSERROLES]=\"LOGGEDINUSERROLES\" \n [isNewPcipalOff]=\"isNewPcipalOff\"\n [isOldPcipalOff]=\"isOldPcipalOff\"\n ></ccpay-refund-status>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!takePayment && viewStatus === 'main'\">\n <!-- <div *ngIf=\"errorMessage\">\n <div *ngIf=\"isCPODown && isAnyFeeGroupAvilable\" class=\" error govuk-inset-text govuk-!-margin-top-7\">\n No party information currently available - try again later.\n </div>\n <div *ngIf=\"!isAnyFeeGroupAvilable\" class=\"error\">\n <h3 class=\"govuk-heading-m govuk-!-margin-top-7 govuk-!-margin-bottom-1\">Sorry, there is a problem with the service</h3>\n <p>Payment requests and payments cannot currently be shown. Try again.</p>\n </div>\n </div> -->\n \n <div class=\"govuk-grid-row govuk-grid__surplus-payments\">\n \n \n <div class=\"govuk-grid-column-full\">\n <div *ngIf=\"serviveRequestValue === 'false'\">\n <span class=\"heading-medium\"><br/>Payments</span>\n <ng-container >\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-17\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-24\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-13\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n <ccpay-app-unprocessed-payments class=\"govuk-table\"\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"4\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [FEE_RECORDS_EXISTS]=\"isAnyFeeGroupAvilable\" \n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\" \n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </ng-container>\n\n <!-- <ng-container *ngIf=\"allPayments?.length === 0\">\n <br/>No payments.\n </ng-container> -->\n </div>\n </div>\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-medium\"><br/>Refunds</span>\n <ccpay-refund-status [ccdCaseNumber]=\"ccdCaseNumber\" ></ccpay-refund-status>\n </div>\n\n \n </div>\n\n \n </ng-container>\n\n\n<input #myInput type='hidden' id='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_2'>\n\n<!-- Order Full View Details-->\n<ng-container *ngIf=\"viewStatus === 'order-full-view'\">\n <div *ngIf=\"takePayment\" class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-grid-column-full\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Service request</h1>\n </div>\n <table >\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Service request reference</td>\n <td>{{orderRef}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{orderStatus}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Date created</td>\n <td>{{orderCreated | date:'dd MMMM yyyy'}}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Party</td>\n <td>{{orderParty}}</td>\n </tr>\n\n\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">CCD event</td>\n <td>{{orderCCDEvent}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"govuk-grid-column-full order-class\">\n <div class=\"column\">\n <table class=\"govuk-table \">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-51\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let order of orderDetail;\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of order.fees; let i = index;\">\n <td class=\"govuk-table__cell col-60 whitespace-inherit\">{{fee.description}}</td>\n <td class=\"govuk-table__cell\">{{fee.volume? fee.volume : '-'}} X {{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell alignright\">\n <button [disabled]=\"!chkForAddRemission(fee.code)\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n </td>\n \n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngFor=\"let order of orderDetail;\">\n <tr class=\"govuk-table__row\" *ngIf=\"order.fees?.length === 0\" >\n <td class=\"govuk-table__cell alignleft\" colspan=\"7\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n\n </div>\n <div class=\"maxwidth\"> \n <p class=\"totalfees\">Total fees: {{orderFeesTotal | currency:'GBP':'symbol-narrow':'1.2-2' }}</p>\n </div>\n </div>\n <!-- <div class=\"hmcts-banner\" *ngIf=\"isHistoricGroupAvailable\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n * These fees have already been processed offline. Check the notes in CCD for more information.\n </div>\n </div> -->\n\n <!-- remissions -->\n <ng-container *ngFor=\"let order of orderDetail;\" >\n <div class=\"govuk-grid-column-full order-class\"> \n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Help with fees or remission code</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Reference</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header whitespace-inherit refundBtn\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody *ngIf=\"order.remissions?.length > 0\" class=\"govuk-table__body\" >\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of order.remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n <td class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n <button [disabled]=\"!chkIsRefundRemissionBtnEnable()\" (click)=\"addRefundForRemission(order.payments[0],remission,order.fees)\" class=\"govuk-button govuk-button--secondary\"> Add refund</button>\n </td>\n <!-- <td class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n \n </td> -->\n </tr>\n </tbody>\n \n\n </table>\n <div *ngIf=\"order.remissions?.length === 0\">\n <span >No help with fees or remissions.</span>\n </div>\n <div class=\"summarypagealign\">\n <p>Total reductions: {{orderRemissionTotal | currency:'GBP':'symbol-narrow':'1.2-2' }}</p>\n </div>\n <div class=\"summarypagealign\">\n <p class=\"summarypage\">Total fees to pay: {{(orderFeesTotal - orderRemissionTotal) | currency:'GBP':'symbol-narrow':'1.2-2' }}</p>\n </div>\n </div>\n \n \n </ng-container>\n \n \n <!--Payments-->\n <ng-container *ngFor=\"let order of orderDetail;\" >\n <div class=\"govuk-grid-column-full\"> \n <h3 class=\"heading-medium\">Payments</h3>\n <table class=\"govuk-table \">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-25\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody *ngIf=\"order.payments?.length > 0\" class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of order.payments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell alignright\">\n <button [disabled] = \"!chkIssueRefundBtnEnable(payment)\" (click)=\"issueRefund(payment)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </td>\n <!-- <td *ngIf=\"!chkIssueRefundBtnEnable(payment)\" class=\"govuk-table__cell\" style=\"text-align: right;\">\n </td> -->\n </tr>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"order.payments === undefined || order.payments === null\">\n <!-- <h3 class=\"heading-medium mar-17\">Payments</h3> -->\n <span class=\"mar-17\" >No Payments recorded</span>\n </div>\n \n </ng-container>\n <div *ngIf=\"((orderFeesTotal - orderRemissionTotal)- orderTotalPayments) > 0\" >\n <p class=\"totalPay\">Total left to pay: <b>{{((orderFeesTotal - orderRemissionTotal)- orderTotalPayments )| currency:'GBP':'symbol-narrow':'1.2-2' }}</b> </p>\n </div>\n <div *ngIf=\"((orderFeesTotal - orderRemissionTotal)- orderTotalPayments) < 0\" >\n <p class=\"totalPay\">Total left to pay: <b>0</b> </p>\n </div>\n\n \n</ng-container>\n<ccpay-add-remission *ngIf=\"viewStatus === 'addremission' && feeId\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[fee]=\"feeId\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[paymentGroupRef]=\"orderRef\" \n[isFromServiceRequestPage] = \"true\"\n[payment] = \"payment\"\n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ccpay-add-remission *ngIf=\"viewStatus === 'issuerefund' && payment\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[isFromServiceRequestPage] = \"true\"\n[payment]=\"payment\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[paymentGroupRef]=\"orderRef\" \n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ccpay-add-remission *ngIf=\"viewStatus === 'addrefundforremission' && payment\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[payment]=\"payment\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[feeamount]=\"remissionFeeAmt\"\n[remission] = \"remissions\"\n[isFromServiceRequestPage]=\"true\" \n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\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 delete this fee?\n </strong>\n </div>\n <div class=\"govuk-button-grb\">\n <form novalidate>\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemoval()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\"\n [disabled]=\"isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(feeId)\">\n Remove\n </button>\n </form>\n </div>\n</ng-container>\n\n</main>\n</div>",
|
|
1076
|
+
styles: [".govuk-grid-column-full--gr{position:relative;margin-bottom:10px}.disable{text-decoration:none;cursor:default;color:#fff;background-color:grey;pointer-events:none}.govuk-grid__surplus-payments{margin:20px 0}.govuk-grid__surplus-payments>.govuk-grid-column-full{padding:0}.govuk-grid__surplus-payments-col1{margin-bottom:10px}.govuk-inset-text__no-border{border-left:0}.govuk-hidetext{font-size:22px;padding-bottom:10px}.lowercase{text-transform:lowercase}.channel::first-letter{text-transform:uppercase}.govuk-heading-xl{font-size:48px;margin-bottom:1px}.govuk-section-break--visible{border-bottom:2px solid #000}.totalpayments.govuk-table__row{border-bottom:2px solid #000!important}.govuk-inset-text{margin-left:1em}.govuk-button{font-size:19px;margin-bottom:0!important}.govuk-table__cell.govuk-table__cell--col6.govuk-table__custom--col6,.groupamount.govuk-table__header{text-align:right}.feeclass{padding-left:.7em}.align-center{text-align:center}details summary{display:list-item}.case-transaction__color{color:#a71414;font-weight:700;text-align:center}.capitalize::first-letter{text-transform:uppercase}.govuk-inset-text__no-left-margin{margin-left:0;padding-left:0}.whitespace-inherit{white-space:inherit!important}.govuk-section-records-break{margin:10px;border-bottom:2px solid #000!important}.exisitng-fees{margin-left:12px}.add-telephony-payment{margin-top:-2em;margin-left:-2em}.govuk-table__header--custom{text-align:center}.disable-link{cursor:default;pointer-events:none;color:#8e8c8c}.panel-no--style{border-left-style:none}.col-28{width:28%!important}.col-8{width:8%!important}.col-60{width:60%!important}.col-32{width:32%!important}.col-34{width:34%!important}.col-15{width:15%!important;padding-right:0!important;padding-left:0!important}.col-16{width:16%!important}.col-14{width:14%!important}.col-17{width:17%!important}.col-12{width:12%!important}.col-9{width:9%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-13{width:13%!important}.col-21{width:21%!important}.col-20{width:20%!important}.col-24{width:24%!important}.govuk-table__cell,.govuk-table__header{padding:10px 10px 10px 0}.col-27{width:27%!important}td{white-space:nowrap;overflow:hidden!important}.col-19{width:19%!important;padding-left:0!important}.col-18{width:18%!important;padding-left:0!important;padding-right:0!important}.col-37{width:37%!important}.col-55{width:55%!important}.govuk-table{margin-bottom:1px}.hmcts-banner>.hmcts-banner__message{font-size:19px;line-height:1.25}.summary-table-font{font-size:36px}.order-class{padding-top:3em}.govuk-table__cell:last-child,.govuk-table__header:last-child{text-align:right}.govuk-grid-column-two-thirds{width:64%!important;padding:0!important}.govuk-heading-l{font-size:36px;margin-bottom:10px}.paymentrequest{margin-top:1em}.mar-17{margin-left:17px}.col-61{width:61px!important;padding:0!important}.error{width:960px;margin:auto}.summarypage{padding-left:36em;margin-top:2em}.summarypagealign{width:100%;text-align:right;margin-top:2em}.govuk-inset-text{font-size:2.1875rem}table{table-layout:fixed;width:100%}td,th{word-wrap:break-word}.totalPay{padding-right:14px;float:right;margin-top:2em}.govuk-back-link{font-size:1.5rem!important}.totalfees{float:right;margin-top:2em}.refundBtn{text-align:right;width:18%}.col-25{width:25%!important}.col-51{width:51%!important}.alignright{text-align:right}.alignleft{text-align:left}.alignself{align-self:flex-end}.maxwidth{width:100%}"]
|
|
1077
|
+
}] }
|
|
611
1078
|
];
|
|
612
1079
|
/** @nocollapse */
|
|
613
1080
|
CaseTransactionsComponent.ctorParameters = () => [
|
|
@@ -615,12 +1082,20 @@ CaseTransactionsComponent.ctorParameters = () => [
|
|
|
615
1082
|
{ type: PaymentViewService },
|
|
616
1083
|
{ type: BulkScaningPaymentService },
|
|
617
1084
|
{ type: CaseTransactionsService },
|
|
618
|
-
{ type: PaymentLibComponent }
|
|
1085
|
+
{ type: PaymentLibComponent },
|
|
1086
|
+
{ type: OrderslistService }
|
|
619
1087
|
];
|
|
1088
|
+
CaseTransactionsComponent.propDecorators = {
|
|
1089
|
+
LOGGEDINUSERROLES: [{ type: Input, args: ['LOGGEDINUSERROLES',] }]
|
|
1090
|
+
};
|
|
620
1091
|
if (false) {
|
|
1092
|
+
/** @type {?} */
|
|
1093
|
+
CaseTransactionsComponent.prototype.LOGGEDINUSERROLES;
|
|
621
1094
|
/** @type {?} */
|
|
622
1095
|
CaseTransactionsComponent.prototype.takePayment;
|
|
623
1096
|
/** @type {?} */
|
|
1097
|
+
CaseTransactionsComponent.prototype.servicerequest;
|
|
1098
|
+
/** @type {?} */
|
|
624
1099
|
CaseTransactionsComponent.prototype.ccdCaseNumber;
|
|
625
1100
|
/** @type {?} */
|
|
626
1101
|
CaseTransactionsComponent.prototype.excReference;
|
|
@@ -653,6 +1128,16 @@ if (false) {
|
|
|
653
1128
|
/** @type {?} */
|
|
654
1129
|
CaseTransactionsComponent.prototype.paymentRef;
|
|
655
1130
|
/** @type {?} */
|
|
1131
|
+
CaseTransactionsComponent.prototype.isTurnOff;
|
|
1132
|
+
/** @type {?} */
|
|
1133
|
+
CaseTransactionsComponent.prototype.isNewPcipalOff;
|
|
1134
|
+
/** @type {?} */
|
|
1135
|
+
CaseTransactionsComponent.prototype.isRefundRemission;
|
|
1136
|
+
/** @type {?} */
|
|
1137
|
+
CaseTransactionsComponent.prototype.isOldPcipalOff;
|
|
1138
|
+
/** @type {?} */
|
|
1139
|
+
CaseTransactionsComponent.prototype.isStrategicFixEnable;
|
|
1140
|
+
/** @type {?} */
|
|
656
1141
|
CaseTransactionsComponent.prototype.isAddFeeBtnEnabled;
|
|
657
1142
|
/** @type {?} */
|
|
658
1143
|
CaseTransactionsComponent.prototype.isExceptionRecord;
|
|
@@ -663,8 +1148,12 @@ if (false) {
|
|
|
663
1148
|
/** @type {?} */
|
|
664
1149
|
CaseTransactionsComponent.prototype.isAnyFeeGroupAvilable;
|
|
665
1150
|
/** @type {?} */
|
|
1151
|
+
CaseTransactionsComponent.prototype.isHistoricGroupAvailable;
|
|
1152
|
+
/** @type {?} */
|
|
666
1153
|
CaseTransactionsComponent.prototype.isBulkScanEnable;
|
|
667
1154
|
/** @type {?} */
|
|
1155
|
+
CaseTransactionsComponent.prototype.isRemissionsMatch;
|
|
1156
|
+
/** @type {?} */
|
|
668
1157
|
CaseTransactionsComponent.prototype.viewStatus;
|
|
669
1158
|
/** @type {?} */
|
|
670
1159
|
CaseTransactionsComponent.prototype.isRemoveBtnDisabled;
|
|
@@ -675,15 +1164,108 @@ if (false) {
|
|
|
675
1164
|
/** @type {?} */
|
|
676
1165
|
CaseTransactionsComponent.prototype.unprocessedRecordCount;
|
|
677
1166
|
/** @type {?} */
|
|
678
|
-
CaseTransactionsComponent.prototype.
|
|
1167
|
+
CaseTransactionsComponent.prototype.isFeeRecordsExist;
|
|
679
1168
|
/** @type {?} */
|
|
680
|
-
CaseTransactionsComponent.prototype.
|
|
1169
|
+
CaseTransactionsComponent.prototype.isGrpOutstandingAmtPositive;
|
|
681
1170
|
/** @type {?} */
|
|
682
|
-
CaseTransactionsComponent.prototype.
|
|
1171
|
+
CaseTransactionsComponent.prototype.totalRefundAmount;
|
|
683
1172
|
/** @type {?} */
|
|
684
|
-
CaseTransactionsComponent.prototype.
|
|
1173
|
+
CaseTransactionsComponent.prototype.caseType;
|
|
1174
|
+
/** @type {?} */
|
|
1175
|
+
CaseTransactionsComponent.prototype.lsCcdNumber;
|
|
1176
|
+
/** @type {?} */
|
|
1177
|
+
CaseTransactionsComponent.prototype.payment;
|
|
1178
|
+
/** @type {?} */
|
|
1179
|
+
CaseTransactionsComponent.prototype.paymentGroup;
|
|
1180
|
+
/** @type {?} */
|
|
1181
|
+
CaseTransactionsComponent.prototype.paymentView;
|
|
1182
|
+
/** @type {?} */
|
|
1183
|
+
CaseTransactionsComponent.prototype.orderDetail;
|
|
1184
|
+
/** @type {?} */
|
|
1185
|
+
CaseTransactionsComponent.prototype.isAddRemissionEnable;
|
|
1186
|
+
/** @type {?} */
|
|
1187
|
+
CaseTransactionsComponent.prototype.orderRemissionDetails;
|
|
1188
|
+
/** @type {?} */
|
|
1189
|
+
CaseTransactionsComponent.prototype.orderLevelFees;
|
|
1190
|
+
/** @type {?} */
|
|
1191
|
+
CaseTransactionsComponent.prototype.cpoDetails;
|
|
1192
|
+
/** @type {?} */
|
|
1193
|
+
CaseTransactionsComponent.prototype.orderRef;
|
|
1194
|
+
/** @type {?} */
|
|
1195
|
+
CaseTransactionsComponent.prototype.orderStatus;
|
|
1196
|
+
/** @type {?} */
|
|
1197
|
+
CaseTransactionsComponent.prototype.orderParty;
|
|
1198
|
+
/** @type {?} */
|
|
1199
|
+
CaseTransactionsComponent.prototype.orderCreated;
|
|
1200
|
+
/** @type {?} */
|
|
1201
|
+
CaseTransactionsComponent.prototype.orderCCDEvent;
|
|
685
1202
|
/** @type {?} */
|
|
1203
|
+
CaseTransactionsComponent.prototype.serviveRequestValue;
|
|
1204
|
+
/** @type {?} */
|
|
1205
|
+
CaseTransactionsComponent.prototype.orderAddBtnEnable;
|
|
1206
|
+
/** @type {?} */
|
|
1207
|
+
CaseTransactionsComponent.prototype.orderFeesTotal;
|
|
1208
|
+
/** @type {?} */
|
|
1209
|
+
CaseTransactionsComponent.prototype.orderRemissionTotal;
|
|
1210
|
+
/** @type {?} */
|
|
1211
|
+
CaseTransactionsComponent.prototype.orderTotalPayments;
|
|
1212
|
+
/** @type {?} */
|
|
1213
|
+
CaseTransactionsComponent.prototype.orderPendingPayments;
|
|
1214
|
+
/** @type {?} */
|
|
1215
|
+
CaseTransactionsComponent.prototype.isCPODown;
|
|
1216
|
+
/** @type {?} */
|
|
1217
|
+
CaseTransactionsComponent.prototype.test;
|
|
1218
|
+
/** @type {?} */
|
|
1219
|
+
CaseTransactionsComponent.prototype.isPBA;
|
|
1220
|
+
/** @type {?} */
|
|
1221
|
+
CaseTransactionsComponent.prototype.isIssueRefunfBtnEnable;
|
|
1222
|
+
/** @type {?} */
|
|
1223
|
+
CaseTransactionsComponent.prototype.isAddRemissionBtnEnabled;
|
|
1224
|
+
/** @type {?} */
|
|
1225
|
+
CaseTransactionsComponent.prototype.isRefundRemissionBtnEnable;
|
|
1226
|
+
/** @type {?} */
|
|
1227
|
+
CaseTransactionsComponent.prototype.allowedRolesToAccessRefund;
|
|
1228
|
+
/** @type {?} */
|
|
1229
|
+
CaseTransactionsComponent.prototype.isFromServiceRequestPage;
|
|
1230
|
+
/** @type {?} */
|
|
1231
|
+
CaseTransactionsComponent.prototype.navigationpage;
|
|
1232
|
+
/** @type {?} */
|
|
1233
|
+
CaseTransactionsComponent.prototype.remissionFeeAmt;
|
|
1234
|
+
/** @type {?} */
|
|
1235
|
+
CaseTransactionsComponent.prototype.check4AllowedRoles2AccessRefund;
|
|
1236
|
+
/** @type {?} */
|
|
1237
|
+
CaseTransactionsComponent.prototype.allowFurtherAccessAfter4Days;
|
|
1238
|
+
/**
|
|
1239
|
+
* @type {?}
|
|
1240
|
+
* @private
|
|
1241
|
+
*/
|
|
1242
|
+
CaseTransactionsComponent.prototype.router;
|
|
1243
|
+
/**
|
|
1244
|
+
* @type {?}
|
|
1245
|
+
* @private
|
|
1246
|
+
*/
|
|
1247
|
+
CaseTransactionsComponent.prototype.paymentViewService;
|
|
1248
|
+
/**
|
|
1249
|
+
* @type {?}
|
|
1250
|
+
* @private
|
|
1251
|
+
*/
|
|
1252
|
+
CaseTransactionsComponent.prototype.bulkScaningPaymentService;
|
|
1253
|
+
/**
|
|
1254
|
+
* @type {?}
|
|
1255
|
+
* @private
|
|
1256
|
+
*/
|
|
1257
|
+
CaseTransactionsComponent.prototype.caseTransactionsService;
|
|
1258
|
+
/**
|
|
1259
|
+
* @type {?}
|
|
1260
|
+
* @private
|
|
1261
|
+
*/
|
|
686
1262
|
CaseTransactionsComponent.prototype.paymentLibComponent;
|
|
1263
|
+
/**
|
|
1264
|
+
* @type {?}
|
|
1265
|
+
* @private
|
|
1266
|
+
*/
|
|
1267
|
+
CaseTransactionsComponent.prototype.OrderslistService;
|
|
1268
|
+
/* Skipping unhandled member: ;*/
|
|
1269
|
+
/* Skipping unhandled member: ;*/
|
|
687
1270
|
}
|
|
688
|
-
|
|
689
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10cmFuc2FjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFaEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDbkcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFJdEYsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBdVB2QyxNQUFNOzs7Ozs7OztJQTZCSixZQUFvQixNQUFjLEVBQzFCLG9CQUNBLDJCQUNBLHlCQUNBO1FBSlksV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUMxQix1QkFBa0IsR0FBbEIsa0JBQWtCO1FBQ2xCLDhCQUF5QixHQUF6Qix5QkFBeUI7UUFDekIsNEJBQXVCLEdBQXZCLHVCQUF1QjtRQUN2Qix3QkFBbUIsR0FBbkIsbUJBQW1COzZCQTdCSixFQUFFO3dCQUNGLEVBQUU7MkJBQ0MsRUFBRTsyQkFDRixFQUFFOzBCQUNELEVBQUU7b0JBQ2QsRUFBRTtrQ0FTYSxJQUFJO2lDQUNMLEtBQUs7MkNBQ0ssS0FBSztxQ0FFWCxJQUFJOzBCQUV4QixNQUFNO21DQUNZLEtBQUs7MkJBRWQsQ0FBQztLQU04Qjs7OztJQUVyRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDO1FBQzlELEVBQUUsQ0FBQSxDQUFD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LEVBQUUsRUFBRTtZQUNmLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDMUIsRUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztTQUNwQyxDQUNGLENBQUM7S0FDSDs7Ozs7SUFFRCxxQkFBcUIsQ0FBQyxTQUFjO1FBQ2xDLE1BQU0sQ0FBQyxPQUFPLFNBQVMsS0FBSyxXQUFXLENBQUM7S0FDekM7OztZQTloQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBZ1BYO2dCQUNDLE1BQU0sRUFBRSxDQUFDLHE4Q0FBcThDLENBQUM7YUFDaDlDOzs7O1lBdFBPLE1BQU07WUFKTCxrQkFBa0I7WUFEbEIseUJBQXlCO1lBRDFCLHVCQUF1QjtZQUZ2QixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYXltZW50TGliQ29tcG9uZW50fSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHtDYXNlVHJhbnNhY3Rpb25zU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FzZS10cmFuc2FjdGlvbnMvY2FzZS10cmFuc2FjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnVsay1zY2FuaW5nLXBheW1lbnQvYnVsay1zY2FuaW5nLXBheW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtJRmVlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtJUGF5bWVudH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudCc7XG5pbXBvcnQge0lSZW1pc3Npb259IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktY2FzZS10cmFuc2FjdGlvbnMnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJnb3Z1ay13aWR0aC1jb250YWluZXJcIj5cblxuICA8bWFpbiBjbGFzcz1cImdvdnVrLW1haW4td3JhcHBlclwiPlxuICAgIDxkaXYgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbidcIj5cblxuXG4gICAgPGRpdiAgICpuZ0lmPVwidGFrZVBheW1lbnRcIiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkc1wiPlxuICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLXhsXCI+Q2FzZSB0cmFuc2FjdGlvbnM8L2gxPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICAgKm5nSWY9XCJ0YWtlUGF5bWVudFwiIGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgIDxkaXYgKm5nSWY9JyFpc0V4Y2VwdGlvblJlY29yZCcgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tNiBnb3Z1ay0hLXBhZGRpbmctdG9wLTZcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5DQ0QgcmVmZXJlbmNlOjwvaDM+XG4gICAgICAgIDxzcGFuPiB7eyBjY2RDYXNlTnVtYmVyIHwgY2NkSHlwaGVucyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSdpc0V4Y2VwdGlvblJlY29yZCcgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tNiBnb3Z1ay0hLXBhZGRpbmctdG9wLTZcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5FeGNlcHRpb24gcmVmZXJlbmNlOjwvaDM+XG4gICAgICAgIDxzcGFuPiB7eyBjY2RDYXNlTnVtYmVyIHwgY2NkSHlwaGVucyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbCBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTNcIj5cbiAgICAgICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1icmVhayBnb3Z1ay1zZWN0aW9uLWJyZWFrLS12aXNpYmxlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+VG90YWwgcGF5bWVudHM8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Ub3RhbCByZW1pc3Npb25zPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QW1vdW50IGR1ZTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgZ292dWstdGFibGVfX2hlYWRlci0tY3VzdG9tXCIgc2NvcGU9XCJjb2xcIiAqbmdJZj1cImlzQnVsa1NjYW5FbmFibGVcIj5VbmFsbG9jYXRlZCBwYXltZW50czwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRvdGFscGF5bWVudHMgZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IHRvdGFsUGF5bWVudHMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgdG90YWxSZW1pc3Npb25zIHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IGNsQW1vdW50RHVlIHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGNhc2UtdHJhbnNhY3Rpb25fX2NvbG9yXCIgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlXCI+e3t1bnByb2Nlc3NlZFJlY29yZENvdW50fX08L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tNlwiICpuZ0lmPVwidGFrZVBheW1lbnRcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBZGRGZWVCdG5FbmFibGVkXCJcbiAgICAgICAgICBbbmdDbGFzc109JyFpc0FkZEZlZUJ0bkVuYWJsZWQgPyBcImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay1idXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIic+XG4gICAgICAgICAgVGFrZSB0ZWxlcGhvbnkgcGF5bWVudFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgPGRpdiAqbmdJZj1cInRha2VQYXltZW50XCI+XG4gICAgICAgICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1yZWNvcmRzLWJyZWFrXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxjY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHNcbiAgICAgICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZVwiXG4gICAgICBbSVNfQlVUVE9OX0VOQUJMRV09XCJ0YWtlUGF5bWVudFwiXG4gICAgICBbRkVFX1JFQ09SRFNfRVhJU1RTXT1cImlzQW55RmVlR3JvdXBBdmlsYWJsZVwiXG4gICAgICBbUEFZTUVOVFJFRl09XCJwYXltZW50UmVmXCJcbiAgICAgIChnZXRVbnByb2Nlc3NlZEZlZUNvdW50KSA9IFwiZ2V0VW5wcm9jZXNzZWRGZWVDb3VudCgkZXZlbnQpXCJcbiAgICAgIChzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQpID0gXCJzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQoJGV2ZW50KVwiPlxuICAgICAgPC9jY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHM+XG4gICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLXJlY29yZHMtYnJlYWtcIj5cbiAgICAgIDxjY3BheS1hcHAtcHJvY2Vzc2VkLXBheW1lbnRzXG4gICAgICAqbmdJZj1cInRha2VQYXltZW50XCIgW05PTlBBWU1FTlRTXT1cIm5vblBheW1lbnRzXCJcbiAgICAgIChnb1RvUGF5bWVudFZpZXdDb21wb25lbnQpID0gXCJnb1RvUGF5bWVudFZpZXdDb21wb25lbnQoJGV2ZW50KVwiXHQ+XG4gICAgICA8L2NjcGF5LWFwcC1wcm9jZXNzZWQtcGF5bWVudHM+XG4gICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLXJlY29yZHMtYnJlYWtcIj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICAqbmdJZj1cInRha2VQYXltZW50XCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiPkZlZXM8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNvZGU8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EZXNjcmlwdGlvbjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlZvbHVtZTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkZlZSBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DYWxjdWxhdGVkIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudCBkdWU8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BY3Rpb248L3RkPlxuXG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXBzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgZmVlIG9mIGZlZXM7XCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj5cdHt7ZmVlLmNvZGV9fSA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tmZWUuZGVzY3JpcHRpb259fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57e2ZlZS52b2x1bWU/IGZlZS52b2x1bWUgOiAnLSd9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyBmZWUuZmVlX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7ZmVlLmNhbGN1bGF0ZWRfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+IHt7Y2FsY3VsYXRlQW1vdW50RHVlKGZlZSkgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319IDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj5cbiAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiY29uZmlybVJlbW92ZUZlZShmZWUuaWQpXCIgW25nQ2xhc3NdPSchaXNDaGVja0Ftb3VudGR1ZUV4aXN0KGZlZS5hbW91bnRfZHVlKSA/IFwiZGlzYWJsZS1saW5rXCIgOiBcIlwiJz5SZW1vdmU8L2E+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicGF5bWVudEdyb3Vwcz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiA+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiN1wiPk5vIGZlZXMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkZXRhaWxzICpuZ0lmPVwiYWxsUGF5bWVudHM/Lmxlbmd0aCA+IDAgfHwgcmVtaXNzaW9ucz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHN1bW1hcnkgY2xhc3M9XCJnb3Z1ay1oaWRldGV4dFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5XCI+UGF5bWVudHMgYW5kIHJlbWlzc2lvbnM8L3NwYW4+XG4gICAgICAgICAgICA8L3N1bW1hcnk+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWJvcmRlci1uYXJyb3dcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gcGF5bWVudHMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5QYXltZW50IHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DaGFubmVsPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5NZXRob2Q8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QWxsb2NhdGlvbiBzdGF0dXM8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgc3RhdHVzPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJhbGxQYXltZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICAqbmdGb3I9XCJsZXQgcGF5bWVudCBvZiBhbGxQYXltZW50c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50LnJlZmVyZW5jZSwgcGF5bWVudC5tZXRob2QpXCI+e3sgcGF5bWVudC5yZWZlcmVuY2UgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5IEhIOm1tOnNzJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2hhbm5lbCBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmNoYW5uZWwgfCBsb3dlcmNhc2UgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGNhcGl0YWxpemUgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5tZXRob2QgfCBsb3dlcmNhc2V9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5hbW91bnQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPiB7e2dldEFsbG9jYXRpb25TdGF0dXMocGF5bWVudCl9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5zdGF0dXMgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cImFsbFBheW1lbnRzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgY29sc3Bhbj1cIjZcIj5ObyBwYXltZW50cyByZWNvcmRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIHJlbWlzc2lvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgY29kZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVtaXNzaW9uIHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gY29kZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVtaXNzaW9uIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicmVtaXNzaW9ucz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0Zvcj1cImxldCByZW1pc3Npb24gb2YgcmVtaXNzaW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5mZWVfY29kZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLnJlbWlzc2lvbl9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5kYXRlX2NyZWF0ZWQgfCBkYXRlOidkZCBNTU0geXl5eSBISDptbTpzcycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5od2ZfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24uaHdmX2Ftb3VudCB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwicmVtaXNzaW9ucz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI1XCI+Tm8gcmVtaXNzaW9ucyByZWNvcmRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGV0YWlscz5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIiF0YWtlUGF5bWVudFwiIGNsYXNzPVwiZ292dWstZ3JpZC1yb3cgZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlByb2Nlc3NlZCBwYXltZW50czwvc3Bhbj5cbiAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UGF5bWVudCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRhdGUgdXBkYXRlZDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DaGFubmVsPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPk1ldGhvZDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QWxsb2NhdGlvbiBzdGF0dXM8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+U3RhdHVzPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJhbGxQYXltZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIGFsbFBheW1lbnRzXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj5cbiAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50LnJlZmVyZW5jZSwgcGF5bWVudC5tZXRob2QpXCI+e3sgcGF5bWVudC5yZWZlcmVuY2UgfX08L2E+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5kYXRlX2NyZWF0ZWQgfCBkYXRlOidkZCBNTU0geXl5eSBISDptbTpzcycgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5kYXRlX3VwZGF0ZWQgfCBkYXRlOidkZCBNTU0geXl5eSBISDptbTpzcycgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2hhbm5lbCBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmNoYW5uZWwgfCBsb3dlcmNhc2UgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY2FwaXRhbGl6ZSB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50Lm1ldGhvZCB8IGxvd2VyY2FzZX19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuYW1vdW50IH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPiB7e2dldEFsbG9jYXRpb25TdGF0dXMocGF5bWVudCl9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LnN0YXR1cyB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwiYWxsUGF5bWVudHM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI4XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuPC9kaXY+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbidcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICA8c3Ryb25nIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X190ZXh0XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fYXNzaXN0aXZlXCI+V2FybmluZzwvc3Bhbj5cbiAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBmZWU/XG4gICAgPC9zdHJvbmc+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZ292dWstYnV0dG9uLWdyYlwiPlxuICAgIDxmb3JtIG5vdmFsaWRhdGU+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWxSZW1vdmFsKClcIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlbW92ZUJ0bkRpc2FibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT0naXNSZW1vdmVCdG5EaXNhYmxlZCA/IFwiYnV0dG9uIGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJidXR0b24gZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJ1xuICAgICAgKGNsaWNrKT1cInJlbW92ZUZlZShmZWVJZClcIj5cbiAgICAgICAgUmVtb3ZlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4gIDwvbWFpbj5cbmAsXG4gIHN0eWxlczogW2AuZ292dWstZ3JpZC1jb2x1bW4tZnVsbC0tZ3J7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToxMHB4fS5kaXNhYmxle3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpkZWZhdWx0O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpncmV5O3BvaW50ZXItZXZlbnRzOm5vbmV9LmdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHN7bWFyZ2luOjIwcHggMH0uZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50cz4uZ292dWstZ3JpZC1jb2x1bW4tZnVsbHtwYWRkaW5nOjB9LmdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHMtY29sMXttYXJnaW4tYm90dG9tOjEwcHh9LmdvdnVrLWluc2V0LXRleHRfX25vLWJvcmRlcntib3JkZXItbGVmdDowfS5nb3Z1ay1oaWRldGV4dHtmb250LXNpemU6MjJweDtwYWRkaW5nLWJvdHRvbToxMHB4fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS5jaGFubmVsOjpmaXJzdC1sZXR0ZXJ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5nb3Z1ay1oZWFkaW5nLXhse2ZvbnQtc2l6ZTo0OHB4O21hcmdpbi1ib3R0b206MXB4fS5nb3Z1ay1zZWN0aW9uLWJyZWFrLS12aXNpYmxle2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMwMDB9LnRvdGFscGF5bWVudHMuZ292dWstdGFibGVfX3Jvd3tib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDAwIWltcG9ydGFudH0uZ292dWstaW5zZXQtdGV4dHttYXJnaW4tbGVmdDoxZW19LmdvdnVrLWJ1dHRvbntmb250LXNpemU6MTlweH0uZ292dWstdGFibGVfX2NlbGwuZ292dWstdGFibGVfX2NlbGwtLWNvbDYuZ292dWstdGFibGVfX2N1c3RvbS0tY29sNiwuZ3JvdXBhbW91bnQuZ292dWstdGFibGVfX2hlYWRlcnt0ZXh0LWFsaWduOnJpZ2h0fS5mZWVjbGFzc3twYWRkaW5nLWxlZnQ6LjdlbX0uYWxpZ24tY2VudGVye3RleHQtYWxpZ246Y2VudGVyfWRldGFpbHMgc3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX0uY2FzZS10cmFuc2FjdGlvbl9fY29sb3J7Y29sb3I6I2E3MTQxNDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGl0YWxpemU6OmZpcnN0LWxldHRlcnt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmdvdnVrLWluc2V0LXRleHRfX25vLWxlZnQtbWFyZ2lue21hcmdpbi1sZWZ0OjA7cGFkZGluZy1sZWZ0OjB9LndoaXRlc3BhY2UtaW5oZXJpdHt3aGl0ZS1zcGFjZTppbmhlcml0IWltcG9ydGFudH0uZ292dWstc2VjdGlvbi1yZWNvcmRzLWJyZWFre21hcmdpbjoxMHB4O2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMwMDAhaW1wb3J0YW50fS5leGlzaXRuZy1mZWVze21hcmdpbi1sZWZ0OjEycHh9LmFkZC10ZWxlcGhvbnktcGF5bWVudHttYXJnaW4tdG9wOi0yZW07bWFyZ2luLWxlZnQ6LTJlbX0uZ292dWstdGFibGVfX2hlYWRlci0tY3VzdG9te3RleHQtYWxpZ246Y2VudGVyfS5kaXNhYmxlLWxpbmt7Y3Vyc29yOmRlZmF1bHQ7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjojOGU4YzhjfWBdXG59KVxuZXhwb3J0IGNsYXNzIENhc2VUcmFuc2FjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB0YWtlUGF5bWVudDogYm9vbGVhbjtcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBleGNSZWZlcmVuY2U6IHN0cmluZztcbiAgcGF5bWVudEdyb3VwczogYW55W10gPSBbXTtcbiAgcGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgbm9uUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgYWxsUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgcmVtaXNzaW9uczogSVJlbWlzc2lvbltdID0gW107XG4gIGZlZXM6IElGZWVbXSA9IFtdO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgdG90YWxGZWVzOiBudW1iZXI7XG4gIHRvdGFsUGF5bWVudHM6IG51bWJlcjtcbiAgdG90YWxOb25PZmZQYXltZW50czogbnVtYmVyO1xuICB0b3RhbFJlbWlzc2lvbnM6IG51bWJlcjtcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZztcbiAgZGNuTnVtYmVyOiBzdHJpbmc7XG4gIHBheW1lbnRSZWY6IHN0cmluZztcbiAgaXNBZGRGZWVCdG5FbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNFeGNlcHRpb25SZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGV4Y2VwdGlvblJlY29yZFJlZmVyZW5jZTogc3RyaW5nO1xuICBpc0FueUZlZUdyb3VwQXZpbGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0J1bGtTY2FuRW5hYmxlO1xuICB2aWV3U3RhdHVzID0gJ21haW4nO1xuICBpc1JlbW92ZUJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGZlZUlkOklGZWU7XG4gIGNsQW1vdW50RHVlOiBudW1iZXIgPSAwO1xuICB1bnByb2Nlc3NlZFJlY29yZENvdW50OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSxcbiAgcHJpdmF0ZSBjYXNlVHJhbnNhY3Rpb25zU2VydmljZTogQ2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UsXG4gIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID09PSAnJykge1xuICAgICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgfVxuICAgIHRoaXMuZXhjUmVmZXJlbmNlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgdGhpcy50YWtlUGF5bWVudCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVDtcbiAgICB0aGlzLmlzQnVsa1NjYW5FbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRTtcblxuICAgIHRoaXMuY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UuZ2V0UGF5bWVudEdyb3Vwcyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgIHBheW1lbnRHcm91cHMgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMgPSBwYXltZW50R3JvdXBzWydwYXltZW50X2dyb3VwcyddO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUFtb3VudHMoKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVSZWZ1bmRBbW91bnQoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3I7XG4gICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRENOX05VTUJFUjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTi50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRoaXMuY2hlY2tGb3JFeGNlcHRpb25SZWNvcmQoKTtcbiAgfVxuXG4gIHNldERlZmF1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMudG90YWxQYXltZW50cyA9IDAuMDA7XG4gICAgdGhpcy50b3RhbFJlbWlzc2lvbnMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxOb25PZmZQYXltZW50cyA9IDAuMDA7XG59XG5nZXRBbGxvY2F0aW9uU3RhdHVzKHBheW1lbnRzOiBhbnkpe1xuXG4gIGxldCBwYXltZW50QWxsb2NhdGlvbiA9IHBheW1lbnRzLnBheW1lbnRfYWxsb2NhdGlvbixcbiAgICAgIGlzQWxsb2NhdGlvblN0YXR1c0V4aXN0ID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4wO1xuICByZXR1cm4gaXNBbGxvY2F0aW9uU3RhdHVzRXhpc3QgPyBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA6ICctJztcbiAgLy9yZXR1cm4gXCItXCI7XG5cbn1cblxuY2hlY2tGb3JFeGNlcHRpb25SZWNvcmQoKTogdm9pZCB7XG4gIGlmKHRoaXMucGF5bWVudEdyb3Vwcy5sZW5ndGggPT09IDAgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnY2Nkb3JleGNlcHRpb24nKSB7XG4gICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeUNDRCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgIHJlY29yZERhdGEgPT4ge1xuICAgICAgIGlmKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPjApIHtcbiAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVjb3JkRGF0YVsnZGF0YSddICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UubGVuZ3RoID4gMCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHJlY29yZERhdGFbJ2RhdGEnXS5jY2RfcmVmZXJlbmNlID4wKSB7XG4gICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBpZiAodGhpcy5wYXltZW50R3JvdXBzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdkY24nKSB7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVIubGVuZ3RoID4gMCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRVhDX1JFRkVSRU5DRS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVIubGVuZ3RoID09PSAwICYmIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5FWENfUkVGRVJFTkNFLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSB0cnVlO1xuICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAodGhpcy5wYXltZW50R3JvdXBzLmxlbmd0aCA+IDApXG4gIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKHBheW1lbnRHcm91cCA9PiB7XG4gICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgdGhpcy5ub25QYXltZW50cyA9IHBheW1lbnRHcm91cC5wYXltZW50cztcbiAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICBpZiAocGF5bWVudC5jYXNlX3JlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHBheW1lbnQuY2FzZV9yZWZlcmVuY2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4gIGNhbGN1bGF0ZUFtb3VudHMoKTogdm9pZCB7XG4gICAgbGV0IHBheW1lbnRzVG90YWwgPSAwLjAwLFxuICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwLFxuICAgICBub25PZmZMaW5lUGF5bWVudCA9IDAuMDA7XG5cbiAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICBpZihmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICAgICAgICBsZXQgYSA9IGZlZS5hbW91bnRfZHVlID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgYiA9IGZlZS5hbW91bnRfZHVlIDwgMDtcbiAgICAgICAgICAgIHRoaXMuY2xBbW91bnREdWUgPSBhID8gdGhpcy5jbEFtb3VudER1ZSArIGZlZS5uZXRfYW1vdW50IDogYiA/IHRoaXMuY2xBbW91bnREdWUgKyAwIDogdGhpcy5jbEFtb3VudER1ZSArIGZlZS5hbW91bnRfZHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmZWVbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10gPSBwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ107XG4gICAgICAgICAgdGhpcy5mZWVzLnB1c2goZmVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgIGxldCBhbGxvY2F0aW9uTGVuID0gcGF5bWVudC5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgICAgICBpZihhbGxvY2F0aW9uTGVuLmxlbmd0aCA9PT0gMCB8fCBhbGxvY2F0aW9uTGVuLmxlbmd0aCA+IDAgJiYgYWxsb2NhdGlvbkxlblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0nQWxsb2NhdGVkJykge1xuICAgICAgICAgICAgICBub25PZmZMaW5lUGF5bWVudCA9IG5vbk9mZkxpbmVQYXltZW50ICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXG4gICAgICAgICAgdGhpcy5hbGxQYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxQYXltZW50cyA9IHBheW1lbnRzVG90YWw7XG4gICAgICB0aGlzLnRvdGFsTm9uT2ZmUGF5bWVudHMgPSBub25PZmZMaW5lUGF5bWVudDtcblxuICAgICAgaWYgKHBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNpc29uID0+IHtcbiAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSByZW1pc3Npb25zVG90YWwgKyByZW1pc2lzb24uaHdmX2Ftb3VudDtcbiAgICAgICAgICB0aGlzLnJlbWlzc2lvbnMucHVzaChyZW1pc2lzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxSZW1pc3Npb25zID0gcmVtaXNzaW9uc1RvdGFsO1xuICAgIH0pO1xuXG4gIH1cbiAgY2FsY3VsYXRlUmVmdW5kQW1vdW50KCkge1xuICAgIGxldCBpc05ld1BheW1lbnRHcm91cCA9IGZhbHNlLFxuICAgICAgIGlzT2xkUGF5bWVudEdyb3VwID0gZmFsc2U7XG5cbiAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgbGV0IGdycE91dHN0YW5kaW5nQW1vdW50ID0gMC4wMCxcbiAgICAgICAgZmVlc1RvdGFsID0gMC4wMCxcbiAgICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IDAuMDA7XG4gICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcbiAgICAgICAgICBpZihmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICAgICAgICBpc05ld1BheW1lbnRHcm91cCA9IHRydWU7XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgaXNPbGRQYXltZW50R3JvdXAgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNzaW9uID0+IHtcbiAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSByZW1pc3Npb25zVG90YWwgKyByZW1pc3Npb24uaHdmX2Ftb3VudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAgIGdycE91dHN0YW5kaW5nQW1vdW50ID0gKGZlZXNUb3RhbCAtIHJlbWlzc2lvbnNUb3RhbCkgLSBwYXltZW50c1RvdGFsO1xuICAgICAgICBpZihncnBPdXRzdGFuZGluZ0Ftb3VudCA+IDAgJiYgaXNOZXdQYXltZW50R3JvdXApIHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wYXltZW50UmVmID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmKGdycE91dHN0YW5kaW5nQW1vdW50IDw9IDAgJiYgaXNOZXdQYXltZW50R3JvdXApIHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYoKCFpc05ld1BheW1lbnRHcm91cCAmJiBpc09sZFBheW1lbnRHcm91cCkgfHwgKCFpc05ld1BheW1lbnRHcm91cCAmJiAhaXNPbGRQYXltZW50R3JvdXApKSB7XG4gICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBnZXRHcm91cE91dHN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5jYWxjdWxhdGVPdXRTdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXApOztcbiAgfVxuXG4gIHJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmKCF0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuaXNCdWxrU2NhbkVuYWJsZSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2ZlZS1zZWFyY2g/c2VsZWN0ZWRPcHRpb249JHt0aGlzLnNlbGVjdGVkT3B0aW9ufSZjY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfSR7dXJsfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuID0gbnVsbDtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnRSZWY7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnZmVlLXN1bW1hcnknO1xuICAgIH1cbiAgfVxuXG4gIHJlZGlyZWN0VG9SZXBvcnRzUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcmVwb3J0cz9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9YCk7XG4gIH1cbiAgbG9hZEZlZVN1bW1hcnlQYWdlKHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY24gPSBudWxsO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgfVxuXG4gIGdvVG9QYXltZW50Vmlld0NvbXBvbmVudChwYXltZW50R3JvdXA6IGFueSkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50TWV0aG9kID0gcGF5bWVudEdyb3VwLnBheW1lbnRNZXRob2Q7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudFJlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGF5bWVudC12aWV3JztcbiAgfVxuXG4gIGdvVG9QYXllbWVudFZpZXcocGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudE1ldGhvZDogc3RyaW5nKSB7XG4gICAgdGhpcy5nb1RvUGF5bWVudFZpZXdDb21wb25lbnQoe3BheW1lbnRHcm91cFJlZmVyZW5jZSwgcGF5bWVudFJlZmVyZW5jZSwgcGF5bWVudE1ldGhvZH0pO1xuICB9XG5cbiAgc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KHVucHJvY2Vzc2VkUmVjb3JkSWQ6IHN0cmluZykge1xuICAgIGlmICggdW5wcm9jZXNzZWRSZWNvcmRJZCApIHtcbiAgICAgIHRoaXMuaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0VW5wcm9jZXNzZWRGZWVDb3VudCh1blByb2Nlc3NlZFJlY29yZENvdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnVucHJvY2Vzc2VkUmVjb3JkQ291bnQgPSB1blByb2Nlc3NlZFJlY29yZENvdW50O1xuICB9XG5cbiAgY2FsY3VsYXRlQW1vdW50RHVlKGZlZTogSUZlZSkge1xuXG4gICAgaWYoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIGZlZS5hbW91bnRfZHVlID8gZmVlLmFtb3VudF9kdWUgOiBmZWUubmV0X2Ftb3VudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiMC4wMFwiO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1SZW1vdmVGZWUoZmVlOiBJRmVlKXtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJztcbiAgfVxuICBjYW5jZWxSZW1vdmFsKCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgfVxuICByZW1vdmVGZWUoZmVlOiBhbnkpe1xuICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZGVsZXRlRmVlRnJvbVBheW1lbnRHcm91cChmZWUpLnN1YnNjcmliZShcbiAgICAgIChzdWNjZXNzOiBhbnkpID0+IHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaXNDaGVja0Ftb3VudGR1ZUV4aXN0KGFtb3VudER1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhbW91bnREdWUgPT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iXX0=
|
|
1271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10cmFuc2FjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWxFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBTXRFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7TUFDOUIsY0FBYyxHQUFHLHVCQUF1QjtBQU85QyxNQUFNLE9BQU8seUJBQXlCOzs7Ozs7Ozs7SUEyRXBDLFlBQW9CLE1BQWMsRUFDeEIsa0JBQXNDLEVBQ3RDLHlCQUFvRCxFQUNwRCx1QkFBZ0QsRUFDaEQsbUJBQXdDLEVBQ3hDLGlCQUFvQztRQUwxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUNwRCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTFFOUMsa0JBQWEsR0FB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QzdDLHNEQUEwQjs7SUFDMUIsNkNBQWlCOztJQUNqQixnREFBNEM7O0lBQzVDLDRDQUFrQjs7SUFDbEIsaURBQTRCOztJQUM1QixnREFBMEI7O0lBRzFCLGdEQUF3Qjs7SUFFeEIseURBQXNDOztJQUN0QywwREFBa0M7O0lBQ2xDLG1EQUEwQzs7SUFDMUMsK0NBQXVCOztJQUN2Qiw2Q0FBaUI7O0lBQ2pCLGdEQUFvQjs7SUFDcEIsK0NBQW1COztJQUNuQixpREFBbUI7O0lBQ25CLGtEQUFzQjs7SUFDdEIsd0RBQTRCOztJQUM1QixzREFBMkI7O0lBQzNCLG1EQUE4Qjs7SUFDOUIsd0RBQW1DOztJQUNuQyx1REFBa0M7O0lBQ2xDLHlEQUFvQzs7SUFDcEMsOENBQW1COztJQUNuQix5Q0FBYzs7SUFDZCwwQ0FBdUI7O0lBQ3ZCLDJEQUF3Qzs7SUFDeEMsNkRBQTBDOztJQUMxQywrREFBNEM7O0lBQzVDLCtEQUE2RTs7SUFDN0UsNkRBQWtDOztJQUNsQyxtREFBdUI7O0lBQ3ZCLG9EQUF3Qjs7SUFpdEJ4QixvRUFJQzs7SUFFRCxpRUFNQzs7Ozs7SUE1dEJXLDJDQUFzQjs7Ozs7SUFDaEMsdURBQThDOzs7OztJQUM5Qyw4REFBNEQ7Ozs7O0lBQzVELDREQUF3RDs7Ozs7SUFDeEQsd0RBQWdEOzs7OztJQUNoRCxzREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVBheW1lbnRHcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5pbXBvcnQgeyBDYXNlVHJhbnNhY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IElGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHsgSVBheW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50JztcbmltcG9ydCB7IElSZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZW1pc3Npb24nO1xuaW1wb3J0IHsgSVBheW1lbnRWaWV3IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudFZpZXcnO1xuaW1wb3J0IHsgSU9yZGVyUmVmZXJlbmNlRmVlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JT3JkZXJSZWZlcmVuY2VGZWUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAqIGFzIGxzIGZyb20gXCJsb2NhbC1zdG9yYWdlXCI7XG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1jYXNlLXRyYW5zYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXNlVHJhbnNhY3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdMT0dHRURJTlVTRVJST0xFUycpIExPR0dFRElOVVNFUlJPTEVTOiBzdHJpbmdbXTtcbiAgdGFrZVBheW1lbnQ6IGJvb2xlYW47XG4gIHNlcnZpY2VyZXF1ZXN0OiBzdHJpbmc7XG4gIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgZXhjUmVmZXJlbmNlOiBzdHJpbmc7XG4gIHBheW1lbnRHcm91cHM6IGFueVtdID0gW107XG4gIHBheW1lbnRzOiBJUGF5bWVudFtdID0gW107XG4gIG5vblBheW1lbnRzOiBJUGF5bWVudFtdID0gW107XG4gIGFsbFBheW1lbnRzOiBJUGF5bWVudFtdID0gW107XG4gIHJlbWlzc2lvbnM6IElSZW1pc3Npb25bXSA9IFtdO1xuICBmZWVzOiBJRmVlW10gPSBbXTtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIHRvdGFsRmVlczogbnVtYmVyO1xuICB0b3RhbFBheW1lbnRzOiBudW1iZXI7XG4gIHRvdGFsTm9uT2ZmUGF5bWVudHM6IG51bWJlcjtcbiAgdG90YWxSZW1pc3Npb25zOiBudW1iZXI7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGRjbk51bWJlcjogc3RyaW5nO1xuICBwYXltZW50UmVmOiBzdHJpbmc7XG4gIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgaXNOZXdQY2lwYWxPZmY6IGJvb2xlYW47XG4gIGlzUmVmdW5kUmVtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBpc0FkZEZlZUJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0V4Y2VwdGlvblJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXhjZXB0aW9uUmVjb3JkUmVmZXJlbmNlOiBzdHJpbmc7XG4gIGlzQW55RmVlR3JvdXBBdmlsYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0J1bGtTY2FuRW5hYmxlO1xuICBpc1JlbWlzc2lvbnNNYXRjaDogYm9vbGVhbjtcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgaXNSZW1vdmVCdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBmZWVJZDogSUZlZTtcbiAgY2xBbW91bnREdWU6IG51bWJlciA9IDA7XG4gIHVucHJvY2Vzc2VkUmVjb3JkQ291bnQ6IG51bWJlcjtcbiAgaXNGZWVSZWNvcmRzRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIHRvdGFsUmVmdW5kQW1vdW50OiBOdW1iZXI7XG4gIGNhc2VUeXBlOiBTdHJpbmc7XG4gIGxzQ2NkTnVtYmVyOiBhbnkgPSBscy5nZXQ8YW55PignY2NkTnVtYmVyJyk7XG4gIHBheW1lbnQ6IElQYXltZW50O1xuICBwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXA7XG4gIHBheW1lbnRWaWV3OiBJUGF5bWVudFZpZXc7XG5cbiAgLy9PcmRlciBjaGFuZ2VzXG4gIG9yZGVyRGV0YWlsOiBhbnlbXSA9IFtdO1xuXG4gIGlzQWRkUmVtaXNzaW9uRW5hYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIG9yZGVyUmVtaXNzaW9uRGV0YWlsczogYW55W10gPSBbXTtcbiAgb3JkZXJMZXZlbEZlZXM6IElPcmRlclJlZmVyZW5jZUZlZVtdID0gW107XG4gIGNwb0RldGFpbHM6IGFueSA9IG51bGw7XG4gIG9yZGVyUmVmOiBzdHJpbmc7XG4gIG9yZGVyU3RhdHVzOiBzdHJpbmc7XG4gIG9yZGVyUGFydHk6IHN0cmluZztcbiAgb3JkZXJDcmVhdGVkOiBEYXRlO1xuICBvcmRlckNDREV2ZW50OiBzdHJpbmc7XG4gIHNlcnZpdmVSZXF1ZXN0VmFsdWU6IHN0cmluZztcbiAgb3JkZXJBZGRCdG5FbmFibGU6IGJvb2xlYW47XG4gIG9yZGVyRmVlc1RvdGFsOiBudW1iZXIgPSAwLjAwO1xuICBvcmRlclJlbWlzc2lvblRvdGFsOiBudW1iZXIgPSAwLjAwO1xuICBvcmRlclRvdGFsUGF5bWVudHM6IG51bWJlciA9IDAuMDA7XG4gIG9yZGVyUGVuZGluZ1BheW1lbnRzOiBudW1iZXIgPSAwLjAwO1xuICBpc0NQT0Rvd246IGJvb2xlYW47XG4gIHRlc3Q6IGJvb2xlYW47XG4gIGlzUEJBOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSXNzdWVSZWZ1bmZCdG5FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBZGRSZW1pc3Npb25CdG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kID0gWydwYXltZW50cy1yZWZ1bmQtYXBwcm92ZXInLCAncGF5bWVudHMtcmVmdW5kJ107XG4gIGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZTogYm9vbGVhbjtcbiAgbmF2aWdhdGlvbnBhZ2U6IHN0cmluZztcbiAgcmVtaXNzaW9uRmVlQW10OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2U6IEJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYXNlVHJhbnNhY3Rpb25zU2VydmljZTogQ2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9ucGFnZSAgPSAnJztcbiAgICBpZih0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldHBheW1lbnRQYWdlVmlldygpICE9PSBudWxsKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldHBheW1lbnRQYWdlVmlldygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5wYXltZW50VmlldyA9IGRhdGEpO1xuICAgIH1cbiAgICBpZih0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG5hdmlnYXRpb25QYWdlVmFsdWUoKSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRuYXZpZ2F0aW9uUGFnZVZhbHVlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm5hdmlnYXRpb25wYWdlID0gZGF0YSk7XG4gICAgfVxuICAgIFxuICAgIFxuICAgIGlmICh0aGlzLnBheW1lbnRWaWV3ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5wYXltZW50VmlldyAhPT0gbnVsbCAmJiB0aGlzLnBheW1lbnRWaWV3LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5uYXZpZ2F0aW9ucGFnZSA9PT0gJ3BheW1lbnRkZXRhaWxzcGFnZScpIHtcbiAgICAgIHRoaXMuZ29Ub1BheWVtZW50Vmlldyh0aGlzLnBheW1lbnRWaWV3LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLCB0aGlzLnBheW1lbnRWaWV3LnJlZmVyZW5jZSwgdGhpcy5wYXltZW50Vmlldy5tZXRob2QpO1xuICAgIH1cbiAgICB0aGlzLmlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVI7XG4gICAgdGhpcy5jYXNlVHlwZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQVNFVFlQRTtcbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUiA9PT0gJycpIHtcbiAgICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5FWENfUkVGRVJFTkNFO1xuICAgIH1cbiAgICB0aGlzLmV4Y1JlZmVyZW5jZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5FWENfUkVGRVJFTkNFO1xuICAgIHRoaXMudGFrZVBheW1lbnQgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQ7XG4gICAgdGhpcy5zZXJ2aWNlcmVxdWVzdCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVDtcbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuc2Vydml2ZVJlcXVlc3RWYWx1ZSA9ICd0cnVlJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXJ2aXZlUmVxdWVzdFZhbHVlID0gJ2ZhbHNlJztcbiAgICB9XG4gICAgdGhpcy5pc0J1bGtTY2FuRW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEU7XG4gICAgdGhpcy5kY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRENOX05VTUJFUjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTi50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcbiAgICB0aGlzLmlzTmV3UGNpcGFsT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTTkVXUENJUEFMT0ZGO1xuICAgIHRoaXMuaXNPbGRQY2lwYWxPZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkY7XG4gICAgdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFO1xuICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgIGlmICh0aGlzLmxzQ2NkTnVtYmVyICE9PSB0aGlzLmNjZENhc2VOdW1iZXIpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NjZC1zZWFyY2g/dGFrZVBheW1lbnQ9dHJ1ZWApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLmdldFBheW1lbnRHcm91cHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cHMgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID10cnVlO1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwcyA9IHBheW1lbnRHcm91cHNbJ3BheW1lbnRfZ3JvdXBzJ107XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVBbW91bnRzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVPcmRlckZlZXNBbW91bnRzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVSZWZ1bmRBbW91bnQoKTtcbiAgICAgICAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0U2VsZWN0ZWRPcmRlclJlZklkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyUmVmID0gZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmdvVG9PcmRlclZpZXdEZXRhaWxTZWN0aW9uKHRoaXMub3JkZXJSZWYpO1xuICAgICAgICAgICAgLy8gdGhpcy52aWV3U3RhdHVzID0gJ29yZGVyLWZ1bGwtdmlldyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGFydHlEZXRhaWxzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNwb0RldGFpbHMgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5kYXRhLmNvbnRlbnRbMF07XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0NQT0Rvd24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG5cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXNlVHJhbnNhY3Rpb25zU2VydmljZS5nZXRQYXltZW50R3JvdXBzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50R3JvdXBzID0+IHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9dHJ1ZTtcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMgPSBwYXltZW50R3JvdXBzWydwYXltZW50X2dyb3VwcyddO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlT3JkZXJGZWVzQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMudG90YWxSZWZ1bmRBbW91bnQgPSB0aGlzLmNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpO1xuICAgICAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBhcnR5RGV0YWlscyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jcG9EZXRhaWxzID0gSlNPTi5wYXJzZShyZXNwb25zZSkuZGF0YS5jb250ZW50WzBdO1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yLnJlcGxhY2UoL1wiL2csXCJcIik7XG4gICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0NQT0Rvd24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG5cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiggdGhpcy5wYXltZW50R3JvdXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hlY2tGb3JFeGNlcHRpb25SZWNvcmQoKTtcbiAgICB9XG4gICBcbiAgICBpZih0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZXMoKSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2VzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IGRhdGEpO1xuICAgIH1cbiAgXG4gIH1cblxuICBzZXREZWZhdWx0cygpOiB2b2lkIHtcbiAgICB0aGlzLnRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxSZW1pc3Npb25zID0gMC4wMDtcbiAgICB0aGlzLnRvdGFsTm9uT2ZmUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxGZWVzID0gMC4wMDtcbiAgfVxuXG4gIGdldEFsbG9jYXRpb25TdGF0dXMocGF5bWVudHM6IGFueSkge1xuXG4gICAgbGV0IHBheW1lbnRBbGxvY2F0aW9uID0gcGF5bWVudHMucGF5bWVudF9hbGxvY2F0aW9uLFxuICAgICAgaXNBbGxvY2F0aW9uU3RhdHVzRXhpc3QgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwO1xuICAgIHJldHVybiBpc0FsbG9jYXRpb25TdGF0dXNFeGlzdCA/IHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzIDogJy0nO1xuICAgIC8vcmV0dXJuIFwiLVwiO1xuXG4gIH1cblxuICBjaGVja0ZvckV4Y2VwdGlvblJlY29yZCgpOiB2b2lkIHtcbiAgIFxuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmICh0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdjY2RvcmV4Y2VwdGlvbicgfHwgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncmMnKSkge1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeUNDRCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcmVjb3JkRGF0YSA9PiB7XG4gICAgICAgICAgaWYgKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWNvcmREYXRhWydkYXRhJ10gJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZS5sZW5ndGggPT09IHVuZGVmaW5lZCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ2RjbicpIHtcbiAgICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLmxlbmd0aCA+IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUi5sZW5ndGggPT09IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5wYXltZW50R3JvdXBzLmxlbmd0aCA+IDApXG4gICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5jYXNlX3JlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHBheW1lbnQuY2NkX2Nhc2VfbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU9yZGVyRmVlc0Ftb3VudHMoKTogdm9pZCB7XG4gICAgbGV0IGZlZXNUb3RhbCA9IDAuMDA7XG4gICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgIHRoaXMucmVzZXRPcmRlclZhcmlhYmxlcygpO1xuICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICB0aGlzLm9yZGVyRmVlc1RvdGFsID0gdGhpcy5vcmRlckZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudFxuICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID0gdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzID0gKHRoaXMub3JkZXJGZWVzVG90YWwgLSB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwpIC0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHM7XG4gICAgICBpZiAodGhpcy5vcmRlclBlbmRpbmdQYXltZW50cyA8PSAwLjAwKSB7XG4gICAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnUGFpZCc7XG4gICAgICAgIHRoaXMub3JkZXJBZGRCdG5FbmFibGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcmRlckZlZXNUb3RhbCA+IDAgJiYgKHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID4gMCB8fCB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwgPiAwKSAmJiAodGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPCB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzKSkge1xuICAgICAgICB0aGlzLm9yZGVyU3RhdHVzID0gJ1BhcnRpYWxseSBwYWlkJ1xuICAgICAgICB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnTm90IHBhaWQnXG4gICAgICAgIHRoaXMub3JkZXJBZGRCdG5FbmFibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvL3RoaXMub3JkZXJMZXZlbEZlZXMucHVzaCh7b3JkZXJSZWZJZDpwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10sb3JkZXJUb3RhbEZlZXM6IHRoaXMub3JkZXJGZWVzVG90YWwsb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsb3JkZXJQYXJ0eTonU2FudG9zaCcsIG9yZGVyQ0NERXZlbnQ6J0Nhc2UgQ3JlYXRpb24nLG9yZGVyQ3JlYXRlZDogbmV3IERhdGUoKSwgb3JkZXJBZGRCdG5FbmFibGU6IHRoaXMub3JkZXJBZGRCdG5FbmFibGV9KTsgdGhpcy5jcG9EZXRhaWxzWydjcmVhdGVkVGltZXN0YW1wJ11cbiAgICAgIGlmICh0aGlzLmNwb0RldGFpbHMgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vcmRlckxldmVsRmVlcy5wdXNoKHsgb3JkZXJSZWZJZDogcGF5bWVudEdyb3VwWydwYXltZW50X2dyb3VwX3JlZmVyZW5jZSddLCBvcmRlclRvdGFsRmVlczogdGhpcy5vcmRlckZlZXNUb3RhbCwgb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsIG9yZGVyUGFydHk6IHRoaXMuY3BvRGV0YWlsc1sncmVzcG9uc2libGVQYXJ0eSddLCBvcmRlckNDREV2ZW50OiB0aGlzLmNwb0RldGFpbHNbJ2FjdGlvbiddLCBvcmRlckNyZWF0ZWQ6IHBheW1lbnRHcm91cFsnZGF0ZV9jcmVhdGVkJ10sIG9yZGVyQWRkQnRuRW5hYmxlOiB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9yZGVyTGV2ZWxGZWVzLnB1c2goeyBvcmRlclJlZklkOiBwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10sIG9yZGVyVG90YWxGZWVzOiB0aGlzLm9yZGVyRmVlc1RvdGFsLCBvcmRlclN0YXR1czogdGhpcy5vcmRlclN0YXR1cywgb3JkZXJQYXJ0eTogJycsIG9yZGVyQ0NERXZlbnQ6ICcnLCBvcmRlckNyZWF0ZWQ6IHBheW1lbnRHcm91cFsnZGF0ZV9jcmVhdGVkJ10sIG9yZGVyQWRkQnRuRW5hYmxlOiB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcmRlclN0YXR1cyAhPT0gJ1BhaWQnKSB7XG4gICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJzTGlzdCh0aGlzLm9yZGVyTGV2ZWxGZWVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXNldE9yZGVyVmFyaWFibGVzKCk6IHZvaWQge1xuICAgIHRoaXMub3JkZXJGZWVzVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gMC4wMDtcbiAgICB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcblxuICB9O1xuXG4gIGdvVG9PcmRlclZpZXdEZXRhaWxTZWN0aW9uKG9yZGVyUmVmZXJlbmNlT2JqOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWZJZChvcmRlclJlZmVyZW5jZU9iaik7XG4gICAgICB0aGlzLm9yZGVyUmVmID0gb3JkZXJSZWZlcmVuY2VPYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWZJZChvcmRlclJlZmVyZW5jZU9iai5vcmRlclJlZklkKTtcbiAgICAgIHRoaXMub3JkZXJSZWYgPSBvcmRlclJlZmVyZW5jZU9iai5vcmRlclJlZklkO1xuICAgIH1cblxuICAgIHRoaXMub3JkZXJGZWVzVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IDAuMDA7XG4gICAgdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPSAwLjAwO1xuXG4gICAgdGhpcy5vcmRlckRldGFpbCA9IHRoaXMucGF5bWVudEdyb3Vwcy5maWx0ZXIoeCA9PiB4LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlID09PSB0aGlzLm9yZGVyUmVmKTtcbiAgICB0aGlzLm9yZGVyRGV0YWlsLmZvckVhY2gob3JkZXJEZXRhaWwgPT4ge1xuICAgICAgaWYgKG9yZGVyRGV0YWlsLmZlZXMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlckZlZXNUb3RhbCA9IHRoaXMub3JkZXJGZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9yZGVyRGV0YWlsLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID0gdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JkZXJEZXRhaWwucGF5bWVudHMpIHtcbiAgICAgICAgICB0aGlzLnBheW1lbnQgPSBvcmRlckRldGFpbC5wYXltZW50c1swXTtcbiAgICAgICAgICBvcmRlckRldGFpbC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICB0aGlzLm9yZGVyVG90YWxQYXltZW50cyA9IHRoaXMub3JkZXJUb3RhbFBheW1lbnRzICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzID0gKHRoaXMub3JkZXJGZWVzVG90YWwgLSB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwpIC0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHM7XG4gICAgLy8gdGhpcy5vcmRlclJlZiA9IG9yZGVyUmVmZXJlbmNlT2JqLm9yZGVyUmVmSWQ7XG4gICAgaWYgKHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPD0gMC4wMCkge1xuICAgICAgdGhpcy5vcmRlclN0YXR1cyA9ICdQYWlkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3JkZXJGZWVzVG90YWwgPiAwICYmICh0aGlzLm9yZGVyVG90YWxQYXltZW50cyA+IDAgfHwgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID4gMCkgJiYgKHRoaXMub3JkZXJUb3RhbFBheW1lbnRzIDwgdGhpcy5vcmRlclBlbmRpbmdQYXltZW50cykpIHtcbiAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnUGFydGlhbGx5IHBhaWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSAnTm90IHBhaWQnXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3BvRGV0YWlscyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5vcmRlclBhcnR5ID0gdGhpcy5jcG9EZXRhaWxzWydyZXNwb25zaWJsZVBhcnR5J107XG4gICAgICB0aGlzLm9yZGVyQ3JlYXRlZCA9IHRoaXMuY3BvRGV0YWlsc1snY3JlYXRlZFRpbWVzdGFtcCddO1xuICAgICAgdGhpcy5vcmRlckNDREV2ZW50ID0gdGhpcy5jcG9EZXRhaWxzWydhY3Rpb24nXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcmRlclBhcnR5ID0gJyc7XG4gICAgICB0aGlzLm9yZGVyQ0NERXZlbnQgPSAnJztcbiAgICAgIHRoaXMub3JkZXJDcmVhdGVkID0gb3JkZXJSZWZlcmVuY2VPYmoub3JkZXJDcmVhdGVkO1xuICAgIH1cbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnb3JkZXItZnVsbC12aWV3JztcbiAgfVxuXG4gIHJlZGlyZWN0VG9PcmRlckZlZVNlYXJjaFBhZ2UoZXZlbnQ6IGFueSwgb3JkZXJlZjogYW55KSB7XG4gICAgaWYob3JkZXJlZi5vcmRlckFkZEJ0bkVuYWJsZSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IG51bGw7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IG9yZGVyZWYub3JkZXJSZWZJZDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9XG4gIH1cblxuICBnb1RvQ2FzZVRyYW5zYXRpb25QYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gZmFsc2U7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgfVxuXG5cbiAgY2FsY3VsYXRlQW1vdW50cygpOiB2b2lkIHtcbiAgICBsZXQgZmVlc1RvdGFsID0gMC4wMCxcbiAgICAgIHBheW1lbnRzVG90YWwgPSAwLjAwLFxuICAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMCxcbiAgICAgIG5vbk9mZkxpbmVQYXltZW50ID0gMC4wMDtcblxuICAgIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgICAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgICAgICBpZiAoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgICAgICAgICBsZXQgYSA9IGZlZS5hbW91bnRfZHVlID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIGxldCBiID0gZmVlLmFtb3VudF9kdWUgPD0gMDtcbiAgICAgICAgICAgICAgdGhpcy5jbEFtb3VudER1ZSA9IGEgPyB0aGlzLmNsQW1vdW50RHVlICsgZmVlLm5ldF9hbW91bnQgOiBiID8gdGhpcy5jbEFtb3VudER1ZSArIDAgOiB0aGlzLmNsQW1vdW50RHVlICsgZmVlLmFtb3VudF9kdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWVbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10gPSBwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ107XG4gICAgICAgICAgICB0aGlzLmZlZXMucHVzaChmZWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZWVzVG90YWwgPSBmZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICAgICAgICB0aGlzLmZlZXMucHVzaChmZWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLnRvdGFsRmVlcyA9IGZlZXNUb3RhbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAvLyBuZXcgZmVhdHVyZSBBcHBvcnRpb25tZW50IHRvZ2dsZSBjaGFuZ2VzXG4gICAgICAgICAgaWYgKCF0aGlzLmlzVHVybk9mZikge1xuICAgICAgICAgICAgbGV0IGFsbG9jYXRpb25MZW4gPSBwYXltZW50LnBheW1lbnRfYWxsb2NhdGlvbjtcblxuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbkxlbi5sZW5ndGggPT09IDAgfHwgYWxsb2NhdGlvbkxlbi5sZW5ndGggPiAwICYmIGFsbG9jYXRpb25MZW5bMF0uYWxsb2NhdGlvbl9zdGF0dXMgPT09ICdBbGxvY2F0ZWQnKSB7XG4gICAgICAgICAgICAgICAgbm9uT2ZmTGluZVBheW1lbnQgPSBub25PZmZMaW5lUGF5bWVudCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uTGVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vblBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uTGVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLnBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXltZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZVxuICAgICAgICAgICAgdGhpcy5hbGxQYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXG4gICAgICAgICAgICB0aGlzLmFsbFBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxQYXltZW50cyA9IHBheW1lbnRzVG90YWw7XG4gICAgICAvLyBuZXcgZmVhdHVyZSBBcHBvcnRpb25tZW50IHRvZ2dsZSBjaGFuZ2VzXG4gICAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgIHRoaXMudG90YWxOb25PZmZQYXltZW50cyA9IG5vbk9mZkxpbmVQYXltZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc2lzb24gPT4ge1xuICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IHJlbWlzc2lvbnNUb3RhbCArIHJlbWlzaXNvbi5od2ZfYW1vdW50O1xuICAgICAgICAgIHRoaXMucmVtaXNzaW9ucy5wdXNoKHJlbWlzaXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy50b3RhbFJlbWlzc2lvbnMgPSByZW1pc3Npb25zVG90YWw7XG4gICAgfSk7XG5cbiAgfVxuXG4gIGNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpIHtcbiAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICBsZXQgaXNOZXdQYXltZW50R3JvdXAgPSBmYWxzZTtcblxuICAgICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2goKHBheW1lbnRHcm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGdycE91dHN0YW5kaW5nQW1vdW50ID0gMC4wMCxcbiAgICAgICAgICBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgICAgIHBheW1lbnRzVG90YWwgPSAwLjAwLFxuICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgZmVlcyA9IFtdO1xuXG4gICAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICAgIC8vIHRoaXMuaXNGZWVSZWNvcmRzRXhpc3QgPSB0cnVlO1xuICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcblxuICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW0gPT4ge1xuICAgICAgICAgICAgICBpZiAocmVtLmZlZV9jb2RlID09PSBmZWUuY29kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25zTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZlZVsncmVtaXNzaW9ucyddID0gcmVtO1xuICAgICAgICAgICAgICAgIC8vIGlmKCFmZWVzLmZpbmQoayA9PiBrLmNvZGU9ZmVlLmNvZGUpKVxuICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgICAgICAvL31cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCkge1xuICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZlZS5kYXRlX2NyZWF0ZWQpIHtcbiAgICAgICAgICAgICAgaXNOZXdQYXltZW50R3JvdXAgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0hpc3RvcmljR3JvdXBBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHNbaW5kZXhdWydvbGQnXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzW2luZGV4XS5mZWVzID0gZmVlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSByZW1pc3Npb25zVG90YWwgKyByZW1pc3Npb24uaHdmX2Ftb3VudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBncnBPdXRzdGFuZGluZ0Ftb3VudCA9IChmZWVzVG90YWwgLSByZW1pc3Npb25zVG90YWwpIC0gcGF5bWVudHNUb3RhbDtcbiAgICAgICAgaWYgKGdycE91dHN0YW5kaW5nQW1vdW50ID4gMCAmJiBpc05ld1BheW1lbnRHcm91cCkge1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzRmVlUmVjb3Jkc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnBheW1lbnRSZWYgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzICYmIHBheW1lbnRHcm91cC5mZWVzLmxlbmd0aCA+IDAgJiYgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPD0gMCAmJiBpc05ld1BheW1lbnRHcm91cCkge1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCghaXNOZXdQYXltZW50R3JvdXAgJiYgdGhpcy5pc0hpc3RvcmljR3JvdXBBdmFpbGFibGUpIHx8ICghaXNOZXdQYXltZW50R3JvdXAgJiYgIXRoaXMuaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlKSkge1xuICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdG90YWxSZWZ1bmRBbW91bnQgPSAwLFxuICAgICAgICBpc0ZlZUFtb3VudFplcm8gPSBmYWxzZTtcbiAgICAgIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIGxldCBncnBPdXRzdGFuZGluZ0Ftb3VudCA9IDAuMDAsXG4gICAgICAgICAgZmVlc1RvdGFsID0gMC4wMCxcbiAgICAgICAgICBwYXltZW50c1RvdGFsID0gMC4wMCxcbiAgICAgICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwO1xuICAgICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgICAgICB0aGlzLmlzRmVlUmVjb3Jkc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgICBmZWVzVG90YWwgPSBmZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICAgICAgICBpZiAoZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgIGlzRmVlQW1vdW50WmVybyA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAoZmVlc1RvdGFsIC0gcmVtaXNzaW9uc1RvdGFsKSAtIHBheW1lbnRzVG90YWw7XG4gICAgICAgIGlmIChncnBPdXRzdGFuZGluZ0Ftb3VudCA8IDApIHtcbiAgICAgICAgICBpZiAodG90YWxSZWZ1bmRBbW91bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRvdGFsUmVmdW5kQW1vdW50ID0gZ3JwT3V0c3RhbmRpbmdBbW91bnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvdGFsUmVmdW5kQW1vdW50ID0gKHRvdGFsUmVmdW5kQW1vdW50ICsgZ3JwT3V0c3RhbmRpbmdBbW91bnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChncnBPdXRzdGFuZGluZ0Ftb3VudCA+IDAgfHwgKGdycE91dHN0YW5kaW5nQW1vdW50ID09PSAwICYmIGlzRmVlQW1vdW50WmVybykpIHtcbiAgICAgICAgICB0aGlzLmlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRvdGFsUmVmdW5kQW1vdW50ICogLTE7XG4gICAgfVxuICB9XG5cbiAgZ2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXApOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuY2FsY3VsYXRlT3V0U3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKTs7XG4gIH1cblxuICByZWRpcmVjdFRvRmVlU2VhcmNoUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgdXJsID0gdGhpcy5pc0J1bGtTY2FuRW5hYmxlID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgdXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc05ld1BjaXBhbE9mZiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgdXJsICs9IHRoaXMuaXNPbGRQY2lwYWxPZmYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuICAgIHVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2ZlZS1zZWFyY2g/c2VsZWN0ZWRPcHRpb249JHt0aGlzLnNlbGVjdGVkT3B0aW9ufSZjY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfSR7dXJsfWApO1xuICB9XG5cbiAgYWRkUmVtaXNzaW9uKGZlZTogSUZlZSkge1xuICAgIGlmKHRoaXMuY2hrRm9yQWRkUmVtaXNzaW9uKGZlZS5jb2RlKSkge1xuICAgIHRoaXMuZmVlSWQgPSBmZWU7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ2FkZHJlbWlzc2lvbic7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHModGhpcy5wYXltZW50LnJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXModGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UpKTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgIC8vIGNvbnN0IHBheW1lbnRBbGxvY2F0aW9uID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucGF5bWVudF9hbGxvY2F0aW9uO1xuICAgICAgICAvLyB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLnJlcGxhY2UoL1wiL2csXCJcIilcbiAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJlZnVuZEZvclJlbWlzc2lvbihwYXltZW50OiBJUGF5bWVudCwgcmVtaXNzaW9uOiBJUmVtaXNzaW9uW10sZmVlczphbnkpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJztcbiBcbiAgICB0aGlzLnBheW1lbnQgPSBwYXltZW50O1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHRoaXMucGF5bWVudC5yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuXG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMuZmlsdGVyXG4gICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudC5yZWZlcmVuY2UpKTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgIHRoaXMucmVtaXNzaW9ucyA9IHJlbWlzc2lvbjtcbiAgICAgICAgdGhpcy5yZW1pc3Npb25GZWVBbXQgPSBmZWVzLmZpbHRlcihkYXRhPT5kYXRhLmNvZGUgPT09IHRoaXMucmVtaXNzaW9uc1snZmVlX2NvZGUnXSlbMF0ubmV0X2Ftb3VudDtcbiAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIC8vIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICB9XG5cbiAgcmVkaXJlY3RUb3JlbWlzc2lvblBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlbWlzc2lvbidcbiAgfVxuXG4gIHJlZGlyZWN0VG9SZXBvcnRzUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcmVwb3J0cz9zZWxlY3RlZE9wdGlvbj0ke3RoaXMuc2VsZWN0ZWRPcHRpb259JmNjZENhc2VOdW1iZXI9JHt0aGlzLmNjZENhc2VOdW1iZXJ9YCk7XG4gIH1cblxuICBsb2FkRmVlU3VtbWFyeVBhZ2UocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IG51bGw7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgfVxuXG4gIGdvVG9QYXltZW50Vmlld0NvbXBvbmVudChwYXltZW50R3JvdXA6IGFueSkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50TWV0aG9kID0gcGF5bWVudEdyb3VwLnBheW1lbnRNZXRob2Q7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50R3JvdXBSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudFJlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGF5bWVudC12aWV3JztcbiAgfVxuXG4gIGdvVG9QYXllbWVudFZpZXcocGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudE1ldGhvZDogc3RyaW5nKSB7XG4gICAgdGhpcy5nb1RvUGF5bWVudFZpZXdDb21wb25lbnQoeyBwYXltZW50R3JvdXBSZWZlcmVuY2UsIHBheW1lbnRSZWZlcmVuY2UsIHBheW1lbnRNZXRob2QgfSk7XG4gIH1cblxuICBzZWxlY3RlZFVucHJvY2Vzc2VkRmVlRXZlbnQodW5wcm9jZXNzZWRSZWNvcmRJZDogc3RyaW5nKSB7XG4gICAgaWYgKHVucHJvY2Vzc2VkUmVjb3JkSWQpIHtcbiAgICAgIGlmICh0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1VucHJvY2Vzc2VkUmVjb3JkU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXRVbnByb2Nlc3NlZEZlZUNvdW50KHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ6IG51bWJlcikge1xuICAgIHRoaXMudW5wcm9jZXNzZWRSZWNvcmRDb3VudCA9IHVuUHJvY2Vzc2VkUmVjb3JkQ291bnQ7XG4gIH1cblxuICBjYWxjdWxhdGVBbW91bnREdWUoZmVlOiBJRmVlKSB7XG5cbiAgICBpZiAoZmVlLmRhdGVfY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIGZlZS5hbW91bnRfZHVlICE9PSB1bmRlZmluZWQgPyBmZWUuYW1vdW50X2R1ZSA6IGZlZS5uZXRfYW1vdW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCIwLjAwXCI7XG4gICAgfVxuICB9XG5cbiAgY29uZmlybVJlbW92ZUZlZShmZWU6IElGZWUpIHtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJztcbiAgfVxuXG4gIGNhbmNlbFJlbW92YWwoKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICB9XG5cbiAgcmVtb3ZlRmVlKGZlZTogYW55KSB7XG4gICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5kZWxldGVGZWVGcm9tUGF5bWVudEdyb3VwKGZlZSkuc3Vic2NyaWJlKFxuICAgICAgKHN1Y2Nlc3M6IGFueSkgPT4ge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGlzQ2hlY2tBbW91bnRkdWVFeGlzdChhbW91bnREdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgYW1vdW50RHVlID09PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGlzc3VlUmVmdW5kKHBheW1lbnQ6IElQYXltZW50KSB7XG4gICAgaWYgKHBheW1lbnQgIT09IG51bGwgJiYgcGF5bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYodGhpcy5jaGtJc3N1ZVJlZnVuZEJ0bkVuYWJsZShwYXltZW50KSkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdpc3N1ZXJlZnVuZCc7XG4gICAgdGhpcy5wYXltZW50ID0gcGF5bWVudDtcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgfVxuXG4gIGNoa0ZvckFkZFJlbWlzc2lvbihmZWVDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGtGb3JQQkFQYXltZW50KCkgJiYgdGhpcy5jaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kKCkpIHtcbiAgICAgIGlmICh0aGlzLm9yZGVyRGV0YWlsWzBdWydyZW1pc3Npb25zJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlbWlzc2lvbiBvZiB0aGlzLm9yZGVyRGV0YWlsWzBdWydyZW1pc3Npb25zJ10pIHtcbiAgICAgICAgICBpZiAocmVtaXNzaW9uLmZlZV9jb2RlID09PSBmZWVDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNoa0ZvclBCQVBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMub3JkZXJEZXRhaWwgIT09IG51bGwgJiYgIHRoaXMub3JkZXJEZXRhaWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMub3JkZXJEZXRhaWwuZm9yRWFjaChvcmRlckRldGFpbCA9PiB7XG4gICAgICBpZiAob3JkZXJEZXRhaWwucGF5bWVudHMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICBpZiAocGF5bWVudC5tZXRob2QudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmlzUEJBID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmlzUEJBKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH1cbiAgfVxuXG4gIGNoa0lzc3VlUmVmdW5kQnRuRW5hYmxlKHBheW1lbnQ6IElQYXltZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1JlZnVuZCgpICYmIHRoaXMuYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyhwYXltZW50KSAmJlxuICAgICAgcGF5bWVudC5tZXRob2QgPT09ICdwYXltZW50IGJ5IGFjY291bnQnICYmIHBheW1lbnQuc3RhdHVzLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJykge1xuICAgICAgdGhpcy5pc0lzc3VlUmVmdW5mQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgY2hrSXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMub3JkZXJEZXRhaWwgIT09IG51bGwgJiYgIHRoaXMub3JkZXJEZXRhaWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMub3JkZXJEZXRhaWwuZm9yRWFjaChvcmRlckRldGFpbCA9PiB7XG4gICAgICBpZiAob3JkZXJEZXRhaWwucGF5bWVudHMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICBpZiAocGF5bWVudC5tZXRob2QudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgcGF5bWVudC5zdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnICYmIHRoaXMuYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyhwYXltZW50KSkge1xuICAgICAgICAgICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5pc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9XG4gIH1cblxuICBjaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kLnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBhbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzID0gKHBheW1lbnQ6IElQYXltZW50KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHBheW1lbnQgIT09IG51bGwgJiYgcGF5bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHRtcDREYXlBZ28gPSBuZXcgRGF0ZSgpO1xuICAgIHRtcDREYXlBZ28uc2V0RGF0ZSh0bXA0RGF5QWdvLmdldERhdGUoKSAtIDQpO1xuICAgIHJldHVybiB0bXA0RGF5QWdvID49IG5ldyBEYXRlKHBheW1lbnQuZGF0ZV9jcmVhdGVkKTtcbiAgICB9XG4gIH1cbn1cblxuIl19
|