@hmcts/ccpay-web-component 6.5.15-beta1 → 6.5.15-beta13
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/fesm2022/hmcts-ccpay-web-component.mjs +272 -193
- package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -1
- package/index.d.ts +2348 -5
- package/package.json +8 -7
- package/esm2022/hmcts-ccpay-web-component.mjs +0 -5
- package/esm2022/lib/components/add-remission/add-remission.component.mjs +0 -1276
- package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +0 -423
- package/esm2022/lib/components/card-details/card-details.component.mjs +0 -32
- package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +0 -885
- package/esm2022/lib/components/contact-details/contact-details.component.mjs +0 -338
- package/esm2022/lib/components/error-banner/error-banner.component.mjs +0 -18
- package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +0 -280
- package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +0 -195
- package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +0 -275
- package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +0 -79
- package/esm2022/lib/components/page-not-found.component.mjs +0 -17
- package/esm2022/lib/components/payment-list/payment-list.component.mjs +0 -36
- package/esm2022/lib/components/payment-view/payment-view.component.mjs +0 -467
- package/esm2022/lib/components/pba-details/pba-details.component.mjs +0 -18
- package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +0 -163
- package/esm2022/lib/components/process-refund/process-refund.component.mjs +0 -417
- package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +0 -37
- package/esm2022/lib/components/refund-list/refund-list.component.mjs +0 -73
- package/esm2022/lib/components/refund-status/refund-status.component.mjs +0 -481
- package/esm2022/lib/components/reports/reports.component.mjs +0 -337
- package/esm2022/lib/components/service-request/service-request.component.mjs +0 -516
- package/esm2022/lib/components/status-history/status-history.component.mjs +0 -33
- package/esm2022/lib/components/table/table.component.mjs +0 -127
- package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +0 -236
- package/esm2022/lib/interfaces/AddRemissionRequest.mjs +0 -17
- package/esm2022/lib/interfaces/AddRetroRemissionRequest.mjs +0 -9
- package/esm2022/lib/interfaces/AllocatePaymentRequest.mjs +0 -41
- package/esm2022/lib/interfaces/IAllocationPaymentsRequest.mjs +0 -20
- package/esm2022/lib/interfaces/IBSPayments.mjs +0 -2
- package/esm2022/lib/interfaces/ICardDetails.mjs +0 -2
- package/esm2022/lib/interfaces/IFee.mjs +0 -2
- package/esm2022/lib/interfaces/INotificationPreview.mjs +0 -2
- package/esm2022/lib/interfaces/IOrderReferenceFee.mjs +0 -2
- package/esm2022/lib/interfaces/IPatchRefundAction.mjs +0 -2
- package/esm2022/lib/interfaces/IPayment.mjs +0 -2
- package/esm2022/lib/interfaces/IPaymentFailure.mjs +0 -2
- package/esm2022/lib/interfaces/IPaymentGroup.mjs +0 -2
- package/esm2022/lib/interfaces/IPaymentStatus.mjs +0 -12
- package/esm2022/lib/interfaces/IPaymentView.mjs +0 -2
- package/esm2022/lib/interfaces/IPayments.mjs +0 -2
- package/esm2022/lib/interfaces/IPutNotificationRequest.mjs +0 -13
- package/esm2022/lib/interfaces/IRefundAction.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundContactDetails.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundFee.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundList.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundReasons.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundRejectReason.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundStatus.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundStatusHistory.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundsNotifications.mjs +0 -2
- package/esm2022/lib/interfaces/IRemission.mjs +0 -2
- package/esm2022/lib/interfaces/IResubmitRefundRequest.mjs +0 -13
- package/esm2022/lib/interfaces/IStatusHistories.mjs +0 -2
- package/esm2022/lib/interfaces/IStatusHistory.mjs +0 -2
- package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +0 -11
- package/esm2022/lib/interfaces/IserviceRequestPbaPayment.mjs +0 -15
- package/esm2022/lib/interfaces/IssueRefundRequest.mjs +0 -11
- package/esm2022/lib/interfaces/NotificationPreviewRequest.mjs +0 -46
- package/esm2022/lib/interfaces/PayhubAntennaRequest.mjs +0 -14
- package/esm2022/lib/interfaces/PaymentToPayhubRequest.mjs +0 -17
- package/esm2022/lib/interfaces/PostIssueRefundRetroRemission.mjs +0 -9
- package/esm2022/lib/interfaces/PostRefundRetroRemission.mjs +0 -18
- package/esm2022/lib/interfaces/RefundsRequest.mjs +0 -9
- package/esm2022/lib/interfaces/UnidentifiedPaymentsRequest.mjs +0 -16
- package/esm2022/lib/interfaces/UnsolicitedPaymentsRequest.mjs +0 -22
- package/esm2022/lib/payment-lib.component.mjs +0 -430
- package/esm2022/lib/payment-lib.module.mjs +0 -181
- package/esm2022/lib/payment-lib.service.mjs +0 -49
- package/esm2022/lib/pipes/capitalize.pipe.mjs +0 -18
- package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +0 -22
- package/esm2022/lib/pipes/key-value.pipe.mjs +0 -23
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +0 -20
- package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +0 -87
- package/esm2022/lib/services/card-details/card-details.service.mjs +0 -39
- package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +0 -39
- package/esm2022/lib/services/notification/notification.service.mjs +0 -70
- package/esm2022/lib/services/orderslist.service.mjs +0 -154
- package/esm2022/lib/services/payment-list/payment-list.service.mjs +0 -40
- package/esm2022/lib/services/payment-view/payment-view.service.mjs +0 -156
- package/esm2022/lib/services/refunds/refunds.service.mjs +0 -120
- package/esm2022/lib/services/shared/error-handler.service.mjs +0 -76
- package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +0 -64
- package/esm2022/lib/services/shared/logger/console-logger.service.mjs +0 -43
- package/esm2022/lib/services/shared/logger/logger.service.mjs +0 -23
- package/esm2022/lib/services/status-history/status-history.service.mjs +0 -41
- package/esm2022/lib/services/xl-file/xl-file.service.mjs +0 -197
- package/esm2022/public_api.mjs +0 -7
- package/lib/components/add-remission/add-remission.component.d.ts +0 -208
- package/lib/components/allocate-payments/allocate-payments.component.d.ts +0 -115
- package/lib/components/card-details/card-details.component.d.ts +0 -18
- package/lib/components/case-transactions/case-transactions.component.d.ts +0 -143
- package/lib/components/contact-details/contact-details.component.d.ts +0 -54
- package/lib/components/error-banner/error-banner.component.d.ts +0 -9
- package/lib/components/fee-summary/fee-summary.component.d.ts +0 -72
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +0 -52
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +0 -63
- package/lib/components/notification-preview/notification-preview.component.d.ts +0 -30
- package/lib/components/page-not-found.component.d.ts +0 -5
- package/lib/components/payment-list/payment-list.component.d.ts +0 -19
- package/lib/components/payment-view/payment-view.component.d.ts +0 -110
- package/lib/components/pba-details/pba-details.component.d.ts +0 -10
- package/lib/components/pba-payment/pba-payment.component.d.ts +0 -41
- package/lib/components/process-refund/process-refund.component.d.ts +0 -82
- package/lib/components/processed-payments/processed-payments.component.d.ts +0 -17
- package/lib/components/refund-list/refund-list.component.d.ts +0 -26
- package/lib/components/refund-status/refund-status.component.d.ts +0 -119
- package/lib/components/reports/reports.component.d.ts +0 -49
- package/lib/components/service-request/service-request.component.d.ts +0 -141
- package/lib/components/status-history/status-history.component.d.ts +0 -19
- package/lib/components/table/table.component.d.ts +0 -45
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +0 -61
- package/lib/interfaces/AddRemissionRequest.d.ts +0 -11
- package/lib/interfaces/AddRetroRemissionRequest.d.ts +0 -5
- package/lib/interfaces/AllocatePaymentRequest.d.ts +0 -31
- package/lib/interfaces/IAllocationPaymentsRequest.d.ts +0 -9
- package/lib/interfaces/IBSPayments.d.ts +0 -19
- package/lib/interfaces/ICardDetails.d.ts +0 -7
- package/lib/interfaces/IFee.d.ts +0 -29
- package/lib/interfaces/INotificationPreview.d.ts +0 -27
- package/lib/interfaces/IOrderReferenceFee.d.ts +0 -9
- package/lib/interfaces/IPatchRefundAction.d.ts +0 -4
- package/lib/interfaces/IPayment.d.ts +0 -35
- package/lib/interfaces/IPaymentFailure.d.ts +0 -13
- package/lib/interfaces/IPaymentGroup.d.ts +0 -11
- package/lib/interfaces/IPaymentStatus.d.ts +0 -11
- package/lib/interfaces/IPaymentView.d.ts +0 -5
- package/lib/interfaces/IPayments.d.ts +0 -4
- package/lib/interfaces/IPutNotificationRequest.d.ts +0 -6
- package/lib/interfaces/IRefundAction.d.ts +0 -4
- package/lib/interfaces/IRefundContactDetails.d.ts +0 -9
- package/lib/interfaces/IRefundFee.d.ts +0 -7
- package/lib/interfaces/IRefundList.d.ts +0 -20
- package/lib/interfaces/IRefundReasons.d.ts +0 -6
- package/lib/interfaces/IRefundRejectReason.d.ts +0 -4
- package/lib/interfaces/IRefundStatus.d.ts +0 -8
- package/lib/interfaces/IRefundStatusHistory.d.ts +0 -5
- package/lib/interfaces/IRefundsNotifications.d.ts +0 -16
- package/lib/interfaces/IRemission.d.ts +0 -14
- package/lib/interfaces/IResubmitRefundRequest.d.ts +0 -9
- package/lib/interfaces/IStatusHistories.d.ts +0 -7
- package/lib/interfaces/IStatusHistory.d.ts +0 -7
- package/lib/interfaces/IserviceRequestCardPayment.d.ts +0 -6
- package/lib/interfaces/IserviceRequestPbaPayment.d.ts +0 -8
- package/lib/interfaces/IssueRefundRequest.d.ts +0 -6
- package/lib/interfaces/NotificationPreviewRequest.d.ts +0 -25
- package/lib/interfaces/PayhubAntennaRequest.d.ts +0 -8
- package/lib/interfaces/PaymentToPayhubRequest.d.ts +0 -11
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +0 -6
- package/lib/interfaces/PostRefundRetroRemission.d.ts +0 -11
- package/lib/interfaces/RefundsRequest.d.ts +0 -5
- package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts +0 -7
- package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts +0 -10
- package/lib/payment-lib.component.d.ts +0 -156
- package/lib/payment-lib.module.d.ts +0 -42
- package/lib/payment-lib.service.d.ts +0 -21
- package/lib/pipes/capitalize.pipe.d.ts +0 -8
- package/lib/pipes/ccd-hyphens.pipe.d.ts +0 -8
- package/lib/pipes/key-value.pipe.d.ts +0 -8
- package/lib/pipes/sanitize-html.pipe.d.ts +0 -10
- package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +0 -27
- package/lib/services/card-details/card-details.service.d.ts +0 -17
- package/lib/services/case-transactions/case-transactions.service.d.ts +0 -17
- package/lib/services/notification/notification.service.d.ts +0 -21
- package/lib/services/orderslist.service.d.ts +0 -77
- package/lib/services/payment-list/payment-list.service.d.ts +0 -18
- package/lib/services/payment-view/payment-view.service.d.ts +0 -61
- package/lib/services/refunds/refunds.service.d.ts +0 -36
- package/lib/services/shared/error-handler.service.d.ts +0 -14
- package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +0 -17
- package/lib/services/shared/logger/console-logger.service.d.ts +0 -11
- package/lib/services/shared/logger/logger.service.d.ts +0 -14
- package/lib/services/status-history/status-history.service.d.ts +0 -17
- package/lib/services/xl-file/xl-file.service.d.ts +0 -16
- package/public_api.d.ts +0 -3
|
@@ -1,430 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, forwardRef, Input } from '@angular/core';
|
|
2
|
-
import { PaymentLibService } from './payment-lib.service';
|
|
3
|
-
import { OrderslistService } from './services/orderslist.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./payment-lib.service";
|
|
6
|
-
import * as i2 from "./services/orderslist.service";
|
|
7
|
-
import * as i3 from "@angular/common";
|
|
8
|
-
import * as i4 from "./components/payment-view/payment-view.component";
|
|
9
|
-
import * as i5 from "./components/case-transactions/case-transactions.component";
|
|
10
|
-
import * as i6 from "./components/refund-status/refund-status.component";
|
|
11
|
-
import * as i7 from "./components/pba-payment/pba-payment.component";
|
|
12
|
-
import * as i8 from "./components/payment-list/payment-list.component";
|
|
13
|
-
import * as i9 from "./components/process-refund/process-refund.component";
|
|
14
|
-
import * as i10 from "./components/refund-list/refund-list.component";
|
|
15
|
-
import * as i11 from "./components/mark-unidentified-payment/mark-unidentified-payment.component";
|
|
16
|
-
import * as i12 from "./components/mark-unsolicited-payment/mark-unsolicited-payment.component";
|
|
17
|
-
import * as i13 from "./components/allocate-payments/allocate-payments.component";
|
|
18
|
-
import * as i14 from "./components/fee-summary/fee-summary.component";
|
|
19
|
-
import * as i15 from "./components/reports/reports.component";
|
|
20
|
-
export class PaymentLibComponent {
|
|
21
|
-
paymentLibService;
|
|
22
|
-
cd;
|
|
23
|
-
OrderslistService;
|
|
24
|
-
API_ROOT;
|
|
25
|
-
BULKSCAN_API_ROOT;
|
|
26
|
-
REFUNDS_API_ROOT;
|
|
27
|
-
NOTIFICATION_API_ROOT;
|
|
28
|
-
CARDPAYMENTRETURNURL;
|
|
29
|
-
CCD_CASE_NUMBER;
|
|
30
|
-
EXC_REFERENCE;
|
|
31
|
-
PAYMENT_METHOD;
|
|
32
|
-
VIEW;
|
|
33
|
-
VIEWSERVICE;
|
|
34
|
-
PAYMENT_GROUP_REF;
|
|
35
|
-
TAKEPAYMENT;
|
|
36
|
-
SERVICEREQUEST;
|
|
37
|
-
DCN_NUMBER;
|
|
38
|
-
SELECTED_OPTION;
|
|
39
|
-
ISBSENABLE;
|
|
40
|
-
ISSFENABLE;
|
|
41
|
-
ISTURNOFF;
|
|
42
|
-
CASETYPE;
|
|
43
|
-
ISPAYMENTSTATUSENABLED;
|
|
44
|
-
rootUrl;
|
|
45
|
-
REFUNDLIST;
|
|
46
|
-
USERID;
|
|
47
|
-
LOGGEDINUSERROLES;
|
|
48
|
-
LOGGEDINUSEREMAIL;
|
|
49
|
-
isFromServiceRequestPage;
|
|
50
|
-
telephonySelectionEnable;
|
|
51
|
-
paymentMethod;
|
|
52
|
-
bspaymentdcn;
|
|
53
|
-
unProcessedPaymentServiceId = null;
|
|
54
|
-
paymentGroupReference;
|
|
55
|
-
paymentReference;
|
|
56
|
-
refundReference;
|
|
57
|
-
isFromPayBubble = false;
|
|
58
|
-
refundlistsource;
|
|
59
|
-
viewName;
|
|
60
|
-
isTurnOff;
|
|
61
|
-
caseType;
|
|
62
|
-
unProcessedPayment = null;
|
|
63
|
-
isRefundStatusView;
|
|
64
|
-
isRedirectFromCaseTransactionPage;
|
|
65
|
-
isCallFromRefundList;
|
|
66
|
-
isFromRefundStatusPage;
|
|
67
|
-
iscancelClicked;
|
|
68
|
-
isFromPaymentDetailPage;
|
|
69
|
-
pbaPayOrderRef;
|
|
70
|
-
isTakePayment;
|
|
71
|
-
orderDetail;
|
|
72
|
-
orderRef;
|
|
73
|
-
orderStatus;
|
|
74
|
-
orderParty;
|
|
75
|
-
orderCreated;
|
|
76
|
-
orderCCDEvent;
|
|
77
|
-
serviceRequestValue;
|
|
78
|
-
orderAddBtnEnable;
|
|
79
|
-
orderFeesTotal = 0.00;
|
|
80
|
-
orderRemissionTotal = 0.00;
|
|
81
|
-
orderTotalPayments = 0.00;
|
|
82
|
-
orderPendingPayments = 0.00;
|
|
83
|
-
paymentGroup;
|
|
84
|
-
overPaymentAmount = 0.00;
|
|
85
|
-
refunds;
|
|
86
|
-
constructor(paymentLibService, cd, OrderslistService) {
|
|
87
|
-
this.paymentLibService = paymentLibService;
|
|
88
|
-
this.cd = cd;
|
|
89
|
-
this.OrderslistService = OrderslistService;
|
|
90
|
-
}
|
|
91
|
-
ngAfterContentChecked() {
|
|
92
|
-
this.cd.detectChanges();
|
|
93
|
-
}
|
|
94
|
-
ngOnInit() {
|
|
95
|
-
this.paymentLibService.setApiRootUrl(this.API_ROOT);
|
|
96
|
-
this.paymentLibService.setBulkScanApiRootUrl(this.BULKSCAN_API_ROOT);
|
|
97
|
-
this.paymentLibService.setRefundndsApiRootUrl(this.REFUNDS_API_ROOT);
|
|
98
|
-
this.paymentLibService.setNoticationApiRootUrl(this.NOTIFICATION_API_ROOT);
|
|
99
|
-
this.paymentLibService.setCardPaymentReturnUrl(this.CARDPAYMENTRETURNURL);
|
|
100
|
-
if (this.LOGGEDINUSERROLES.length > 0) {
|
|
101
|
-
this.OrderslistService.setUserRolesList(this.LOGGEDINUSERROLES);
|
|
102
|
-
}
|
|
103
|
-
if (this.PAYMENT_GROUP_REF) {
|
|
104
|
-
this.paymentGroupReference = this.PAYMENT_GROUP_REF;
|
|
105
|
-
}
|
|
106
|
-
if (this.DCN_NUMBER) {
|
|
107
|
-
this.bspaymentdcn = this.DCN_NUMBER;
|
|
108
|
-
}
|
|
109
|
-
if (this.REFUNDLIST === "true") {
|
|
110
|
-
this.VIEW = 'refund-list';
|
|
111
|
-
this.viewName = this.VIEW;
|
|
112
|
-
}
|
|
113
|
-
if (this.VIEW === 'fee-summary') {
|
|
114
|
-
this.viewName = 'fee-summary';
|
|
115
|
-
}
|
|
116
|
-
else if (this.VIEW !== 'reports' && this.VIEW !== 'refund-list') {
|
|
117
|
-
this.viewName = 'case-transactions';
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
this.viewName = this.VIEW;
|
|
121
|
-
}
|
|
122
|
-
if (this.isTakePayment) {
|
|
123
|
-
this.TAKEPAYMENT = true;
|
|
124
|
-
}
|
|
125
|
-
if (this.API_ROOT == 'api/payment-history') {
|
|
126
|
-
this.isFromPayBubble = true;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Adds a remission to the payment group using data from the provided form group.
|
|
131
|
-
*
|
|
132
|
-
* This method checks if the `paymentGroup` is not null before attempting to add the remission.
|
|
133
|
-
* If the `paymentGroup` exists, a new remission is created using the values from the provided
|
|
134
|
-
* form group (`currentRemissionFormGroup`), and it is pushed into the `remissions` array of the payment group.
|
|
135
|
-
*
|
|
136
|
-
* @param {AddRetroRemissionRequest} currentRemissionFormGroup - The form group containing remission data
|
|
137
|
-
* (e.g., `hwf_amount`, `hwf_reference`).
|
|
138
|
-
*/
|
|
139
|
-
addRemission(currentRemissionFormGroup) {
|
|
140
|
-
if (this.paymentGroup != null) {
|
|
141
|
-
const remission = {
|
|
142
|
-
remission_reference: null,
|
|
143
|
-
hwf_reference: currentRemissionFormGroup.hwf_reference,
|
|
144
|
-
hwf_amount: currentRemissionFormGroup.hwf_amount,
|
|
145
|
-
beneficiary_name: null,
|
|
146
|
-
ccd_case_number: null,
|
|
147
|
-
fee_code: null,
|
|
148
|
-
date_created: null,
|
|
149
|
-
fee_id: null,
|
|
150
|
-
issue_refund_add_refund_add_remission: false,
|
|
151
|
-
add_refund: false,
|
|
152
|
-
overall_balance: currentRemissionFormGroup.hwf_amount,
|
|
153
|
-
acollection_of_fess: true
|
|
154
|
-
};
|
|
155
|
-
this.paymentGroup.remissions.push(remission);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* This method is used to set the paymentGroup for the add remission journey.
|
|
160
|
-
* @param updatedPaymentGroup this is an updated paymentGroup version.
|
|
161
|
-
*/
|
|
162
|
-
addPaymentGroup(updatedPaymentGroup) {
|
|
163
|
-
if (this.paymentGroup == null) {
|
|
164
|
-
this.paymentGroup = updatedPaymentGroup;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Calculates the total remission amount for the current payment group.
|
|
169
|
-
*
|
|
170
|
-
* This method checks if the payment group contains any remissions and, if so,
|
|
171
|
-
* sums up the `hwf_amount` of all remissions using the `reduce()` method.
|
|
172
|
-
* If no remissions are found, it returns a default value of 0.
|
|
173
|
-
*
|
|
174
|
-
* @returns {number} The total remission amount, or 0 if no remissions are present.
|
|
175
|
-
*/
|
|
176
|
-
getTotalRemission() {
|
|
177
|
-
let remissionTotal = 0;
|
|
178
|
-
if (this.paymentGroup.remissions) {
|
|
179
|
-
remissionTotal = this.paymentGroup.remissions.reduce((totalRemission, remission) => totalRemission + remission.hwf_amount, 0);
|
|
180
|
-
}
|
|
181
|
-
return remissionTotal;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Calculates the total fee amount for the current payment group.
|
|
185
|
-
*
|
|
186
|
-
* This method checks if the payment group contains any fees and, if so,
|
|
187
|
-
* sums up the `calculated_amount` of all fees using the `reduce()` method.
|
|
188
|
-
* If no fees are found, it returns a default value of 0.
|
|
189
|
-
*
|
|
190
|
-
* @returns {number} The total fee amount, or 0 if no fees are present.
|
|
191
|
-
*/
|
|
192
|
-
getTotalFees() {
|
|
193
|
-
let feesTotal = 0;
|
|
194
|
-
if (this.paymentGroup.fees) {
|
|
195
|
-
feesTotal = this.paymentGroup.fees.reduce((totalFees, fee) => totalFees + fee.calculated_amount, 0);
|
|
196
|
-
}
|
|
197
|
-
return feesTotal;
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Calculates the total payment amount for the current payment group.
|
|
201
|
-
*
|
|
202
|
-
* This method checks if the payment group contains any payments and, if so,
|
|
203
|
-
* sums up the `amount` of all payments using the `reduce()` method.
|
|
204
|
-
* If no payments are found, it returns a default value of 0.
|
|
205
|
-
*
|
|
206
|
-
* @returns {number} The total payment amount, or 0 if no payments are present.
|
|
207
|
-
*/
|
|
208
|
-
getTotalPayments() {
|
|
209
|
-
let paymentsTotal = 0;
|
|
210
|
-
if (this.paymentGroup.payments) {
|
|
211
|
-
paymentsTotal = this.paymentGroup.payments.reduce((totalFees, payment) => totalFees + payment.amount, 0);
|
|
212
|
-
}
|
|
213
|
-
return paymentsTotal;
|
|
214
|
-
}
|
|
215
|
-
// Refunds libs section.
|
|
216
|
-
/**
|
|
217
|
-
* This function is used to find out if the current refunds list are in progress for the fee passed as parameter
|
|
218
|
-
* @param fee this is the fee used to find out if the refunds are in progress.
|
|
219
|
-
*/
|
|
220
|
-
isTheCurrentRefundInProcessForThisFee(fee) {
|
|
221
|
-
// No refunds
|
|
222
|
-
if (this.refunds == null || this.refunds.length === 0) {
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
return !this.isTheCurrentRefundRejectedForTheFee(fee.id.toString());
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* This function is used to find out if in current list of refunds all refunds has been rejected
|
|
229
|
-
* for the fee passed as parameter.
|
|
230
|
-
* @param feeCode this is the fee code used to find out all refunds rejected refunds.
|
|
231
|
-
*/
|
|
232
|
-
isTheCurrentRefundRejectedForTheFee(feeCode) {
|
|
233
|
-
let refundsByFee = this.refunds.filter(refund => refund.fee_ids === feeCode);
|
|
234
|
-
let refundsByFeeAndRejected = this.refunds.filter(refund => refund.refund_status.name === 'Rejected');
|
|
235
|
-
// Refunds > 0 and overPayment --> refunds in process or Rejected.
|
|
236
|
-
if (refundsByFee.length === refundsByFeeAndRejected.length) {
|
|
237
|
-
return true;
|
|
238
|
-
}
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Rounds very small values to zero if they fall below a specified threshold.
|
|
243
|
-
*
|
|
244
|
-
* This is useful for eliminating floating-point precision errors that result in
|
|
245
|
-
* extremely small non-zero values (e.g., 1.1368683772161603e-13) which should
|
|
246
|
-
* logically be treated as zero.
|
|
247
|
-
*
|
|
248
|
-
* @param value - The numeric value to evaluate and potentially round.
|
|
249
|
-
* @param threshold - The minimum absolute value considered significant. Defaults to 1e-10.
|
|
250
|
-
* @returns The original value if it's above the threshold, or 0 if it's below.
|
|
251
|
-
*
|
|
252
|
-
* @example
|
|
253
|
-
* roundTinyValue(1.1368683772161603e-13); // returns 0
|
|
254
|
-
* roundTinyValue(0.00001); // returns 0.00001
|
|
255
|
-
*/
|
|
256
|
-
roundTinyValue(value, threshold = 1e-4) {
|
|
257
|
-
return Math.abs(value) < threshold ? 0 : value;
|
|
258
|
-
}
|
|
259
|
-
getRoundedOverPayment() {
|
|
260
|
-
return this.roundTinyValue(this.overPaymentAmount);
|
|
261
|
-
}
|
|
262
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaymentLibComponent, deps: [{ token: i1.PaymentLibService }, { token: i0.ChangeDetectorRef }, { token: i2.OrderslistService }], target: i0.ɵɵFactoryTarget.Component });
|
|
263
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PaymentLibComponent, selector: "ccpay-payment-lib", inputs: { API_ROOT: "API_ROOT", BULKSCAN_API_ROOT: "BULKSCAN_API_ROOT", REFUNDS_API_ROOT: "REFUNDS_API_ROOT", NOTIFICATION_API_ROOT: "NOTIFICATION_API_ROOT", CARDPAYMENTRETURNURL: "CARDPAYMENTRETURNURL", CCD_CASE_NUMBER: "CCD_CASE_NUMBER", EXC_REFERENCE: "EXC_REFERENCE", PAYMENT_METHOD: "PAYMENT_METHOD", VIEW: "VIEW", VIEWSERVICE: "VIEWSERVICE", PAYMENT_GROUP_REF: "PAYMENT_GROUP_REF", TAKEPAYMENT: "TAKEPAYMENT", SERVICEREQUEST: "SERVICEREQUEST", DCN_NUMBER: "DCN_NUMBER", SELECTED_OPTION: "SELECTED_OPTION", ISBSENABLE: "ISBSENABLE", ISSFENABLE: "ISSFENABLE", ISTURNOFF: "ISTURNOFF", CASETYPE: "CASETYPE", ISPAYMENTSTATUSENABLED: "ISPAYMENTSTATUSENABLED", rootUrl: "rootUrl", REFUNDLIST: "REFUNDLIST", USERID: "USERID", LOGGEDINUSERROLES: "LOGGEDINUSERROLES", LOGGEDINUSEREMAIL: "LOGGEDINUSEREMAIL", isFromServiceRequestPage: "isFromServiceRequestPage", telephonySelectionEnable: "telephonySelectionEnable" }, providers: [{ provide: 'PAYMENT_LIB', useExisting: forwardRef(() => PaymentLibComponent) }], ngImport: i0, template: `
|
|
264
|
-
<ccpay-refund-list [USERID]="USERID" [LOGGEDINUSERROLES]="LOGGEDINUSERROLES" [LOGGEDINUSEREMAIL]="LOGGEDINUSEREMAIL" *ngIf="viewName === 'refund-list'"></ccpay-refund-list>
|
|
265
|
-
<ccpay-payment-list *ngIf="viewName === 'payment-list'"></ccpay-payment-list>
|
|
266
|
-
<ccpay-refund-status
|
|
267
|
-
[LOGGEDINUSERROLES]="LOGGEDINUSERROLES"
|
|
268
|
-
[API_ROOT]="API_ROOT"
|
|
269
|
-
*ngIf="viewName === 'refundstatuslist'"> </ccpay-refund-status >
|
|
270
|
-
<ccpay-payment-view [LOGGEDINUSERROLES]="LOGGEDINUSERROLES" *ngIf="viewName === 'payment-view'"
|
|
271
|
-
[isTurnOff]="ISTURNOFF" [isTakePayment]="TAKEPAYMENT" [caseType]="CASETYPE"
|
|
272
|
-
[ISPAYMENTSTATUSENABLED] = "ISPAYMENTSTATUSENABLED"
|
|
273
|
-
></ccpay-payment-view>
|
|
274
|
-
|
|
275
|
-
<ccpay-process-refund *ngIf="viewName === 'process-refund'"
|
|
276
|
-
[refundReference]="refundReference"
|
|
277
|
-
[refundlistsource]="refundlistsource"
|
|
278
|
-
></ccpay-process-refund>
|
|
279
|
-
<ccpay-pba-payment *ngIf="viewName === 'pba-payment'"
|
|
280
|
-
[pbaPayOrderRef]="pbaPayOrderRef"
|
|
281
|
-
></ccpay-pba-payment>
|
|
282
|
-
<ccpay-case-transactions [isTakePayment]="isTakePayment" [isFromServiceRequestPage]="isFromServiceRequestPage" [LOGGEDINUSERROLES]="LOGGEDINUSERROLES" *ngIf="viewName === 'case-transactions'"></ccpay-case-transactions>
|
|
283
|
-
<app-mark-unidentified-payment *ngIf="viewName === 'unidentifiedPage'"
|
|
284
|
-
[caseType]="CASETYPE"></app-mark-unidentified-payment>
|
|
285
|
-
<app-mark-unsolicited-payment *ngIf="viewName === 'unsolicitedPage'"
|
|
286
|
-
[caseType]="CASETYPE"></app-mark-unsolicited-payment>
|
|
287
|
-
<app-allocate-payments *ngIf="viewName === 'allocate-payments'"
|
|
288
|
-
[isTurnOff]="ISTURNOFF"
|
|
289
|
-
[caseType]="CASETYPE"
|
|
290
|
-
></app-allocate-payments>
|
|
291
|
-
<ccpay-fee-summary *ngIf="viewName === 'fee-summary'"
|
|
292
|
-
[ccdCaseNumber]="CCD_CASE_NUMBER"
|
|
293
|
-
[paymentGroupRef]="paymentGroupReference"
|
|
294
|
-
[isTurnOff]="ISTURNOFF"
|
|
295
|
-
[caseType]="CASETYPE"
|
|
296
|
-
[telephonySelectionEnable] ="telephonySelectionEnable"
|
|
297
|
-
></ccpay-fee-summary>
|
|
298
|
-
<ccpay-reports *ngIf="viewName === 'reports'"
|
|
299
|
-
[ISPAYMENTSTATUSENABLED] = "ISPAYMENTSTATUSENABLED"
|
|
300
|
-
></ccpay-reports>
|
|
301
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PaymentViewComponent, selector: "ccpay-payment-view", inputs: ["isTurnOff", "isTakePayment", "caseType", "orderRef", "orderStatus", "orderTotalPayments", "payment", "LOGGEDINUSERROLES", "ISPAYMENTSTATUSENABLED", "orderParty", "orderCreated", "orderCCDEvent", "orderFeesTotal", "orderRemissionTotal", "orderDetail", "isServiceRequest"] }, { kind: "component", type: i5.CaseTransactionsComponent, selector: "ccpay-case-transactions", inputs: ["LOGGEDINUSERROLES", "isTakePayment", "isFromServiceRequestPage"] }, { kind: "component", type: i6.RefundStatusComponent, selector: "ccpay-refund-status", inputs: ["LOGGEDINUSERROLES", "API_ROOT", "ccdCaseNumber", "isTurnOff", "orderParty"] }, { kind: "component", type: i7.PbaPaymentComponent, selector: "ccpay-pba-payment", inputs: ["pbaPayOrderRef"] }, { kind: "component", type: i8.PaymentListComponent, selector: "ccpay-payment-list" }, { kind: "component", type: i9.ProcessRefundComponent, selector: "ccpay-process-refund", inputs: ["refundReference", "refundlistsource"] }, { kind: "component", type: i10.RefundListComponent, selector: "ccpay-refund-list", inputs: ["USERID", "LOGGEDINUSERROLES", "LOGGEDINUSEREMAIL"] }, { kind: "component", type: i11.MarkUnidentifiedPaymentComponent, selector: "app-mark-unidentified-payment", inputs: ["caseType"] }, { kind: "component", type: i12.MarkUnsolicitedPaymentComponent, selector: "app-mark-unsolicited-payment", inputs: ["caseType"] }, { kind: "component", type: i13.AllocatePaymentsComponent, selector: "app-allocate-payments", inputs: ["isTurnOff", "caseType"], outputs: ["reasonEventEmitter", "explanationEventEmitter"] }, { kind: "component", type: i14.FeeSummaryComponent, selector: "ccpay-fee-summary", inputs: ["paymentGroupRef", "ccdCaseNumber", "isTurnOff", "caseType", "telephonySelectionEnable"] }, { kind: "component", type: i15.ReportsComponent, selector: "ccpay-reports", inputs: ["ISPAYMENTSTATUSENABLED"] }] });
|
|
302
|
-
}
|
|
303
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaymentLibComponent, decorators: [{
|
|
304
|
-
type: Component,
|
|
305
|
-
args: [{
|
|
306
|
-
selector: 'ccpay-payment-lib',
|
|
307
|
-
template: `
|
|
308
|
-
<ccpay-refund-list [USERID]="USERID" [LOGGEDINUSERROLES]="LOGGEDINUSERROLES" [LOGGEDINUSEREMAIL]="LOGGEDINUSEREMAIL" *ngIf="viewName === 'refund-list'"></ccpay-refund-list>
|
|
309
|
-
<ccpay-payment-list *ngIf="viewName === 'payment-list'"></ccpay-payment-list>
|
|
310
|
-
<ccpay-refund-status
|
|
311
|
-
[LOGGEDINUSERROLES]="LOGGEDINUSERROLES"
|
|
312
|
-
[API_ROOT]="API_ROOT"
|
|
313
|
-
*ngIf="viewName === 'refundstatuslist'"> </ccpay-refund-status >
|
|
314
|
-
<ccpay-payment-view [LOGGEDINUSERROLES]="LOGGEDINUSERROLES" *ngIf="viewName === 'payment-view'"
|
|
315
|
-
[isTurnOff]="ISTURNOFF" [isTakePayment]="TAKEPAYMENT" [caseType]="CASETYPE"
|
|
316
|
-
[ISPAYMENTSTATUSENABLED] = "ISPAYMENTSTATUSENABLED"
|
|
317
|
-
></ccpay-payment-view>
|
|
318
|
-
|
|
319
|
-
<ccpay-process-refund *ngIf="viewName === 'process-refund'"
|
|
320
|
-
[refundReference]="refundReference"
|
|
321
|
-
[refundlistsource]="refundlistsource"
|
|
322
|
-
></ccpay-process-refund>
|
|
323
|
-
<ccpay-pba-payment *ngIf="viewName === 'pba-payment'"
|
|
324
|
-
[pbaPayOrderRef]="pbaPayOrderRef"
|
|
325
|
-
></ccpay-pba-payment>
|
|
326
|
-
<ccpay-case-transactions [isTakePayment]="isTakePayment" [isFromServiceRequestPage]="isFromServiceRequestPage" [LOGGEDINUSERROLES]="LOGGEDINUSERROLES" *ngIf="viewName === 'case-transactions'"></ccpay-case-transactions>
|
|
327
|
-
<app-mark-unidentified-payment *ngIf="viewName === 'unidentifiedPage'"
|
|
328
|
-
[caseType]="CASETYPE"></app-mark-unidentified-payment>
|
|
329
|
-
<app-mark-unsolicited-payment *ngIf="viewName === 'unsolicitedPage'"
|
|
330
|
-
[caseType]="CASETYPE"></app-mark-unsolicited-payment>
|
|
331
|
-
<app-allocate-payments *ngIf="viewName === 'allocate-payments'"
|
|
332
|
-
[isTurnOff]="ISTURNOFF"
|
|
333
|
-
[caseType]="CASETYPE"
|
|
334
|
-
></app-allocate-payments>
|
|
335
|
-
<ccpay-fee-summary *ngIf="viewName === 'fee-summary'"
|
|
336
|
-
[ccdCaseNumber]="CCD_CASE_NUMBER"
|
|
337
|
-
[paymentGroupRef]="paymentGroupReference"
|
|
338
|
-
[isTurnOff]="ISTURNOFF"
|
|
339
|
-
[caseType]="CASETYPE"
|
|
340
|
-
[telephonySelectionEnable] ="telephonySelectionEnable"
|
|
341
|
-
></ccpay-fee-summary>
|
|
342
|
-
<ccpay-reports *ngIf="viewName === 'reports'"
|
|
343
|
-
[ISPAYMENTSTATUSENABLED] = "ISPAYMENTSTATUSENABLED"
|
|
344
|
-
></ccpay-reports>
|
|
345
|
-
`,
|
|
346
|
-
providers: [{ provide: 'PAYMENT_LIB', useExisting: forwardRef(() => PaymentLibComponent) }]
|
|
347
|
-
}]
|
|
348
|
-
}], ctorParameters: () => [{ type: i1.PaymentLibService }, { type: i0.ChangeDetectorRef }, { type: i2.OrderslistService }], propDecorators: { API_ROOT: [{
|
|
349
|
-
type: Input,
|
|
350
|
-
args: ['API_ROOT']
|
|
351
|
-
}], BULKSCAN_API_ROOT: [{
|
|
352
|
-
type: Input,
|
|
353
|
-
args: ['BULKSCAN_API_ROOT']
|
|
354
|
-
}], REFUNDS_API_ROOT: [{
|
|
355
|
-
type: Input,
|
|
356
|
-
args: ['REFUNDS_API_ROOT']
|
|
357
|
-
}], NOTIFICATION_API_ROOT: [{
|
|
358
|
-
type: Input,
|
|
359
|
-
args: ['NOTIFICATION_API_ROOT']
|
|
360
|
-
}], CARDPAYMENTRETURNURL: [{
|
|
361
|
-
type: Input,
|
|
362
|
-
args: ['CARDPAYMENTRETURNURL']
|
|
363
|
-
}], CCD_CASE_NUMBER: [{
|
|
364
|
-
type: Input,
|
|
365
|
-
args: ['CCD_CASE_NUMBER']
|
|
366
|
-
}], EXC_REFERENCE: [{
|
|
367
|
-
type: Input,
|
|
368
|
-
args: ['EXC_REFERENCE']
|
|
369
|
-
}], PAYMENT_METHOD: [{
|
|
370
|
-
type: Input,
|
|
371
|
-
args: ['PAYMENT_METHOD']
|
|
372
|
-
}], VIEW: [{
|
|
373
|
-
type: Input,
|
|
374
|
-
args: ['VIEW']
|
|
375
|
-
}], VIEWSERVICE: [{
|
|
376
|
-
type: Input,
|
|
377
|
-
args: ['VIEWSERVICE']
|
|
378
|
-
}], PAYMENT_GROUP_REF: [{
|
|
379
|
-
type: Input,
|
|
380
|
-
args: ['PAYMENT_GROUP_REF']
|
|
381
|
-
}], TAKEPAYMENT: [{
|
|
382
|
-
type: Input,
|
|
383
|
-
args: ['TAKEPAYMENT']
|
|
384
|
-
}], SERVICEREQUEST: [{
|
|
385
|
-
type: Input,
|
|
386
|
-
args: ['SERVICEREQUEST']
|
|
387
|
-
}], DCN_NUMBER: [{
|
|
388
|
-
type: Input,
|
|
389
|
-
args: ['DCN_NUMBER']
|
|
390
|
-
}], SELECTED_OPTION: [{
|
|
391
|
-
type: Input,
|
|
392
|
-
args: ['SELECTED_OPTION']
|
|
393
|
-
}], ISBSENABLE: [{
|
|
394
|
-
type: Input,
|
|
395
|
-
args: ['ISBSENABLE']
|
|
396
|
-
}], ISSFENABLE: [{
|
|
397
|
-
type: Input,
|
|
398
|
-
args: ['ISSFENABLE']
|
|
399
|
-
}], ISTURNOFF: [{
|
|
400
|
-
type: Input,
|
|
401
|
-
args: ['ISTURNOFF']
|
|
402
|
-
}], CASETYPE: [{
|
|
403
|
-
type: Input,
|
|
404
|
-
args: ['CASETYPE']
|
|
405
|
-
}], ISPAYMENTSTATUSENABLED: [{
|
|
406
|
-
type: Input,
|
|
407
|
-
args: ['ISPAYMENTSTATUSENABLED']
|
|
408
|
-
}], rootUrl: [{
|
|
409
|
-
type: Input,
|
|
410
|
-
args: ['rootUrl']
|
|
411
|
-
}], REFUNDLIST: [{
|
|
412
|
-
type: Input,
|
|
413
|
-
args: ['REFUNDLIST']
|
|
414
|
-
}], USERID: [{
|
|
415
|
-
type: Input,
|
|
416
|
-
args: ['USERID']
|
|
417
|
-
}], LOGGEDINUSERROLES: [{
|
|
418
|
-
type: Input,
|
|
419
|
-
args: ['LOGGEDINUSERROLES']
|
|
420
|
-
}], LOGGEDINUSEREMAIL: [{
|
|
421
|
-
type: Input,
|
|
422
|
-
args: ['LOGGEDINUSEREMAIL']
|
|
423
|
-
}], isFromServiceRequestPage: [{
|
|
424
|
-
type: Input,
|
|
425
|
-
args: ['isFromServiceRequestPage']
|
|
426
|
-
}], telephonySelectionEnable: [{
|
|
427
|
-
type: Input,
|
|
428
|
-
args: ['telephonySelectionEnable']
|
|
429
|
-
}] } });
|
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1saWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF5bWVudC1saWIvc3JjL2xpYi9wYXltZW50LWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQXFEaEUsTUFBTSxPQUFPLG1CQUFtQjtJQXFFVjtJQUNWO0lBQ0E7SUF0RVMsUUFBUSxDQUFTO0lBQ1IsaUJBQWlCLENBQVM7SUFDM0IsZ0JBQWdCLENBQVM7SUFDcEIscUJBQXFCLENBQVM7SUFDL0Isb0JBQW9CLENBQVM7SUFDbEMsZUFBZSxDQUFTO0lBQzFCLGFBQWEsQ0FBUztJQUNyQixjQUFjLENBQVM7SUFDakMsSUFBSSxDQUFTO0lBQ04sV0FBVyxDQUFTO0lBQ2QsaUJBQWlCLENBQVU7SUFDakMsV0FBVyxDQUFVO0lBQ2xCLGNBQWMsQ0FBUztJQUMzQixVQUFVLENBQVM7SUFDZCxlQUFlLENBQVM7SUFDN0IsVUFBVSxDQUFVO0lBQ3BCLFVBQVUsQ0FBVTtJQUNyQixTQUFTLENBQVU7SUFDcEIsUUFBUSxDQUFTO0lBQ0gsc0JBQXNCLENBQVU7SUFDL0MsT0FBTyxDQUFVO0lBQ2QsVUFBVSxDQUFTO0lBQ3ZCLE1BQU0sQ0FBUztJQUNKLGlCQUFpQixDQUFRO0lBQ3pCLGlCQUFpQixDQUFTO0lBQ25CLHdCQUF3QixDQUFVO0lBQ2xDLHdCQUF3QixDQUFVO0lBSXJFLGFBQWEsQ0FBUztJQUN0QixZQUFZLENBQVM7SUFDckIsMkJBQTJCLEdBQVcsSUFBSSxDQUFDO0lBQzNDLHFCQUFx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QkFBQyxpQkFBaUI7Z0JBQ0gsVUFBVTtzQkFBOUIsS0FBSzt1QkFBQyxZQUFZO2dCQUNFLFVBQVU7c0JBQTlCLEtBQUs7dUJBQUMsWUFBWTtnQkFDQyxTQUFTO3NCQUE1QixLQUFLO3VCQUFDLFdBQVc7Z0JBQ0MsUUFBUTtzQkFBMUIsS0FBSzt1QkFBQyxVQUFVO2dCQUNnQixzQkFBc0I7c0JBQXRELEtBQUs7dUJBQUMsd0JBQXdCO2dCQUNiLE9BQU87c0JBQXhCLEtBQUs7dUJBQUMsU0FBUztnQkFDSyxVQUFVO3NCQUE5QixLQUFLO3VCQUFDLFlBQVk7Z0JBQ0YsTUFBTTtzQkFBdEIsS0FBSzt1QkFBQyxRQUFRO2dCQUNhLGlCQUFpQjtzQkFBNUMsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBQ0UsaUJBQWlCO3NCQUE1QyxLQUFLO3VCQUFDLG1CQUFtQjtnQkFDUyx3QkFBd0I7c0JBQTFELEtBQUs7dUJBQUMsMEJBQTBCO2dCQUNFLHdCQUF3QjtzQkFBMUQsS0FBSzt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYXltZW50TGliU2VydmljZX0gZnJvbSAnLi9wYXltZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7SUJTUGF5bWVudHN9IGZyb20gJy4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQge09yZGVyc2xpc3RTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL29yZGVyc2xpc3Quc2VydmljZSc7XG5pbXBvcnQge0lQYXltZW50fSBmcm9tICcuL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tIFwiLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXBcIjtcbmltcG9ydCB7SVJlZnVuZExpc3R9IGZyb20gXCIuL2ludGVyZmFjZXMvSVJlZnVuZExpc3RcIjtcbmltcG9ydCB7SUZlZX0gZnJvbSBcIi4vaW50ZXJmYWNlcy9JRmVlXCI7XG5pbXBvcnQge0lSZW1pc3Npb259IGZyb20gXCIuL2ludGVyZmFjZXMvSVJlbWlzc2lvblwiO1xuaW1wb3J0IHtBZGRSZXRyb1JlbWlzc2lvblJlcXVlc3R9IGZyb20gXCIuL2ludGVyZmFjZXMvQWRkUmV0cm9SZW1pc3Npb25SZXF1ZXN0XCI7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGF5bWVudC1saWInLFxuICB0ZW1wbGF0ZTogYFxuICA8Y2NwYXktcmVmdW5kLWxpc3QgW1VTRVJJRF09XCJVU0VSSURcIiBbTE9HR0VESU5VU0VSUk9MRVNdPVwiTE9HR0VESU5VU0VSUk9MRVNcIiBbTE9HR0VESU5VU0VSRU1BSUxdPVwiTE9HR0VESU5VU0VSRU1BSUxcIiAqbmdJZj1cInZpZXdOYW1lID09PSAncmVmdW5kLWxpc3QnXCI+PC9jY3BheS1yZWZ1bmQtbGlzdD5cbiAgICA8Y2NwYXktcGF5bWVudC1saXN0ICpuZ0lmPVwidmlld05hbWUgPT09ICdwYXltZW50LWxpc3QnXCI+PC9jY3BheS1wYXltZW50LWxpc3Q+XG4gICAgPGNjcGF5LXJlZnVuZC1zdGF0dXNcbiAgICBbTE9HR0VESU5VU0VSUk9MRVNdPVwiTE9HR0VESU5VU0VSUk9MRVNcIlxuICAgIFtBUElfUk9PVF09XCJBUElfUk9PVFwiXG4gICAgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3JlZnVuZHN0YXR1c2xpc3QnXCI+IDwvY2NwYXktcmVmdW5kLXN0YXR1cyA+XG4gICAgPGNjcGF5LXBheW1lbnQtdmlldyBbTE9HR0VESU5VU0VSUk9MRVNdPVwiTE9HR0VESU5VU0VSUk9MRVNcIiAqbmdJZj1cInZpZXdOYW1lID09PSAncGF5bWVudC12aWV3J1wiXG4gICAgW2lzVHVybk9mZl09XCJJU1RVUk5PRkZcIiBbaXNUYWtlUGF5bWVudF09XCJUQUtFUEFZTUVOVFwiICBbY2FzZVR5cGVdPVwiQ0FTRVRZUEVcIlxuICAgIFtJU1BBWU1FTlRTVEFUVVNFTkFCTEVEXSA9IFwiSVNQQVlNRU5UU1RBVFVTRU5BQkxFRFwiXG4gICAgPjwvY2NwYXktcGF5bWVudC12aWV3PlxuXG4gICAgPGNjcGF5LXByb2Nlc3MtcmVmdW5kICpuZ0lmPVwidmlld05hbWUgPT09ICdwcm9jZXNzLXJlZnVuZCdcIlxuICAgIFtyZWZ1bmRSZWZlcmVuY2VdPVwicmVmdW5kUmVmZXJlbmNlXCJcbiAgICBbcmVmdW5kbGlzdHNvdXJjZV09XCJyZWZ1bmRsaXN0c291cmNlXCJcbiAgICA+PC9jY3BheS1wcm9jZXNzLXJlZnVuZD5cbiAgICA8Y2NwYXktcGJhLXBheW1lbnQgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3BiYS1wYXltZW50J1wiXG4gICAgW3BiYVBheU9yZGVyUmVmXT1cInBiYVBheU9yZGVyUmVmXCJcbiAgICA+PC9jY3BheS1wYmEtcGF5bWVudD5cbiAgICA8Y2NwYXktY2FzZS10cmFuc2FjdGlvbnMgW2lzVGFrZVBheW1lbnRdPVwiaXNUYWtlUGF5bWVudFwiIFtpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2VdPVwiaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlXCIgW0xPR0dFRElOVVNFUlJPTEVTXT1cIkxPR0dFRElOVVNFUlJPTEVTXCIgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ2Nhc2UtdHJhbnNhY3Rpb25zJ1wiPjwvY2NwYXktY2FzZS10cmFuc2FjdGlvbnM+XG4gICAgPGFwcC1tYXJrLXVuaWRlbnRpZmllZC1wYXltZW50ICpuZ0lmPVwidmlld05hbWUgPT09ICd1bmlkZW50aWZpZWRQYWdlJ1wiXG4gICAgW2Nhc2VUeXBlXT1cIkNBU0VUWVBFXCI+PC9hcHAtbWFyay11bmlkZW50aWZpZWQtcGF5bWVudD5cbiAgICA8YXBwLW1hcmstdW5zb2xpY2l0ZWQtcGF5bWVudCAqbmdJZj1cInZpZXdOYW1lID09PSAndW5zb2xpY2l0ZWRQYWdlJ1wiXG4gICAgW2Nhc2VUeXBlXT1cIkNBU0VUWVBFXCI+PC9hcHAtbWFyay11bnNvbGljaXRlZC1wYXltZW50PlxuICAgIDxhcHAtYWxsb2NhdGUtcGF5bWVudHMgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ2FsbG9jYXRlLXBheW1lbnRzJ1wiXG4gICAgW2lzVHVybk9mZl09XCJJU1RVUk5PRkZcIlxuICAgIFtjYXNlVHlwZV09XCJDQVNFVFlQRVwiXG4gICAgPjwvYXBwLWFsbG9jYXRlLXBheW1lbnRzPlxuICAgIDxjY3BheS1mZWUtc3VtbWFyeSAqbmdJZj1cInZpZXdOYW1lID09PSAnZmVlLXN1bW1hcnknXCJcbiAgICAgIFtjY2RDYXNlTnVtYmVyXT1cIkNDRF9DQVNFX05VTUJFUlwiXG4gICAgICBbcGF5bWVudEdyb3VwUmVmXT1cInBheW1lbnRHcm91cFJlZmVyZW5jZVwiXG4gICAgICBbaXNUdXJuT2ZmXT1cIklTVFVSTk9GRlwiXG4gICAgICBbY2FzZVR5cGVdPVwiQ0FTRVRZUEVcIlxuICAgICAgW3RlbGVwaG9ueVNlbGVjdGlvbkVuYWJsZV0gPVwidGVsZXBob255U2VsZWN0aW9uRW5hYmxlXCJcbiAgICAgID48L2NjcGF5LWZlZS1zdW1tYXJ5PlxuICAgIDxjY3BheS1yZXBvcnRzICpuZ0lmPVwidmlld05hbWUgPT09ICdyZXBvcnRzJ1wiXG4gICAgW0lTUEFZTUVOVFNUQVRVU0VOQUJMRURdID0gXCJJU1BBWU1FTlRTVEFUVVNFTkFCTEVEXCJcbiAgICA+PC9jY3BheS1yZXBvcnRzPlxuICAgIGAsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogJ1BBWU1FTlRfTElCJywgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGF5bWVudExpYkNvbXBvbmVudCkgfV1cbn0pXG5cbmV4cG9ydCBjbGFzcyBQYXltZW50TGliQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdBUElfUk9PVCcpIEFQSV9ST09UOiBzdHJpbmc7XG4gIEBJbnB1dCgnQlVMS1NDQU5fQVBJX1JPT1QnKSBCVUxLU0NBTl9BUElfUk9PVDogc3RyaW5nO1xuICBASW5wdXQoJ1JFRlVORFNfQVBJX1JPT1QnKSBSRUZVTkRTX0FQSV9ST09UOiBzdHJpbmc7XG4gIEBJbnB1dCgnTk9USUZJQ0FUSU9OX0FQSV9ST09UJykgTk9USUZJQ0FUSU9OX0FQSV9ST09UOiBzdHJpbmc7XG4gIEBJbnB1dCgnQ0FSRFBBWU1FTlRSRVRVUk5VUkwnKSBDQVJEUEFZTUVOVFJFVFVSTlVSTDogc3RyaW5nO1xuICBASW5wdXQoJ0NDRF9DQVNFX05VTUJFUicpIENDRF9DQVNFX05VTUJFUjogc3RyaW5nO1xuICBASW5wdXQoJ0VYQ19SRUZFUkVOQ0UnKSBFWENfUkVGRVJFTkNFOiBzdHJpbmc7XG4gIEBJbnB1dCgnUEFZTUVOVF9NRVRIT0QnKSBQQVlNRU5UX01FVEhPRDogc3RyaW5nO1xuICBASW5wdXQoJ1ZJRVcnKSBWSUVXOiBzdHJpbmc7XG4gIEBJbnB1dCgnVklFV1NFUlZJQ0UnKSBWSUVXU0VSVklDRTogc3RyaW5nO1xuICBASW5wdXQoJ1BBWU1FTlRfR1JPVVBfUkVGJykgUEFZTUVOVF9HUk9VUF9SRUY/OiBzdHJpbmc7XG4gIEBJbnB1dCgnVEFLRVBBWU1FTlQnKSBUQUtFUEFZTUVOVDogYm9vbGVhbjtcbiAgQElucHV0KCdTRVJWSUNFUkVRVUVTVCcpIFNFUlZJQ0VSRVFVRVNUOiBzdHJpbmc7XG4gIEBJbnB1dCgnRENOX05VTUJFUicpIERDTl9OVU1CRVI6IHN0cmluZztcbiAgQElucHV0KCdTRUxFQ1RFRF9PUFRJT04nKSBTRUxFQ1RFRF9PUFRJT046IHN0cmluZztcbiAgQElucHV0KCdJU0JTRU5BQkxFJykgSVNCU0VOQUJMRTogQm9vbGVhbjtcbiAgQElucHV0KCdJU1NGRU5BQkxFJykgSVNTRkVOQUJMRTogYm9vbGVhbjtcbiAgQElucHV0KCdJU1RVUk5PRkYnKSBJU1RVUk5PRkY6IGJvb2xlYW47XG4gIEBJbnB1dCgnQ0FTRVRZUEUnKSBDQVNFVFlQRTogc3RyaW5nO1xuICBASW5wdXQoJ0lTUEFZTUVOVFNUQVRVU0VOQUJMRUQnKSBJU1BBWU1FTlRTVEFUVVNFTkFCTEVEOiBib29sZWFuO1xuICBASW5wdXQoJ3Jvb3RVcmwnKSByb290VXJsOiBib29sZWFuO1xuICBASW5wdXQoJ1JFRlVORExJU1QnKSBSRUZVTkRMSVNUOiBzdHJpbmc7XG4gIEBJbnB1dCgnVVNFUklEJykgVVNFUklEOiBzdHJpbmc7XG4gIEBJbnB1dCgnTE9HR0VESU5VU0VSUk9MRVMnKSBMT0dHRURJTlVTRVJST0xFUzogYW55W107XG4gIEBJbnB1dCgnTE9HR0VESU5VU0VSRU1BSUwnKSBMT0dHRURJTlVTRVJFTUFJTDogc3RyaW5nO1xuICBASW5wdXQoJ2lzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZScpIGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCd0ZWxlcGhvbnlTZWxlY3Rpb25FbmFibGUnKSB0ZWxlcGhvbnlTZWxlY3Rpb25FbmFibGU6IGJvb2xlYW47XG5cblxuXG4gIHBheW1lbnRNZXRob2Q6IHN0cmluZztcbiAgYnNwYXltZW50ZGNuOiBzdHJpbmc7XG4gIHVuUHJvY2Vzc2VkUGF5bWVudFNlcnZpY2VJZDogc3RyaW5nID0gbnVsbDtcbiAgcGF5bWVudEdyb3VwUmVmZXJlbmNlOiBzdHJpbmc7XG4gIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVmdW5kUmVmZXJlbmNlOiBzdHJpbmc7XG4gIGlzRnJvbVBheUJ1YmJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICByZWZ1bmRsaXN0c291cmNlOiBhbnk7XG4gIHZpZXdOYW1lOiBzdHJpbmc7XG4gIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgY2FzZVR5cGU6IHN0cmluZztcbiAgdW5Qcm9jZXNzZWRQYXltZW50OiBJQlNQYXltZW50cyA9IG51bGw7XG4gIGlzUmVmdW5kU3RhdHVzVmlldzogYm9vbGVhbjtcbiAgaXNSZWRpcmVjdEZyb21DYXNlVHJhbnNhY3Rpb25QYWdlOiBzdHJpbmc7XG4gIGlzQ2FsbEZyb21SZWZ1bmRMaXN0OiBib29sZWFuO1xuICBpc0Zyb21SZWZ1bmRTdGF0dXNQYWdlOiBib29sZWFuO1xuICBpc2NhbmNlbENsaWNrZWQ6IGJvb2xlYW47XG4gIGlzRnJvbVBheW1lbnREZXRhaWxQYWdlOiBib29sZWFuO1xuICBwYmFQYXlPcmRlclJlZjogSVBheW1lbnQ7XG4gIGlzVGFrZVBheW1lbnQ6IGJvb2xlYW47XG5cbiAgb3JkZXJEZXRhaWw6IGFueVtdO1xuICBvcmRlclJlZjogc3RyaW5nO1xuICBvcmRlclN0YXR1czogc3RyaW5nO1xuICBvcmRlclBhcnR5OiBzdHJpbmc7XG4gIG9yZGVyQ3JlYXRlZDogRGF0ZTtcbiAgb3JkZXJDQ0RFdmVudDogc3RyaW5nO1xuICBzZXJ2aWNlUmVxdWVzdFZhbHVlOiBzdHJpbmc7XG4gIG9yZGVyQWRkQnRuRW5hYmxlOiBib29sZWFuO1xuICBvcmRlckZlZXNUb3RhbDogbnVtYmVyID0gMC4wMDtcbiAgb3JkZXJSZW1pc3Npb25Ub3RhbDogbnVtYmVyID0gMC4wMDtcbiAgb3JkZXJUb3RhbFBheW1lbnRzOiBudW1iZXIgPSAwLjAwO1xuICBvcmRlclBlbmRpbmdQYXltZW50czogbnVtYmVyID0gMC4wMDtcblxuICBwYXltZW50R3JvdXA6SVBheW1lbnRHcm91cFxuICBvdmVyUGF5bWVudEFtb3VudDogbnVtYmVyID0gMC4wMDtcbiAgcmVmdW5kczogSVJlZnVuZExpc3RbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBheW1lbnRMaWJTZXJ2aWNlOiBQYXltZW50TGliU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIE9yZGVyc2xpc3RTZXJ2aWNlOiBPcmRlcnNsaXN0U2VydmljZSkgeyB9XG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICB0aGlzLnBheW1lbnRMaWJTZXJ2aWNlLnNldEFwaVJvb3RVcmwodGhpcy5BUElfUk9PVCk7XG4gICAgdGhpcy5wYXltZW50TGliU2VydmljZS5zZXRCdWxrU2NhbkFwaVJvb3RVcmwodGhpcy5CVUxLU0NBTl9BUElfUk9PVCk7XG4gICAgdGhpcy5wYXltZW50TGliU2VydmljZS5zZXRSZWZ1bmRuZHNBcGlSb290VXJsKHRoaXMuUkVGVU5EU19BUElfUk9PVCk7XG4gICAgdGhpcy5wYXltZW50TGliU2VydmljZS5zZXROb3RpY2F0aW9uQXBpUm9vdFVybCh0aGlzLk5PVElGSUNBVElPTl9BUElfUk9PVCk7XG4gICAgdGhpcy5wYXltZW50TGliU2VydmljZS5zZXRDYXJkUGF5bWVudFJldHVyblVybCh0aGlzLkNBUkRQQVlNRU5UUkVUVVJOVVJMKTtcblxuICAgIGlmICh0aGlzLkxPR0dFRElOVVNFUlJPTEVTLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0VXNlclJvbGVzTGlzdCh0aGlzLkxPR0dFRElOVVNFUlJPTEVTKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuUEFZTUVOVF9HUk9VUF9SRUYpIHtcbiAgICAgIHRoaXMucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5QQVlNRU5UX0dST1VQX1JFRjtcbiAgICB9XG4gICAgaWYgKHRoaXMuRENOX05VTUJFUikge1xuICAgICAgdGhpcy5ic3BheW1lbnRkY24gPSB0aGlzLkRDTl9OVU1CRVI7XG4gICAgfVxuICAgIGlmICh0aGlzLlJFRlVORExJU1QgPT09IFwidHJ1ZVwiKSB7XG4gICAgICB0aGlzLlZJRVcgPSAncmVmdW5kLWxpc3QnO1xuICAgICAgdGhpcy52aWV3TmFtZSA9IHRoaXMuVklFVztcbiAgICB9XG4gICAgaWYgKHRoaXMuVklFVyA9PT0gJ2ZlZS1zdW1tYXJ5Jykge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdmZWUtc3VtbWFyeSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLlZJRVcgIT09ICdyZXBvcnRzJyAmJiB0aGlzLlZJRVcgIT09ICdyZWZ1bmQtbGlzdCcpIHtcbiAgICAgIHRoaXMudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdOYW1lID0gdGhpcy5WSUVXO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzVGFrZVBheW1lbnQpIHtcbiAgICAgIHRoaXMuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5BUElfUk9PVCA9PSAnYXBpL3BheW1lbnQtaGlzdG9yeScpIHtcbiAgICAgIHRoaXMuaXNGcm9tUGF5QnViYmxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVtaXNzaW9uIHRvIHRoZSBwYXltZW50IGdyb3VwIHVzaW5nIGRhdGEgZnJvbSB0aGUgcHJvdmlkZWQgZm9ybSBncm91cC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBgcGF5bWVudEdyb3VwYCBpcyBub3QgbnVsbCBiZWZvcmUgYXR0ZW1wdGluZyB0byBhZGQgdGhlIHJlbWlzc2lvbi5cbiAgICogSWYgdGhlIGBwYXltZW50R3JvdXBgIGV4aXN0cywgYSBuZXcgcmVtaXNzaW9uIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIHZhbHVlcyBmcm9tIHRoZSBwcm92aWRlZFxuICAgKiBmb3JtIGdyb3VwIChgY3VycmVudFJlbWlzc2lvbkZvcm1Hcm91cGApLCBhbmQgaXQgaXMgcHVzaGVkIGludG8gdGhlIGByZW1pc3Npb25zYCBhcnJheSBvZiB0aGUgcGF5bWVudCBncm91cC5cbiAgICpcbiAgICogQHBhcmFtIHtBZGRSZXRyb1JlbWlzc2lvblJlcXVlc3R9IGN1cnJlbnRSZW1pc3Npb25Gb3JtR3JvdXAgLSBUaGUgZm9ybSBncm91cCBjb250YWluaW5nIHJlbWlzc2lvbiBkYXRhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4sIGBod2ZfYW1vdW50YCwgYGh3Zl9yZWZlcmVuY2VgKS5cbiAgICovXG4gIGFkZFJlbWlzc2lvbihjdXJyZW50UmVtaXNzaW9uRm9ybUdyb3VwOiBBZGRSZXRyb1JlbWlzc2lvblJlcXVlc3QpIHtcblxuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cCAhPSBudWxsKSB7XG5cbiAgICAgIGNvbnN0IHJlbWlzc2lvbjogSVJlbWlzc2lvbiA9IHtcblxuICAgICAgICByZW1pc3Npb25fcmVmZXJlbmNlOiBudWxsLFxuICAgICAgICBod2ZfcmVmZXJlbmNlOiBjdXJyZW50UmVtaXNzaW9uRm9ybUdyb3VwLmh3Zl9yZWZlcmVuY2UsXG4gICAgICAgIGh3Zl9hbW91bnQ6IGN1cnJlbnRSZW1pc3Npb25Gb3JtR3JvdXAuaHdmX2Ftb3VudCxcbiAgICAgICAgYmVuZWZpY2lhcnlfbmFtZTogbnVsbCxcbiAgICAgICAgY2NkX2Nhc2VfbnVtYmVyOiBudWxsLFxuICAgICAgICBmZWVfY29kZTogbnVsbCxcbiAgICAgICAgZGF0ZV9jcmVhdGVkOiBudWxsLFxuICAgICAgICBmZWVfaWQ6IG51bGwsXG4gICAgICAgIGlzc3VlX3JlZnVuZF9hZGRfcmVmdW5kX2FkZF9yZW1pc3Npb246IGZhbHNlLFxuICAgICAgICBhZGRfcmVmdW5kOiBmYWxzZSxcbiAgICAgICAgb3ZlcmFsbF9iYWxhbmNlOmN1cnJlbnRSZW1pc3Npb25Gb3JtR3JvdXAuaHdmX2Ftb3VudCxcbiAgICAgICAgYWNvbGxlY3Rpb25fb2ZfZmVzczogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHRoaXMucGF5bWVudEdyb3VwLnJlbWlzc2lvbnMucHVzaChyZW1pc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCB0aGUgcGF5bWVudEdyb3VwIGZvciB0aGUgYWRkIHJlbWlzc2lvbiBqb3VybmV5LlxuICAgKiBAcGFyYW0gdXBkYXRlZFBheW1lbnRHcm91cCB0aGlzIGlzIGFuIHVwZGF0ZWQgcGF5bWVudEdyb3VwIHZlcnNpb24uXG4gICAqL1xuICBhZGRQYXltZW50R3JvdXAodXBkYXRlZFBheW1lbnRHcm91cDpJUGF5bWVudEdyb3VwKXtcbiAgICBpZiAodGhpcy5wYXltZW50R3JvdXAgPT0gbnVsbCl7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gdXBkYXRlZFBheW1lbnRHcm91cDtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCByZW1pc3Npb24gYW1vdW50IGZvciB0aGUgY3VycmVudCBwYXltZW50IGdyb3VwLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHBheW1lbnQgZ3JvdXAgY29udGFpbnMgYW55IHJlbWlzc2lvbnMgYW5kLCBpZiBzbyxcbiAgICogc3VtcyB1cCB0aGUgYGh3Zl9hbW91bnRgIG9mIGFsbCByZW1pc3Npb25zIHVzaW5nIHRoZSBgcmVkdWNlKClgIG1ldGhvZC5cbiAgICogSWYgbm8gcmVtaXNzaW9ucyBhcmUgZm91bmQsIGl0IHJldHVybnMgYSBkZWZhdWx0IHZhbHVlIG9mIDAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB0b3RhbCByZW1pc3Npb24gYW1vdW50LCBvciAwIGlmIG5vIHJlbWlzc2lvbnMgYXJlIHByZXNlbnQuXG4gICAqL1xuXG4gIGdldFRvdGFsUmVtaXNzaW9uKCk6IG51bWJlciB7XG4gICAgbGV0IHJlbWlzc2lvblRvdGFsID0gMDtcbiAgICBpZiAodGhpcy5wYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgcmVtaXNzaW9uVG90YWwgPSB0aGlzLnBheW1lbnRHcm91cC5yZW1pc3Npb25zLnJlZHVjZSgodG90YWxSZW1pc3Npb24sIHJlbWlzc2lvbikgPT4gdG90YWxSZW1pc3Npb24gKyByZW1pc3Npb24uaHdmX2Ftb3VudCwgMCk7XG4gICAgfVxuICAgIHJldHVybiByZW1pc3Npb25Ub3RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBmZWUgYW1vdW50IGZvciB0aGUgY3VycmVudCBwYXltZW50IGdyb3VwLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHBheW1lbnQgZ3JvdXAgY29udGFpbnMgYW55IGZlZXMgYW5kLCBpZiBzbyxcbiAgICogc3VtcyB1cCB0aGUgYGNhbGN1bGF0ZWRfYW1vdW50YCBvZiBhbGwgZmVlcyB1c2luZyB0aGUgYHJlZHVjZSgpYCBtZXRob2QuXG4gICAqIElmIG5vIGZlZXMgYXJlIGZvdW5kLCBpdCByZXR1cm5zIGEgZGVmYXVsdCB2YWx1ZSBvZiAwLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgdG90YWwgZmVlIGFtb3VudCwgb3IgMCBpZiBubyBmZWVzIGFyZSBwcmVzZW50LlxuICAgKi9cbiAgZ2V0VG90YWxGZWVzKCk6IG51bWJlciB7XG4gICAgbGV0IGZlZXNUb3RhbCA9IDA7XG4gICAgaWYgKHRoaXMucGF5bWVudEdyb3VwLmZlZXMpIHtcbiAgICAgIGZlZXNUb3RhbCA9IHRoaXMucGF5bWVudEdyb3VwLmZlZXMucmVkdWNlKCh0b3RhbEZlZXMsIGZlZSkgPT4gdG90YWxGZWVzICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50LCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIGZlZXNUb3RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBwYXltZW50IGFtb3VudCBmb3IgdGhlIGN1cnJlbnQgcGF5bWVudCBncm91cC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBwYXltZW50IGdyb3VwIGNvbnRhaW5zIGFueSBwYXltZW50cyBhbmQsIGlmIHNvLFxuICAgKiBzdW1zIHVwIHRoZSBgYW1vdW50YCBvZiBhbGwgcGF5bWVudHMgdXNpbmcgdGhlIGByZWR1Y2UoKWAgbWV0aG9kLlxuICAgKiBJZiBubyBwYXltZW50cyBhcmUgZm91bmQsIGl0IHJldHVybnMgYSBkZWZhdWx0IHZhbHVlIG9mIDAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB0b3RhbCBwYXltZW50IGFtb3VudCwgb3IgMCBpZiBubyBwYXltZW50cyBhcmUgcHJlc2VudC5cbiAgICovXG4gIGdldFRvdGFsUGF5bWVudHMoKTogbnVtYmVyIHtcbiAgICBsZXQgcGF5bWVudHNUb3RhbCA9IDA7XG4gICAgaWYgKHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICBwYXltZW50c1RvdGFsID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMucmVkdWNlKCh0b3RhbEZlZXMsIHBheW1lbnQpID0+IHRvdGFsRmVlcyArIHBheW1lbnQuYW1vdW50LCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHBheW1lbnRzVG90YWw7XG4gIH1cblxuXG4gIC8vIFJlZnVuZHMgbGlicyBzZWN0aW9uLlxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgcmVmdW5kcyBsaXN0IGFyZSBpbiBwcm9ncmVzcyBmb3IgdGhlIGZlZSBwYXNzZWQgYXMgcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBmZWUgdGhpcyBpcyB0aGUgZmVlIHVzZWQgdG8gZmluZCBvdXQgaWYgdGhlIHJlZnVuZHMgYXJlIGluIHByb2dyZXNzLlxuICAgKi9cbiAgaXNUaGVDdXJyZW50UmVmdW5kSW5Qcm9jZXNzRm9yVGhpc0ZlZShmZWU6IElGZWUpOiBib29sZWFue1xuICAgIC8vIE5vIHJlZnVuZHNcbiAgICBpZiAodGhpcy5yZWZ1bmRzID09IG51bGwgfHwgdGhpcy5yZWZ1bmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gIXRoaXMuaXNUaGVDdXJyZW50UmVmdW5kUmVqZWN0ZWRGb3JUaGVGZWUoZmVlLmlkLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBmaW5kIG91dCBpZiBpbiBjdXJyZW50IGxpc3Qgb2YgcmVmdW5kcyBhbGwgcmVmdW5kcyBoYXMgYmVlbiByZWplY3RlZFxuICAgKiBmb3IgdGhlIGZlZSBwYXNzZWQgYXMgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gZmVlQ29kZSB0aGlzIGlzIHRoZSBmZWUgY29kZSB1c2VkIHRvIGZpbmQgb3V0IGFsbCByZWZ1bmRzIHJlamVjdGVkIHJlZnVuZHMuXG4gICAqL1xuICBpc1RoZUN1cnJlbnRSZWZ1bmRSZWplY3RlZEZvclRoZUZlZShmZWVDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcblxuICAgIGxldCByZWZ1bmRzQnlGZWUgPSB0aGlzLnJlZnVuZHMuZmlsdGVyKHJlZnVuZCA9PiByZWZ1bmQuZmVlX2lkcyA9PT0gZmVlQ29kZSk7XG4gICAgbGV0IHJlZnVuZHNCeUZlZUFuZFJlamVjdGVkID0gdGhpcy5yZWZ1bmRzLmZpbHRlcihyZWZ1bmQgPT4gcmVmdW5kLnJlZnVuZF9zdGF0dXMubmFtZSA9PT0gJ1JlamVjdGVkJyk7XG5cbiAgICAvLyBSZWZ1bmRzID4gMCAgYW5kIG92ZXJQYXltZW50IC0tPiByZWZ1bmRzIGluIHByb2Nlc3Mgb3IgUmVqZWN0ZWQuXG4gICAgaWYgKHJlZnVuZHNCeUZlZS5sZW5ndGggPT09IHJlZnVuZHNCeUZlZUFuZFJlamVjdGVkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJvdW5kcyB2ZXJ5IHNtYWxsIHZhbHVlcyB0byB6ZXJvIGlmIHRoZXkgZmFsbCBiZWxvdyBhIHNwZWNpZmllZCB0aHJlc2hvbGQuXG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBlbGltaW5hdGluZyBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24gZXJyb3JzIHRoYXQgcmVzdWx0IGluXG4gICAqIGV4dHJlbWVseSBzbWFsbCBub24temVybyB2YWx1ZXMgKGUuZy4sIDEuMTM2ODY4Mzc3MjE2MTYwM2UtMTMpIHdoaWNoIHNob3VsZFxuICAgKiBsb2dpY2FsbHkgYmUgdHJlYXRlZCBhcyB6ZXJvLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbnVtZXJpYyB2YWx1ZSB0byBldmFsdWF0ZSBhbmQgcG90ZW50aWFsbHkgcm91bmQuXG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgLSBUaGUgbWluaW11bSBhYnNvbHV0ZSB2YWx1ZSBjb25zaWRlcmVkIHNpZ25pZmljYW50LiBEZWZhdWx0cyB0byAxZS0xMC5cbiAgICogQHJldHVybnMgVGhlIG9yaWdpbmFsIHZhbHVlIGlmIGl0J3MgYWJvdmUgdGhlIHRocmVzaG9sZCwgb3IgMCBpZiBpdCdzIGJlbG93LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiByb3VuZFRpbnlWYWx1ZSgxLjEzNjg2ODM3NzIxNjE2MDNlLTEzKTsgLy8gcmV0dXJucyAwXG4gICAqIHJvdW5kVGlueVZhbHVlKDAuMDAwMDEpOyAvLyByZXR1cm5zIDAuMDAwMDFcbiAgICovXG4gIHJvdW5kVGlueVZhbHVlKHZhbHVlOiBudW1iZXIsIHRocmVzaG9sZDogbnVtYmVyID0gMWUtNCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHZhbHVlKSA8IHRocmVzaG9sZCA/IDAgOiB2YWx1ZTtcbiAgfVxuXG5cbiAgZ2V0Um91bmRlZE92ZXJQYXltZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucm91bmRUaW55VmFsdWUodGhpcy5vdmVyUGF5bWVudEFtb3VudCk7XG4gIH1cbn1cblxuXG5cbiJdfQ==
|