@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.
Files changed (179) hide show
  1. package/fesm2022/hmcts-ccpay-web-component.mjs +272 -193
  2. package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -1
  3. package/index.d.ts +2348 -5
  4. package/package.json +8 -7
  5. package/esm2022/hmcts-ccpay-web-component.mjs +0 -5
  6. package/esm2022/lib/components/add-remission/add-remission.component.mjs +0 -1276
  7. package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +0 -423
  8. package/esm2022/lib/components/card-details/card-details.component.mjs +0 -32
  9. package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +0 -885
  10. package/esm2022/lib/components/contact-details/contact-details.component.mjs +0 -338
  11. package/esm2022/lib/components/error-banner/error-banner.component.mjs +0 -18
  12. package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +0 -280
  13. package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +0 -195
  14. package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +0 -275
  15. package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +0 -79
  16. package/esm2022/lib/components/page-not-found.component.mjs +0 -17
  17. package/esm2022/lib/components/payment-list/payment-list.component.mjs +0 -36
  18. package/esm2022/lib/components/payment-view/payment-view.component.mjs +0 -467
  19. package/esm2022/lib/components/pba-details/pba-details.component.mjs +0 -18
  20. package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +0 -163
  21. package/esm2022/lib/components/process-refund/process-refund.component.mjs +0 -417
  22. package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +0 -37
  23. package/esm2022/lib/components/refund-list/refund-list.component.mjs +0 -73
  24. package/esm2022/lib/components/refund-status/refund-status.component.mjs +0 -481
  25. package/esm2022/lib/components/reports/reports.component.mjs +0 -337
  26. package/esm2022/lib/components/service-request/service-request.component.mjs +0 -516
  27. package/esm2022/lib/components/status-history/status-history.component.mjs +0 -33
  28. package/esm2022/lib/components/table/table.component.mjs +0 -127
  29. package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +0 -236
  30. package/esm2022/lib/interfaces/AddRemissionRequest.mjs +0 -17
  31. package/esm2022/lib/interfaces/AddRetroRemissionRequest.mjs +0 -9
  32. package/esm2022/lib/interfaces/AllocatePaymentRequest.mjs +0 -41
  33. package/esm2022/lib/interfaces/IAllocationPaymentsRequest.mjs +0 -20
  34. package/esm2022/lib/interfaces/IBSPayments.mjs +0 -2
  35. package/esm2022/lib/interfaces/ICardDetails.mjs +0 -2
  36. package/esm2022/lib/interfaces/IFee.mjs +0 -2
  37. package/esm2022/lib/interfaces/INotificationPreview.mjs +0 -2
  38. package/esm2022/lib/interfaces/IOrderReferenceFee.mjs +0 -2
  39. package/esm2022/lib/interfaces/IPatchRefundAction.mjs +0 -2
  40. package/esm2022/lib/interfaces/IPayment.mjs +0 -2
  41. package/esm2022/lib/interfaces/IPaymentFailure.mjs +0 -2
  42. package/esm2022/lib/interfaces/IPaymentGroup.mjs +0 -2
  43. package/esm2022/lib/interfaces/IPaymentStatus.mjs +0 -12
  44. package/esm2022/lib/interfaces/IPaymentView.mjs +0 -2
  45. package/esm2022/lib/interfaces/IPayments.mjs +0 -2
  46. package/esm2022/lib/interfaces/IPutNotificationRequest.mjs +0 -13
  47. package/esm2022/lib/interfaces/IRefundAction.mjs +0 -2
  48. package/esm2022/lib/interfaces/IRefundContactDetails.mjs +0 -2
  49. package/esm2022/lib/interfaces/IRefundFee.mjs +0 -2
  50. package/esm2022/lib/interfaces/IRefundList.mjs +0 -2
  51. package/esm2022/lib/interfaces/IRefundReasons.mjs +0 -2
  52. package/esm2022/lib/interfaces/IRefundRejectReason.mjs +0 -2
  53. package/esm2022/lib/interfaces/IRefundStatus.mjs +0 -2
  54. package/esm2022/lib/interfaces/IRefundStatusHistory.mjs +0 -2
  55. package/esm2022/lib/interfaces/IRefundsNotifications.mjs +0 -2
  56. package/esm2022/lib/interfaces/IRemission.mjs +0 -2
  57. package/esm2022/lib/interfaces/IResubmitRefundRequest.mjs +0 -13
  58. package/esm2022/lib/interfaces/IStatusHistories.mjs +0 -2
  59. package/esm2022/lib/interfaces/IStatusHistory.mjs +0 -2
  60. package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +0 -11
  61. package/esm2022/lib/interfaces/IserviceRequestPbaPayment.mjs +0 -15
  62. package/esm2022/lib/interfaces/IssueRefundRequest.mjs +0 -11
  63. package/esm2022/lib/interfaces/NotificationPreviewRequest.mjs +0 -46
  64. package/esm2022/lib/interfaces/PayhubAntennaRequest.mjs +0 -14
  65. package/esm2022/lib/interfaces/PaymentToPayhubRequest.mjs +0 -17
  66. package/esm2022/lib/interfaces/PostIssueRefundRetroRemission.mjs +0 -9
  67. package/esm2022/lib/interfaces/PostRefundRetroRemission.mjs +0 -18
  68. package/esm2022/lib/interfaces/RefundsRequest.mjs +0 -9
  69. package/esm2022/lib/interfaces/UnidentifiedPaymentsRequest.mjs +0 -16
  70. package/esm2022/lib/interfaces/UnsolicitedPaymentsRequest.mjs +0 -22
  71. package/esm2022/lib/payment-lib.component.mjs +0 -430
  72. package/esm2022/lib/payment-lib.module.mjs +0 -181
  73. package/esm2022/lib/payment-lib.service.mjs +0 -49
  74. package/esm2022/lib/pipes/capitalize.pipe.mjs +0 -18
  75. package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +0 -22
  76. package/esm2022/lib/pipes/key-value.pipe.mjs +0 -23
  77. package/esm2022/lib/pipes/sanitize-html.pipe.mjs +0 -20
  78. package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +0 -87
  79. package/esm2022/lib/services/card-details/card-details.service.mjs +0 -39
  80. package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +0 -39
  81. package/esm2022/lib/services/notification/notification.service.mjs +0 -70
  82. package/esm2022/lib/services/orderslist.service.mjs +0 -154
  83. package/esm2022/lib/services/payment-list/payment-list.service.mjs +0 -40
  84. package/esm2022/lib/services/payment-view/payment-view.service.mjs +0 -156
  85. package/esm2022/lib/services/refunds/refunds.service.mjs +0 -120
  86. package/esm2022/lib/services/shared/error-handler.service.mjs +0 -76
  87. package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +0 -64
  88. package/esm2022/lib/services/shared/logger/console-logger.service.mjs +0 -43
  89. package/esm2022/lib/services/shared/logger/logger.service.mjs +0 -23
  90. package/esm2022/lib/services/status-history/status-history.service.mjs +0 -41
  91. package/esm2022/lib/services/xl-file/xl-file.service.mjs +0 -197
  92. package/esm2022/public_api.mjs +0 -7
  93. package/lib/components/add-remission/add-remission.component.d.ts +0 -208
  94. package/lib/components/allocate-payments/allocate-payments.component.d.ts +0 -115
  95. package/lib/components/card-details/card-details.component.d.ts +0 -18
  96. package/lib/components/case-transactions/case-transactions.component.d.ts +0 -143
  97. package/lib/components/contact-details/contact-details.component.d.ts +0 -54
  98. package/lib/components/error-banner/error-banner.component.d.ts +0 -9
  99. package/lib/components/fee-summary/fee-summary.component.d.ts +0 -72
  100. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +0 -52
  101. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +0 -63
  102. package/lib/components/notification-preview/notification-preview.component.d.ts +0 -30
  103. package/lib/components/page-not-found.component.d.ts +0 -5
  104. package/lib/components/payment-list/payment-list.component.d.ts +0 -19
  105. package/lib/components/payment-view/payment-view.component.d.ts +0 -110
  106. package/lib/components/pba-details/pba-details.component.d.ts +0 -10
  107. package/lib/components/pba-payment/pba-payment.component.d.ts +0 -41
  108. package/lib/components/process-refund/process-refund.component.d.ts +0 -82
  109. package/lib/components/processed-payments/processed-payments.component.d.ts +0 -17
  110. package/lib/components/refund-list/refund-list.component.d.ts +0 -26
  111. package/lib/components/refund-status/refund-status.component.d.ts +0 -119
  112. package/lib/components/reports/reports.component.d.ts +0 -49
  113. package/lib/components/service-request/service-request.component.d.ts +0 -141
  114. package/lib/components/status-history/status-history.component.d.ts +0 -19
  115. package/lib/components/table/table.component.d.ts +0 -45
  116. package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +0 -61
  117. package/lib/interfaces/AddRemissionRequest.d.ts +0 -11
  118. package/lib/interfaces/AddRetroRemissionRequest.d.ts +0 -5
  119. package/lib/interfaces/AllocatePaymentRequest.d.ts +0 -31
  120. package/lib/interfaces/IAllocationPaymentsRequest.d.ts +0 -9
  121. package/lib/interfaces/IBSPayments.d.ts +0 -19
  122. package/lib/interfaces/ICardDetails.d.ts +0 -7
  123. package/lib/interfaces/IFee.d.ts +0 -29
  124. package/lib/interfaces/INotificationPreview.d.ts +0 -27
  125. package/lib/interfaces/IOrderReferenceFee.d.ts +0 -9
  126. package/lib/interfaces/IPatchRefundAction.d.ts +0 -4
  127. package/lib/interfaces/IPayment.d.ts +0 -35
  128. package/lib/interfaces/IPaymentFailure.d.ts +0 -13
  129. package/lib/interfaces/IPaymentGroup.d.ts +0 -11
  130. package/lib/interfaces/IPaymentStatus.d.ts +0 -11
  131. package/lib/interfaces/IPaymentView.d.ts +0 -5
  132. package/lib/interfaces/IPayments.d.ts +0 -4
  133. package/lib/interfaces/IPutNotificationRequest.d.ts +0 -6
  134. package/lib/interfaces/IRefundAction.d.ts +0 -4
  135. package/lib/interfaces/IRefundContactDetails.d.ts +0 -9
  136. package/lib/interfaces/IRefundFee.d.ts +0 -7
  137. package/lib/interfaces/IRefundList.d.ts +0 -20
  138. package/lib/interfaces/IRefundReasons.d.ts +0 -6
  139. package/lib/interfaces/IRefundRejectReason.d.ts +0 -4
  140. package/lib/interfaces/IRefundStatus.d.ts +0 -8
  141. package/lib/interfaces/IRefundStatusHistory.d.ts +0 -5
  142. package/lib/interfaces/IRefundsNotifications.d.ts +0 -16
  143. package/lib/interfaces/IRemission.d.ts +0 -14
  144. package/lib/interfaces/IResubmitRefundRequest.d.ts +0 -9
  145. package/lib/interfaces/IStatusHistories.d.ts +0 -7
  146. package/lib/interfaces/IStatusHistory.d.ts +0 -7
  147. package/lib/interfaces/IserviceRequestCardPayment.d.ts +0 -6
  148. package/lib/interfaces/IserviceRequestPbaPayment.d.ts +0 -8
  149. package/lib/interfaces/IssueRefundRequest.d.ts +0 -6
  150. package/lib/interfaces/NotificationPreviewRequest.d.ts +0 -25
  151. package/lib/interfaces/PayhubAntennaRequest.d.ts +0 -8
  152. package/lib/interfaces/PaymentToPayhubRequest.d.ts +0 -11
  153. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +0 -6
  154. package/lib/interfaces/PostRefundRetroRemission.d.ts +0 -11
  155. package/lib/interfaces/RefundsRequest.d.ts +0 -5
  156. package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts +0 -7
  157. package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts +0 -10
  158. package/lib/payment-lib.component.d.ts +0 -156
  159. package/lib/payment-lib.module.d.ts +0 -42
  160. package/lib/payment-lib.service.d.ts +0 -21
  161. package/lib/pipes/capitalize.pipe.d.ts +0 -8
  162. package/lib/pipes/ccd-hyphens.pipe.d.ts +0 -8
  163. package/lib/pipes/key-value.pipe.d.ts +0 -8
  164. package/lib/pipes/sanitize-html.pipe.d.ts +0 -10
  165. package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +0 -27
  166. package/lib/services/card-details/card-details.service.d.ts +0 -17
  167. package/lib/services/case-transactions/case-transactions.service.d.ts +0 -17
  168. package/lib/services/notification/notification.service.d.ts +0 -21
  169. package/lib/services/orderslist.service.d.ts +0 -77
  170. package/lib/services/payment-list/payment-list.service.d.ts +0 -18
  171. package/lib/services/payment-view/payment-view.service.d.ts +0 -61
  172. package/lib/services/refunds/refunds.service.d.ts +0 -36
  173. package/lib/services/shared/error-handler.service.d.ts +0 -14
  174. package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +0 -17
  175. package/lib/services/shared/logger/console-logger.service.d.ts +0 -11
  176. package/lib/services/shared/logger/logger.service.d.ts +0 -14
  177. package/lib/services/status-history/status-history.service.d.ts +0 -17
  178. package/lib/services/xl-file/xl-file.service.d.ts +0 -16
  179. 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==