@hmcts/ccpay-web-component 6.0.0-beta9 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/esm2022/hmcts-ccpay-web-component.mjs +5 -0
  2. package/esm2022/lib/components/add-remission/add-remission.component.mjs +1189 -0
  3. package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +407 -0
  4. package/esm2022/lib/components/card-details/card-details.component.mjs +32 -0
  5. package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +798 -0
  6. package/esm2022/lib/components/contact-details/contact-details.component.mjs +338 -0
  7. package/esm2022/lib/components/error-banner/error-banner.component.mjs +18 -0
  8. package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +247 -0
  9. package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +195 -0
  10. package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +255 -0
  11. package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +79 -0
  12. package/esm2022/lib/components/page-not-found.component.mjs +17 -0
  13. package/esm2022/lib/components/payment-list/payment-list.component.mjs +36 -0
  14. package/esm2022/lib/components/payment-view/payment-view.component.mjs +416 -0
  15. package/esm2022/lib/components/pba-details/pba-details.component.mjs +18 -0
  16. package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +151 -0
  17. package/esm2022/lib/components/process-refund/process-refund.component.mjs +417 -0
  18. package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +37 -0
  19. package/esm2022/lib/components/refund-list/refund-list.component.mjs +73 -0
  20. package/esm2022/lib/components/refund-status/refund-status.component.mjs +453 -0
  21. package/esm2022/lib/components/reports/reports.component.mjs +291 -0
  22. package/esm2022/lib/components/service-request/service-request.component.mjs +456 -0
  23. package/esm2022/lib/components/status-history/status-history.component.mjs +33 -0
  24. package/esm2022/lib/components/table/table.component.mjs +128 -0
  25. package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +236 -0
  26. package/esm2022/lib/interfaces/AddRemissionRequest.mjs +17 -0
  27. package/esm2022/lib/interfaces/AddRetroRemissionRequest.mjs +9 -0
  28. package/esm2022/lib/interfaces/AllocatePaymentRequest.mjs +41 -0
  29. package/esm2022/lib/interfaces/IAllocationPaymentsRequest.mjs +20 -0
  30. package/esm2022/lib/interfaces/IBSPayments.mjs +2 -0
  31. package/esm2022/lib/interfaces/ICardDetails.mjs +2 -0
  32. package/esm2022/lib/interfaces/IFee.mjs +2 -0
  33. package/esm2022/lib/interfaces/INotificationPreview.mjs +2 -0
  34. package/esm2022/lib/interfaces/IOrderReferenceFee.mjs +2 -0
  35. package/esm2022/lib/interfaces/IPatchRefundAction.mjs +2 -0
  36. package/esm2022/lib/interfaces/IPayment.mjs +2 -0
  37. package/esm2022/lib/interfaces/IPaymentFailure.mjs +2 -0
  38. package/esm2022/lib/interfaces/IPaymentGroup.mjs +2 -0
  39. package/esm2022/lib/interfaces/IPaymentStatus.mjs +12 -0
  40. package/esm2022/lib/interfaces/IPaymentView.mjs +2 -0
  41. package/esm2022/lib/interfaces/IPayments.mjs +2 -0
  42. package/esm2022/lib/interfaces/IPutNotificationRequest.mjs +13 -0
  43. package/esm2022/lib/interfaces/IRefundAction.mjs +2 -0
  44. package/esm2022/lib/interfaces/IRefundContactDetails.mjs +2 -0
  45. package/esm2022/lib/interfaces/IRefundFee.mjs +2 -0
  46. package/esm2022/lib/interfaces/IRefundList.mjs +2 -0
  47. package/esm2022/lib/interfaces/IRefundReasons.mjs +2 -0
  48. package/esm2022/lib/interfaces/IRefundRejectReason.mjs +2 -0
  49. package/esm2022/lib/interfaces/IRefundStatus.mjs +2 -0
  50. package/esm2022/lib/interfaces/IRefundStatusHistory.mjs +2 -0
  51. package/esm2022/lib/interfaces/IRefundsNotifications.mjs +2 -0
  52. package/esm2022/lib/interfaces/IRemission.mjs +2 -0
  53. package/esm2022/lib/interfaces/IResubmitRefundRequest.mjs +13 -0
  54. package/esm2022/lib/interfaces/IStatusHistories.mjs +2 -0
  55. package/esm2022/lib/interfaces/IStatusHistory.mjs +2 -0
  56. package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +11 -0
  57. package/esm2022/lib/interfaces/IserviceRequestPbaPayment.mjs +15 -0
  58. package/esm2022/lib/interfaces/IssueRefundRequest.mjs +11 -0
  59. package/esm2022/lib/interfaces/NotificationPreviewRequest.mjs +45 -0
  60. package/esm2022/lib/interfaces/PayhubAntennaRequest.mjs +12 -0
  61. package/esm2022/lib/interfaces/PaymentToPayhubRequest.mjs +15 -0
  62. package/esm2022/lib/interfaces/PostIssueRefundRetroRemission.mjs +9 -0
  63. package/esm2022/lib/interfaces/PostRefundRetroRemission.mjs +18 -0
  64. package/esm2022/lib/interfaces/RefundsRequest.mjs +9 -0
  65. package/esm2022/lib/interfaces/UnidentifiedPaymentsRequest.mjs +16 -0
  66. package/esm2022/lib/interfaces/UnsolicitedPaymentsRequest.mjs +22 -0
  67. package/esm2022/lib/payment-lib.component.mjs +288 -0
  68. package/esm2022/lib/payment-lib.module.mjs +187 -0
  69. package/esm2022/lib/payment-lib.service.mjs +49 -0
  70. package/esm2022/lib/pipes/capitalize.pipe.mjs +18 -0
  71. package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +22 -0
  72. package/esm2022/lib/pipes/key-value.pipe.mjs +23 -0
  73. package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
  74. package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +87 -0
  75. package/esm2022/lib/services/card-details/card-details.service.mjs +39 -0
  76. package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +39 -0
  77. package/esm2022/lib/services/notification/notification.service.mjs +70 -0
  78. package/esm2022/lib/services/orderslist.service.mjs +154 -0
  79. package/esm2022/lib/services/payment-list/payment-list.service.mjs +40 -0
  80. package/esm2022/lib/services/payment-view/payment-view.service.mjs +152 -0
  81. package/esm2022/lib/services/refunds/refunds.service.mjs +117 -0
  82. package/esm2022/lib/services/shared/error-handler.service.mjs +96 -0
  83. package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +64 -0
  84. package/esm2022/lib/services/shared/logger/console-logger.service.mjs +43 -0
  85. package/esm2022/lib/services/shared/logger/logger.service.mjs +23 -0
  86. package/{esm2015/lib/services/status-history/status-history.service.js → esm2022/lib/services/status-history/status-history.service.mjs} +13 -51
  87. package/esm2022/lib/services/xl-file/xl-file.service.mjs +153 -0
  88. package/esm2022/public_api.mjs +7 -0
  89. package/fesm2022/hmcts-ccpay-web-component.mjs +7874 -0
  90. package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -0
  91. package/index.d.ts +5 -0
  92. package/lib/components/add-remission/add-remission.component.d.ts +59 -7
  93. package/lib/components/allocate-payments/allocate-payments.component.d.ts +5 -6
  94. package/lib/components/card-details/card-details.component.d.ts +4 -1
  95. package/lib/components/case-transactions/case-transactions.component.d.ts +9 -7
  96. package/lib/components/contact-details/contact-details.component.d.ts +52 -0
  97. package/lib/components/error-banner/error-banner.component.d.ts +3 -0
  98. package/lib/components/fee-summary/fee-summary.component.d.ts +4 -3
  99. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +4 -1
  100. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +4 -1
  101. package/lib/components/notification-preview/notification-preview.component.d.ts +30 -0
  102. package/lib/components/page-not-found.component.d.ts +3 -0
  103. package/lib/components/payment-list/payment-list.component.d.ts +4 -1
  104. package/lib/components/payment-view/payment-view.component.d.ts +46 -12
  105. package/lib/components/pba-details/pba-details.component.d.ts +3 -0
  106. package/lib/components/pba-payment/pba-payment.component.d.ts +9 -1
  107. package/lib/components/process-refund/process-refund.component.d.ts +22 -2
  108. package/lib/components/processed-payments/processed-payments.component.d.ts +3 -0
  109. package/lib/components/refund-list/refund-list.component.d.ts +3 -0
  110. package/lib/components/refund-status/refund-status.component.d.ts +50 -10
  111. package/lib/components/reports/reports.component.d.ts +10 -5
  112. package/lib/components/service-request/service-request.component.d.ts +42 -14
  113. package/lib/components/status-history/status-history.component.d.ts +4 -1
  114. package/lib/components/table/table.component.d.ts +5 -1
  115. package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +4 -5
  116. package/lib/interfaces/IFee.d.ts +6 -0
  117. package/lib/interfaces/INotificationPreview.d.ts +27 -0
  118. package/lib/interfaces/IPayment.d.ts +3 -0
  119. package/lib/interfaces/IPaymentFailure.d.ts +13 -0
  120. package/lib/interfaces/IPutNotificationRequest.d.ts +6 -0
  121. package/lib/interfaces/IRefundContactDetails.d.ts +9 -0
  122. package/lib/interfaces/IRefundFee.d.ts +7 -0
  123. package/lib/interfaces/IRefundList.d.ts +5 -0
  124. package/lib/interfaces/IRefundsNotifications.d.ts +16 -0
  125. package/lib/interfaces/IRemission.d.ts +3 -0
  126. package/lib/interfaces/IResubmitRefundRequest.d.ts +5 -1
  127. package/lib/interfaces/IserviceRequestPbaPayment.d.ts +2 -1
  128. package/lib/interfaces/NotificationPreviewRequest.d.ts +24 -0
  129. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +3 -1
  130. package/lib/interfaces/PostRefundRetroRemission.d.ts +7 -1
  131. package/lib/payment-lib.component.d.ts +7 -5
  132. package/lib/payment-lib.module.d.ts +40 -0
  133. package/lib/payment-lib.service.d.ts +9 -3
  134. package/lib/pipes/capitalize.pipe.d.ts +3 -0
  135. package/lib/pipes/ccd-hyphens.pipe.d.ts +3 -0
  136. package/lib/pipes/key-value.pipe.d.ts +3 -0
  137. package/lib/pipes/sanitize-html.pipe.d.ts +3 -0
  138. package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +4 -1
  139. package/lib/services/card-details/card-details.service.d.ts +3 -0
  140. package/lib/services/case-transactions/case-transactions.service.d.ts +4 -1
  141. package/lib/services/notification/notification.service.d.ts +21 -0
  142. package/lib/services/orderslist.service.d.ts +3 -0
  143. package/lib/services/payment-list/payment-list.service.d.ts +3 -0
  144. package/lib/services/payment-view/payment-view.service.d.ts +6 -1
  145. package/lib/services/refunds/refunds.service.d.ts +6 -1
  146. package/lib/services/shared/error-handler.service.d.ts +5 -2
  147. package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +3 -0
  148. package/lib/services/shared/logger/console-logger.service.d.ts +6 -3
  149. package/lib/services/shared/logger/logger.service.d.ts +3 -0
  150. package/lib/services/status-history/status-history.service.d.ts +3 -0
  151. package/lib/services/xl-file/xl-file.service.d.ts +4 -0
  152. package/package.json +18 -14
  153. package/bundles/hmcts-ccpay-web-component.umd.js +0 -9664
  154. package/bundles/hmcts-ccpay-web-component.umd.js.map +0 -1
  155. package/bundles/hmcts-ccpay-web-component.umd.min.js +0 -2
  156. package/bundles/hmcts-ccpay-web-component.umd.min.js.map +0 -1
  157. package/esm2015/hmcts-ccpay-web-component.js +0 -48
  158. package/esm2015/lib/components/add-remission/add-remission.component.js +0 -1083
  159. package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +0 -692
  160. package/esm2015/lib/components/card-details/card-details.component.js +0 -71
  161. package/esm2015/lib/components/case-transactions/case-transactions.component.js +0 -1298
  162. package/esm2015/lib/components/error-banner/error-banner.component.js +0 -30
  163. package/esm2015/lib/components/fee-summary/fee-summary.component.js +0 -482
  164. package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +0 -342
  165. package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +0 -436
  166. package/esm2015/lib/components/page-not-found.component.js +0 -15
  167. package/esm2015/lib/components/payment-list/payment-list.component.js +0 -75
  168. package/esm2015/lib/components/payment-view/payment-view.component.js +0 -514
  169. package/esm2015/lib/components/pba-details/pba-details.component.js +0 -30
  170. package/esm2015/lib/components/pba-payment/pba-payment.component.js +0 -205
  171. package/esm2015/lib/components/process-refund/process-refund.component.js +0 -455
  172. package/esm2015/lib/components/processed-payments/processed-payments.component.js +0 -72
  173. package/esm2015/lib/components/refund-list/refund-list.component.js +0 -127
  174. package/esm2015/lib/components/refund-status/refund-status.component.js +0 -497
  175. package/esm2015/lib/components/reports/reports.component.js +0 -357
  176. package/esm2015/lib/components/service-request/service-request.component.js +0 -626
  177. package/esm2015/lib/components/status-history/status-history.component.js +0 -68
  178. package/esm2015/lib/components/table/table.component.js +0 -196
  179. package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +0 -385
  180. package/esm2015/lib/interfaces/AddRemissionRequest.js +0 -37
  181. package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +0 -21
  182. package/esm2015/lib/interfaces/AllocatePaymentRequest.js +0 -68
  183. package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +0 -39
  184. package/esm2015/lib/interfaces/IBSPayments.js +0 -45
  185. package/esm2015/lib/interfaces/ICardDetails.js +0 -21
  186. package/esm2015/lib/interfaces/IFee.js +0 -53
  187. package/esm2015/lib/interfaces/IOrderReferenceFee.js +0 -25
  188. package/esm2015/lib/interfaces/IPatchRefundAction.js +0 -15
  189. package/esm2015/lib/interfaces/IPayment.js +0 -65
  190. package/esm2015/lib/interfaces/IPaymentGroup.js +0 -19
  191. package/esm2015/lib/interfaces/IPaymentStatus.js +0 -27
  192. package/esm2015/lib/interfaces/IPaymentView.js +0 -17
  193. package/esm2015/lib/interfaces/IPayments.js +0 -13
  194. package/esm2015/lib/interfaces/IRefundAction.js +0 -15
  195. package/esm2015/lib/interfaces/IRefundList.js +0 -29
  196. package/esm2015/lib/interfaces/IRefundReasons.js +0 -19
  197. package/esm2015/lib/interfaces/IRefundRejectReason.js +0 -15
  198. package/esm2015/lib/interfaces/IRefundStatus.js +0 -23
  199. package/esm2015/lib/interfaces/IRefundStatusHistory.js +0 -15
  200. package/esm2015/lib/interfaces/IRemission.js +0 -25
  201. package/esm2015/lib/interfaces/IResubmitRefundRequest.js +0 -21
  202. package/esm2015/lib/interfaces/IStatusHistories.js +0 -19
  203. package/esm2015/lib/interfaces/IStatusHistory.js +0 -21
  204. package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +0 -23
  205. package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +0 -28
  206. package/esm2015/lib/interfaces/IssueRefundRequest.js +0 -25
  207. package/esm2015/lib/interfaces/PayhubAntennaRequest.js +0 -28
  208. package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +0 -37
  209. package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +0 -17
  210. package/esm2015/lib/interfaces/PostRefundRetroRemission.js +0 -21
  211. package/esm2015/lib/interfaces/RefundsRequest.js +0 -21
  212. package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +0 -31
  213. package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +0 -43
  214. package/esm2015/lib/payment-lib.component.js +0 -275
  215. package/esm2015/lib/payment-lib.module.js +0 -99
  216. package/esm2015/lib/payment-lib.service.js +0 -80
  217. package/esm2015/lib/pipes/capitalize.pipe.js +0 -24
  218. package/esm2015/lib/pipes/ccd-hyphens.pipe.js +0 -29
  219. package/esm2015/lib/pipes/key-value.pipe.js +0 -30
  220. package/esm2015/lib/pipes/sanitize-html.pipe.js +0 -36
  221. package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +0 -180
  222. package/esm2015/lib/services/card-details/card-details.service.js +0 -76
  223. package/esm2015/lib/services/case-transactions/case-transactions.service.js +0 -76
  224. package/esm2015/lib/services/orderslist.service.js +0 -403
  225. package/esm2015/lib/services/payment-list/payment-list.service.js +0 -79
  226. package/esm2015/lib/services/payment-view/payment-view.service.js +0 -285
  227. package/esm2015/lib/services/refunds/refunds.service.js +0 -203
  228. package/esm2015/lib/services/shared/error-handler.service.js +0 -108
  229. package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +0 -124
  230. package/esm2015/lib/services/shared/logger/console-logger.service.js +0 -67
  231. package/esm2015/lib/services/shared/logger/logger.service.js +0 -49
  232. package/esm2015/lib/services/xl-file/xl-file.service.js +0 -181
  233. package/esm2015/public_api.js +0 -11
  234. package/esm5/hmcts-ccpay-web-component.js +0 -48
  235. package/esm5/lib/components/add-remission/add-remission.component.js +0 -1168
  236. package/esm5/lib/components/allocate-payments/allocate-payments.component.js +0 -745
  237. package/esm5/lib/components/card-details/card-details.component.js +0 -77
  238. package/esm5/lib/components/case-transactions/case-transactions.component.js +0 -1443
  239. package/esm5/lib/components/error-banner/error-banner.component.js +0 -36
  240. package/esm5/lib/components/fee-summary/fee-summary.component.js +0 -542
  241. package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +0 -371
  242. package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +0 -474
  243. package/esm5/lib/components/page-not-found.component.js +0 -17
  244. package/esm5/lib/components/payment-list/payment-list.component.js +0 -83
  245. package/esm5/lib/components/payment-view/payment-view.component.js +0 -602
  246. package/esm5/lib/components/pba-details/pba-details.component.js +0 -36
  247. package/esm5/lib/components/pba-payment/pba-payment.component.js +0 -222
  248. package/esm5/lib/components/process-refund/process-refund.component.js +0 -536
  249. package/esm5/lib/components/processed-payments/processed-payments.component.js +0 -83
  250. package/esm5/lib/components/refund-list/refund-list.component.js +0 -130
  251. package/esm5/lib/components/refund-status/refund-status.component.js +0 -558
  252. package/esm5/lib/components/reports/reports.component.js +0 -398
  253. package/esm5/lib/components/service-request/service-request.component.js +0 -702
  254. package/esm5/lib/components/status-history/status-history.component.js +0 -70
  255. package/esm5/lib/components/table/table.component.js +0 -229
  256. package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +0 -434
  257. package/esm5/lib/interfaces/AddRemissionRequest.js +0 -32
  258. package/esm5/lib/interfaces/AddRetroRemissionRequest.js +0 -19
  259. package/esm5/lib/interfaces/AllocatePaymentRequest.js +0 -63
  260. package/esm5/lib/interfaces/IAllocationPaymentsRequest.js +0 -34
  261. package/esm5/lib/interfaces/IBSPayments.js +0 -45
  262. package/esm5/lib/interfaces/ICardDetails.js +0 -21
  263. package/esm5/lib/interfaces/IFee.js +0 -53
  264. package/esm5/lib/interfaces/IOrderReferenceFee.js +0 -25
  265. package/esm5/lib/interfaces/IPatchRefundAction.js +0 -15
  266. package/esm5/lib/interfaces/IPayment.js +0 -65
  267. package/esm5/lib/interfaces/IPaymentGroup.js +0 -19
  268. package/esm5/lib/interfaces/IPaymentStatus.js +0 -31
  269. package/esm5/lib/interfaces/IPaymentView.js +0 -17
  270. package/esm5/lib/interfaces/IPayments.js +0 -13
  271. package/esm5/lib/interfaces/IRefundAction.js +0 -15
  272. package/esm5/lib/interfaces/IRefundList.js +0 -29
  273. package/esm5/lib/interfaces/IRefundReasons.js +0 -19
  274. package/esm5/lib/interfaces/IRefundRejectReason.js +0 -15
  275. package/esm5/lib/interfaces/IRefundStatus.js +0 -23
  276. package/esm5/lib/interfaces/IRefundStatusHistory.js +0 -15
  277. package/esm5/lib/interfaces/IRemission.js +0 -25
  278. package/esm5/lib/interfaces/IResubmitRefundRequest.js +0 -19
  279. package/esm5/lib/interfaces/IStatusHistories.js +0 -19
  280. package/esm5/lib/interfaces/IStatusHistory.js +0 -21
  281. package/esm5/lib/interfaces/IserviceRequestCardPayment.js +0 -22
  282. package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +0 -25
  283. package/esm5/lib/interfaces/IssueRefundRequest.js +0 -22
  284. package/esm5/lib/interfaces/PayhubAntennaRequest.js +0 -25
  285. package/esm5/lib/interfaces/PaymentToPayhubRequest.js +0 -34
  286. package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +0 -16
  287. package/esm5/lib/interfaces/PostRefundRetroRemission.js +0 -19
  288. package/esm5/lib/interfaces/RefundsRequest.js +0 -19
  289. package/esm5/lib/interfaces/UnidentifiedPaymentsRequest.js +0 -28
  290. package/esm5/lib/interfaces/UnsolicitedPaymentsRequest.js +0 -37
  291. package/esm5/lib/payment-lib.component.js +0 -244
  292. package/esm5/lib/payment-lib.module.js +0 -103
  293. package/esm5/lib/payment-lib.service.js +0 -111
  294. package/esm5/lib/pipes/capitalize.pipe.js +0 -32
  295. package/esm5/lib/pipes/ccd-hyphens.pipe.js +0 -37
  296. package/esm5/lib/pipes/key-value.pipe.js +0 -37
  297. package/esm5/lib/pipes/sanitize-html.pipe.js +0 -39
  298. package/esm5/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +0 -218
  299. package/esm5/lib/services/card-details/card-details.service.js +0 -76
  300. package/esm5/lib/services/case-transactions/case-transactions.service.js +0 -76
  301. package/esm5/lib/services/orderslist.service.js +0 -531
  302. package/esm5/lib/services/payment-list/payment-list.service.js +0 -80
  303. package/esm5/lib/services/payment-view/payment-view.service.js +0 -385
  304. package/esm5/lib/services/refunds/refunds.service.js +0 -243
  305. package/esm5/lib/services/shared/error-handler.service.js +0 -119
  306. package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +0 -154
  307. package/esm5/lib/services/shared/logger/console-logger.service.js +0 -88
  308. package/esm5/lib/services/shared/logger/logger.service.js +0 -68
  309. package/esm5/lib/services/status-history/status-history.service.js +0 -80
  310. package/esm5/lib/services/xl-file/xl-file.service.js +0 -221
  311. package/esm5/public_api.js +0 -11
  312. package/fesm2015/hmcts-ccpay-web-component.js +0 -8525
  313. package/fesm2015/hmcts-ccpay-web-component.js.map +0 -1
  314. package/fesm5/hmcts-ccpay-web-component.js +0 -9773
  315. package/fesm5/hmcts-ccpay-web-component.js.map +0 -1
  316. package/hmcts-ccpay-web-component.d.ts +0 -43
  317. package/hmcts-ccpay-web-component.metadata.json +0 -1
@@ -1,357 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { Component } from '@angular/core';
6
- import { FormBuilder, FormControl } from '@angular/forms';
7
- import { formatDate } from "@angular/common";
8
- import { BulkScaningPaymentService } from '../../services/bulk-scaning-payment/bulk-scaning-payment.service';
9
- import { ErrorHandlerService } from '../../services/shared/error-handler.service';
10
- import { PaymentViewService } from '../../services/payment-view/payment-view.service';
11
- import { XlFileService } from '../../services/xl-file/xl-file.service';
12
- export class ReportsComponent {
13
- /**
14
- * @param {?} xlFileService
15
- * @param {?} errorHandlerService
16
- * @param {?} formBuilder
17
- * @param {?} bulkScaningPaymentService
18
- * @param {?} paymentViewService
19
- */
20
- constructor(xlFileService, errorHandlerService, formBuilder, bulkScaningPaymentService, paymentViewService) {
21
- this.xlFileService = xlFileService;
22
- this.errorHandlerService = errorHandlerService;
23
- this.formBuilder = formBuilder;
24
- this.bulkScaningPaymentService = bulkScaningPaymentService;
25
- this.paymentViewService = paymentViewService;
26
- this.isDownLoadButtondisabled = false;
27
- this.isStartDateLesthanEndDate = false;
28
- this.isDateRangeBetnWeek = false;
29
- this.errorMessage = this.errorHandlerService.getServerErrorMessage(false);
30
- this.paymentGroups = [];
31
- }
32
- /**
33
- * @return {?}
34
- */
35
- ngOnInit() {
36
- this.fromValidation();
37
- }
38
- /**
39
- * @return {?}
40
- */
41
- getToday() {
42
- return new Date().toISOString().split('T')[0];
43
- }
44
- /**
45
- * @return {?}
46
- */
47
- getSelectedFromDate() {
48
- this.validateDates(this.reportsForm.get('selectedreport').value);
49
- }
50
- /**
51
- * @param {?} reportName
52
- * @return {?}
53
- */
54
- validateDates(reportName) {
55
- /** @type {?} */
56
- const selectedStartDate = this.tranformDate(this.reportsForm.get('startDate').value);
57
- /** @type {?} */
58
- const selectedEndDate = this.tranformDate(this.reportsForm.get('endDate').value);
59
- /** @type {?} */
60
- const isDateRangeMoreThanWeek = ((/** @type {?} */ (new Date(selectedStartDate))) - (/** @type {?} */ (new Date(selectedEndDate)))) / (1000 * 3600 * -24) > 7;
61
- if (new Date(selectedStartDate) > new Date(selectedEndDate) && selectedEndDate !== '') {
62
- this.reportsForm.get('startDate').setValue('');
63
- this.isDateRangeBetnWeek = false;
64
- this.isStartDateLesthanEndDate = true;
65
- }
66
- else if (reportName && reportName === 'SURPLUS_AND_SHORTFALL' && isDateRangeMoreThanWeek) {
67
- this.isDateRangeBetnWeek = true;
68
- this.isStartDateLesthanEndDate = false;
69
- }
70
- else {
71
- this.isDateRangeBetnWeek = false;
72
- this.isStartDateLesthanEndDate = false;
73
- }
74
- }
75
- /**
76
- * @return {?}
77
- */
78
- fromValidation() {
79
- this.reportsForm = this.formBuilder.group({
80
- selectedreport: new FormControl(''),
81
- startDate: new FormControl(''),
82
- endDate: new FormControl('')
83
- });
84
- }
85
- /**
86
- * @return {?}
87
- */
88
- downloadReport() {
89
- this.isDownLoadButtondisabled = true;
90
- /** @type {?} */
91
- const dataLossRptDefault = [{ loss_resp: '', payment_asset_dcn: '', env_ref: '', env_item: '', resp_service_id: '', resp_service_name: '', date_banked: '', bgc_batch: '', payment_method: '', amount: '' }];
92
- /** @type {?} */
93
- const unProcessedRptDefault = [{ resp_service_id: '', resp_service_name: '', exception_ref: '', ccd_ref: '', date_banked: '', bgc_batch: '', payment_asset_dcn: '', env_ref: '', env_item: '', payment_method: '', amount: '' }];
94
- /** @type {?} */
95
- const processedUnallocated = [{ resp_service_id: '', resp_service_name: '', allocation_status: '', receiving_office: '', allocation_reason: '', ccd_exception_ref: '', ccd_case_ref: '', payment_asset_dcn: '', env_ref: '', env_item: '', date_banked: '', bgc_batch: '', payment_method: '', amount: '', updated_by: '' }];
96
- /** @type {?} */
97
- const shortFallsRptDefault = [{ resp_service_id: '', resp_service_name: '', surplus_shortfall: '', balance: '', payment_amount: '', ccd_case_reference: '', ccd_exception_reference: '', processed_date: '', reason: '', explanation: '', user_name: '' }];
98
- /** @type {?} */
99
- const selectedReportName = this.reportsForm.get('selectedreport').value;
100
- /** @type {?} */
101
- const selectedStartDate = this.tranformDate(this.reportsForm.get('startDate').value);
102
- /** @type {?} */
103
- const selectedEndDate = this.tranformDate(this.reportsForm.get('endDate').value);
104
- if (selectedReportName === 'PROCESSED_UNALLOCATED' || selectedReportName === 'SURPLUS_AND_SHORTFALL') {
105
- this.paymentViewService.downloadSelectedReport(selectedReportName, selectedStartDate, selectedEndDate).subscribe((/**
106
- * @param {?} response
107
- * @return {?}
108
- */
109
- response => {
110
- this.errorMessage = this.errorHandlerService.getServerErrorMessage(false);
111
- /** @type {?} */
112
- const result = JSON.parse(response);
113
- /** @type {?} */
114
- let res = { data: this.applyDateFormat(result) };
115
- if (res['data'].length === 0 && selectedReportName === 'PROCESSED_UNALLOCATED') {
116
- res.data = processedUnallocated;
117
- }
118
- else if (res['data'].length === 0 && selectedReportName === 'SURPLUS_AND_SHORTFALL') {
119
- res.data = shortFallsRptDefault;
120
- }
121
- if (result['data'].length > 0) {
122
- for (var i = 0; i < res['data'].length; i++) {
123
- if (res['data'][i]["payment_asset_dcn"] !== undefined) {
124
- res['data'][i]['env_ref'] = res['data'][i]["payment_asset_dcn"].substr(0, 13);
125
- res['data'][i]['env_item'] = res['data'][i]["payment_asset_dcn"].substr(13, 21);
126
- }
127
- if (res['data'][i]["amount"] !== undefined) {
128
- res['data'][i]['amount'] = this.convertToFloatValue(res['data'][i]['amount']);
129
- }
130
- if (res['data'][i]["balance"] !== undefined) {
131
- res['data'][i]['balance'] = this.convertToFloatValue(res['data'][i]["balance"]);
132
- }
133
- /** @type {?} */
134
- let Op = res['data'][i]["surplus_shortfall"];
135
- if (Op !== undefined) {
136
- res['data'][i]['surplus_shortfall'] = Op == "Surplus" ? "Over payment" : "Under payment";
137
- }
138
- if (res['data'][i]["payment_amount"] !== undefined) {
139
- res['data'][i]['payment_amount'] = this.convertToFloatValue(res['data'][i]['payment_amount']);
140
- }
141
- }
142
- }
143
- this.isDownLoadButtondisabled = false;
144
- this.xlFileService.exportAsExcelFile(res['data'], this.getFileName(this.reportsForm.get('selectedreport').value, selectedStartDate, selectedEndDate));
145
- }), (/**
146
- * @param {?} error
147
- * @return {?}
148
- */
149
- (error) => {
150
- this.isDownLoadButtondisabled = false;
151
- this.errorMessage = this.errorHandlerService.getServerErrorMessage(true);
152
- }));
153
- }
154
- else {
155
- this.bulkScaningPaymentService.downloadSelectedReport(selectedReportName, selectedStartDate, selectedEndDate).subscribe((/**
156
- * @param {?} response
157
- * @return {?}
158
- */
159
- response => {
160
- this.errorMessage = this.errorHandlerService.getServerErrorMessage(false);
161
- /** @type {?} */
162
- const result = JSON.parse(response);
163
- /** @type {?} */
164
- let res = { data: this.applyDateFormat(result) };
165
- if (res['data'].length === 0 && selectedReportName === 'DATA_LOSS') {
166
- res.data = dataLossRptDefault;
167
- }
168
- else if (res['data'].length === 0 && selectedReportName === 'UNPROCESSED') {
169
- res.data = unProcessedRptDefault;
170
- }
171
- if (result['data'].length > 0) {
172
- for (var i = 0; i < res['data'].length; i++) {
173
- if (res['data'][i]["amount"] !== undefined) {
174
- res['data'][i]['amount'] = this.convertToFloatValue(res['data'][i]['amount']);
175
- }
176
- if (res['data'][i]["payment_asset_dcn"] !== undefined) {
177
- res['data'][i]['env_ref'] = res['data'][i]["payment_asset_dcn"].substr(0, 13);
178
- res['data'][i]['env_item'] = res['data'][i]["payment_asset_dcn"].substr(13, 21);
179
- }
180
- }
181
- }
182
- this.isDownLoadButtondisabled = false;
183
- this.xlFileService.exportAsExcelFile(res['data'], this.getFileName(this.reportsForm.get('selectedreport').value, selectedStartDate, selectedEndDate));
184
- }), (/**
185
- * @param {?} error
186
- * @return {?}
187
- */
188
- (error) => {
189
- this.isDownLoadButtondisabled = false;
190
- this.errorMessage = this.errorHandlerService.getServerErrorMessage(true);
191
- }));
192
- }
193
- }
194
- /**
195
- * @param {?} selectedOption
196
- * @param {?} startDate
197
- * @param {?} endDate
198
- * @return {?}
199
- */
200
- getFileName(selectedOption, startDate, endDate) {
201
- /** @type {?} */
202
- const loc = 'en-US';
203
- /** @type {?} */
204
- const stDt = formatDate(startDate, 'ddMMyy', loc);
205
- /** @type {?} */
206
- const enDt = formatDate(endDate, 'ddMMyy', loc);
207
- /** @type {?} */
208
- const now = new Date();
209
- /** @type {?} */
210
- const currentDate = formatDate(now, 'ddMMyy', loc);
211
- /** @type {?} */
212
- const timestamp = `${currentDate}_${this.getTwodigit(now.getHours())}${this.getTwodigit(now.getMinutes())}${this.getTwodigit(now.getSeconds())}`;
213
- /** @type {?} */
214
- const selectedOptionTxt = this.getCamelCaseString(selectedOption);
215
- return selectedOptionTxt + '_' + stDt + '_To_' + enDt + '_Run_' + timestamp;
216
- }
217
- /**
218
- * @param {?} strDate
219
- * @return {?}
220
- */
221
- tranformDate(strDate) {
222
- /** @type {?} */
223
- let result = '';
224
- if (strDate) {
225
- /** @type {?} */
226
- let parts = strDate.split('-');
227
- result = `${parts[1]}/${parts[2]}/${parts[0]}`;
228
- }
229
- return result;
230
- }
231
- /**
232
- * @param {?} input
233
- * @return {?}
234
- */
235
- getTwodigit(input) {
236
- return ("0" + input).slice(-2);
237
- }
238
- /**
239
- * @param {?} selectedOption
240
- * @return {?}
241
- */
242
- getCamelCaseString(selectedOption) {
243
- /** @type {?} */
244
- let result;
245
- switch (selectedOption) {
246
- case 'UNPROCESSED': {
247
- result = 'Unprocessed';
248
- break;
249
- }
250
- case 'DATA_LOSS': {
251
- result = 'Data_Loss';
252
- break;
253
- }
254
- case 'PROCESSED_UNALLOCATED': {
255
- result = 'Processed_Unallocated';
256
- break;
257
- }
258
- case 'SURPLUS_AND_SHORTFALL': {
259
- result = 'Over Payment_Under Payment';
260
- break;
261
- }
262
- default: {
263
- result = selectedOption;
264
- break;
265
- }
266
- }
267
- return result;
268
- }
269
- /**
270
- * @param {?} res
271
- * @return {?}
272
- */
273
- applyDateFormat(res) {
274
- /** @type {?} */
275
- const fmt = 'dd/MM/yyyy';
276
- /** @type {?} */
277
- const loc = 'en-US';
278
- return res['data'].map((/**
279
- * @param {?} value
280
- * @return {?}
281
- */
282
- value => {
283
- if (value['date_banked']) {
284
- value['date_banked'] = formatDate(value['date_banked'], fmt, loc);
285
- }
286
- return value;
287
- }));
288
- }
289
- /**
290
- * @param {?} amt
291
- * @return {?}
292
- */
293
- convertToFloatValue(amt) {
294
- return amt ? Number.parseFloat(amt).toFixed(2) : '0.00';
295
- }
296
- }
297
- ReportsComponent.decorators = [
298
- { type: Component, args: [{
299
- selector: 'ccpay-reports',
300
- template: "<div class=\"header\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='REPORTS'>\n <ccpay-error-banner *ngIf=\"errorMessage.showError\" [errorMessage]=\"errorMessage\"></ccpay-error-banner>\n <legend class=\"govuk-fieldset__legend--xl\">\n <h1 class=\"govuk-fieldset__heading\"> Choose the report type and date range</h1>\n </legend>\n</div>\n<form [formGroup]=\"reportsForm\">\n <div class=\"govuk-form-group\">\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input \n required\n id=\"DataLoss\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n (click)=\"validateDates('DATA_LOSS')\"\n name=\"selectedreport\"\n type=\"radio\"\n value=\"DATA_LOSS\" \n data-aria-controls=\"DataLoss\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"DataLoss\">Data loss</label>\n <span class=\"form-hint\">Missing transactions where data has been received from only either of Exela or Bulk scan</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"UnprocessedTransactions\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n (click)=\"validateDates('UNPROCESSED')\"\n name=\"selectedreport\"\n type=\"radio\"\n value=\"UNPROCESSED\" \n data-aria-controls=\"UnprocessedTransactions\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"UnprocessedTransactions\">Unprocessed transactions</label>\n <span class=\"form-hint\">Transaction records that are still unprocessed by staff.</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"ProcessedUnallocated\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n name=\"selectedreport\"\n (click)=\"validateDates('PROCESSED_UNALLOCATED')\"\n type=\"radio\"\n value=\"PROCESSED_UNALLOCATED\" \n data-aria-controls=\"ProcessedUnallocated\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"ProcessedUnallocated\">Processed unallocated</label>\n <span class=\"form-hint\">Payments that are marked as \u2018Unidentified\u2019 or \u2018Transferred\u2019 (Unsolicited requests)</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"ShortfallsandSurplus\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n name=\"selectedreport\"\n (click)=\"validateDates('SURPLUS_AND_SHORTFALL')\"\n type=\"radio\"\n value=\"SURPLUS_AND_SHORTFALL\" \n data-aria-controls=\"ShortfallsandSurplus\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"ShortfallsandSurplus\">Under payment and Over payment</label>\n <span class=\"form-hint\">Requests where balances are marked as Under payment/Over payment further case management.\n E.g: Refund approval, Customer contact</span>\n </div>\n \n </div>\n </div>\n <div class=\"govuk-form-group\">\n <div class=\"datefrom\">\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"date-from\">Date from</label>\n <input (change)=\"getSelectedFromDate()\" [max]=\"getToday()\" class=\"form-control\" id=\"date-from\" name=\"date-from\" type=\"date\" formControlName=\"startDate\" required/>\n </div>\n\n <div class=\"dateto\">\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"date-to\">Date to</label>\n <input (change)=\"getSelectedFromDate()\" [max]=\"getToday()\" class=\"form-control\" id=\"date-to\" name=\"search\" type=\"date\" formControlName=\"endDate\" required/>\n </div>\n </div>\n <p class=\"inline-error-message\" *ngIf=\"isStartDateLesthanEndDate || isDateRangeBetnWeek\">\n <span *ngIf=\"isStartDateLesthanEndDate\">Please select 'Date From' less than or equal to 'Date To'</span>\n <span *ngIf=\"isDateRangeBetnWeek\"> Please select the date range between 7 days</span>\n </p>\n <div class=\"btnsubmit\">\n <button type=\"submit\" (click)=\"downloadReport()\" class=\"button\" [disabled]=\"!reportsForm.valid || isDownLoadButtondisabled || isStartDateLesthanEndDate || isDateRangeBetnWeek\">Download report</button>\n </div>\n </form>\n \n",
301
- styles: [".govuk-radios__input:focus+.govuk-radios__label::before{border-width:4px;box-shadow:0 0 0 4px #ffaf00}.datefrom{width:50%;float:left}.dateto{width:50%;float:right}.govuk-label--m{font-size:large}.form-hint{padding-left:.7em}.header{margin-top:10px;margin-bottom:15px}.btnsubmit{margin-bottom:30px}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px}"]
302
- }] }
303
- ];
304
- /** @nocollapse */
305
- ReportsComponent.ctorParameters = () => [
306
- { type: XlFileService },
307
- { type: ErrorHandlerService },
308
- { type: FormBuilder },
309
- { type: BulkScaningPaymentService },
310
- { type: PaymentViewService }
311
- ];
312
- if (false) {
313
- /** @type {?} */
314
- ReportsComponent.prototype.reportsForm;
315
- /** @type {?} */
316
- ReportsComponent.prototype.startDate;
317
- /** @type {?} */
318
- ReportsComponent.prototype.endDate;
319
- /** @type {?} */
320
- ReportsComponent.prototype.ccdCaseNumber;
321
- /** @type {?} */
322
- ReportsComponent.prototype.isDownLoadButtondisabled;
323
- /** @type {?} */
324
- ReportsComponent.prototype.isStartDateLesthanEndDate;
325
- /** @type {?} */
326
- ReportsComponent.prototype.isDateRangeBetnWeek;
327
- /** @type {?} */
328
- ReportsComponent.prototype.errorMessage;
329
- /** @type {?} */
330
- ReportsComponent.prototype.paymentGroups;
331
- /**
332
- * @type {?}
333
- * @private
334
- */
335
- ReportsComponent.prototype.xlFileService;
336
- /**
337
- * @type {?}
338
- * @private
339
- */
340
- ReportsComponent.prototype.errorHandlerService;
341
- /**
342
- * @type {?}
343
- * @private
344
- */
345
- ReportsComponent.prototype.formBuilder;
346
- /**
347
- * @type {?}
348
- * @private
349
- */
350
- ReportsComponent.prototype.bulkScaningPaymentService;
351
- /**
352
- * @type {?}
353
- * @private
354
- */
355
- ReportsComponent.prototype.paymentViewService;
356
- }
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3JlcG9ydHMvcmVwb3J0cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBYSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBT3JFLE1BQU0sT0FBTyxnQkFBZ0I7Ozs7Ozs7O0lBVzNCLFlBQ1UsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFdBQXdCLEVBQ3hCLHlCQUFvRCxFQUNwRCxrQkFBc0M7UUFKdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFYaEQsNkJBQXdCLEdBQVcsS0FBSyxDQUFDO1FBQ3pDLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQUMzQyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsaUJBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckUsa0JBQWEs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QXVCOztJQUN2QixxQ0FBa0I7O0lBQ2xCLG1DQUFnQjs7SUFDaEIseUNBQXNCOztJQUN0QixvREFBeUM7O0lBQ3pDLHFEQUEyQzs7SUFDM0MsK0NBQXFDOztJQUNyQyx3Q0FBcUU7O0lBQ3JFLHlDQUFvQzs7Ozs7SUFHbEMseUNBQW9DOzs7OztJQUNwQywrQ0FBZ0Q7Ozs7O0lBQ2hELHVDQUFnQzs7Ozs7SUFDaEMscURBQTREOzs7OztJQUM1RCw4Q0FBOEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7WGxGaWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMveGwtZmlsZS94bC1maWxlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1yZXBvcnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXBvcnRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlcG9ydHNGb3JtOiBGb3JtR3JvdXA7XG4gIHN0YXJ0RGF0ZTogc3RyaW5nO1xuICBlbmREYXRlOiBzdHJpbmc7XG4gIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkOkJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTdGFydERhdGVMZXN0aGFuRW5kRGF0ZTogQm9vbGVhbiA9IGZhbHNlO1xuICBpc0RhdGVSYW5nZUJldG5XZWVrOiBCb29sZWFuID0gZmFsc2U7XG4gIGVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UpO1xuICBwYXltZW50R3JvdXBzOiBJUGF5bWVudEdyb3VwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHhsRmlsZVNlcnZpY2U6IFhsRmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXJTZXJ2aWNlOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlKSB7IH1cbiAgIFxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZnJvbVZhbGlkYXRpb24oKTtcblxuICAgfVxuXG4gIGdldFRvZGF5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuIH1cblxuIGdldFNlbGVjdGVkRnJvbURhdGUoKTogdm9pZCB7XG4gdGhpcy52YWxpZGF0ZURhdGVzKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzZWxlY3RlZHJlcG9ydCcpLnZhbHVlKTtcbiB9XG5cbiB2YWxpZGF0ZURhdGVzKHJlcG9ydE5hbWUpe1xuICBjb25zdCBzZWxlY3RlZFN0YXJ0RGF0ZSA9IHRoaXMudHJhbmZvcm1EYXRlKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzdGFydERhdGUnKS52YWx1ZSksXG4gICAgc2VsZWN0ZWRFbmREYXRlID0gdGhpcy50cmFuZm9ybURhdGUodGhpcy5yZXBvcnRzRm9ybS5nZXQoJ2VuZERhdGUnKS52YWx1ZSk7XG4gIGNvbnN0IGlzRGF0ZVJhbmdlTW9yZVRoYW5XZWVrID0gKDxhbnk+bmV3IERhdGUoc2VsZWN0ZWRTdGFydERhdGUpIC0gPGFueT5uZXcgRGF0ZShzZWxlY3RlZEVuZERhdGUpKS8oMTAwMCAqIDM2MDAgKiAtMjQpID4gNztcbiAgaWYobmV3IERhdGUoc2VsZWN0ZWRTdGFydERhdGUpID4gbmV3IERhdGUoc2VsZWN0ZWRFbmREYXRlKSAmJiBzZWxlY3RlZEVuZERhdGUgIT09ICcnKXtcbiAgICB0aGlzLnJlcG9ydHNGb3JtLmdldCgnc3RhcnREYXRlJykuc2V0VmFsdWUoJycpO1xuICAgIHRoaXMuaXNEYXRlUmFuZ2VCZXRuV2VlayA9IGZhbHNlO1xuICAgIHRoaXMuaXNTdGFydERhdGVMZXN0aGFuRW5kRGF0ZSA9IHRydWU7XG4gIH0gZWxzZSBpZihyZXBvcnROYW1lICYmIHJlcG9ydE5hbWUgPT09J1NVUlBMVVNfQU5EX1NIT1JURkFMTCcgJiYgaXNEYXRlUmFuZ2VNb3JlVGhhbldlZWsgKSB7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUJldG5XZWVrID0gdHJ1ZTtcbiAgICB0aGlzLmlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGUgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlzRGF0ZVJhbmdlQmV0bldlZWsgPSBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGUgPSBmYWxzZTtcbiAgfVxuXG4gfVxuXG4gIGZyb21WYWxpZGF0aW9uKCkge1xuICAgIHRoaXMucmVwb3J0c0Zvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHNlbGVjdGVkcmVwb3J0OiBuZXcgRm9ybUNvbnRyb2woJycpICxcbiAgICAgIHN0YXJ0RGF0ZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGVuZERhdGU6IG5ldyBGb3JtQ29udHJvbCgnJykgXG4gICAgfSk7XG59XG5cbmRvd25sb2FkUmVwb3J0KCl7XG4gIHRoaXMuaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkID0gdHJ1ZTtcbiAgY29uc3QgZGF0YUxvc3NScHREZWZhdWx0ID0gW3tsb3NzX3Jlc3A6JycscGF5bWVudF9hc3NldF9kY246JycsZW52X3JlZjonJyxlbnZfaXRlbTonJyxyZXNwX3NlcnZpY2VfaWQ6JycscmVzcF9zZXJ2aWNlX25hbWU6JycsZGF0ZV9iYW5rZWQ6JycsYmdjX2JhdGNoOicnLHBheW1lbnRfbWV0aG9kOicnLGFtb3VudDonJ31dLFxuICAgIHVuUHJvY2Vzc2VkUnB0RGVmYXVsdCA9IFt7cmVzcF9zZXJ2aWNlX2lkOicnLHJlc3Bfc2VydmljZV9uYW1lOicnLGV4Y2VwdGlvbl9yZWY6JycsY2NkX3JlZjonJyxkYXRlX2JhbmtlZDonJyxiZ2NfYmF0Y2g6JycscGF5bWVudF9hc3NldF9kY246JycsZW52X3JlZjonJyxlbnZfaXRlbTonJyxwYXltZW50X21ldGhvZDonJyxhbW91bnQ6Jyd9XSxcbiAgICBwcm9jZXNzZWRVbmFsbG9jYXRlZCA9W3tyZXNwX3NlcnZpY2VfaWQ6JycscmVzcF9zZXJ2aWNlX25hbWU6JycsYWxsb2NhdGlvbl9zdGF0dXM6JycscmVjZWl2aW5nX29mZmljZTonJyxhbGxvY2F0aW9uX3JlYXNvbjonJyxjY2RfZXhjZXB0aW9uX3JlZjonJyxjY2RfY2FzZV9yZWY6JycscGF5bWVudF9hc3NldF9kY246JycsZW52X3JlZjonJyxlbnZfaXRlbTonJyxkYXRlX2JhbmtlZDonJyxiZ2NfYmF0Y2g6JycscGF5bWVudF9tZXRob2Q6JycsYW1vdW50OicnLHVwZGF0ZWRfYnk6Jyd9XSxcbiAgICBzaG9ydEZhbGxzUnB0RGVmYXVsdCA9IFt7cmVzcF9zZXJ2aWNlX2lkOicnLHJlc3Bfc2VydmljZV9uYW1lOicnLHN1cnBsdXNfc2hvcnRmYWxsOicnLGJhbGFuY2U6JycscGF5bWVudF9hbW91bnQ6JycsY2NkX2Nhc2VfcmVmZXJlbmNlOicnLGNjZF9leGNlcHRpb25fcmVmZXJlbmNlOicnLHByb2Nlc3NlZF9kYXRlOicnLCByZWFzb246JycsIGV4cGxhbmF0aW9uOicnLCB1c2VyX25hbWU6Jyd9XSxcbiAgICBzZWxlY3RlZFJlcG9ydE5hbWUgPSB0aGlzLnJlcG9ydHNGb3JtLmdldCgnc2VsZWN0ZWRyZXBvcnQnKS52YWx1ZSxcbiAgICBzZWxlY3RlZFN0YXJ0RGF0ZSA9IHRoaXMudHJhbmZvcm1EYXRlKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzdGFydERhdGUnKS52YWx1ZSksXG4gICAgc2VsZWN0ZWRFbmREYXRlID0gdGhpcy50cmFuZm9ybURhdGUodGhpcy5yZXBvcnRzRm9ybS5nZXQoJ2VuZERhdGUnKS52YWx1ZSk7XG5cbiAgICBpZihzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdQUk9DRVNTRURfVU5BTExPQ0FURUQnIHx8IHNlbGVjdGVkUmVwb3J0TmFtZSA9PT0gJ1NVUlBMVVNfQU5EX1NIT1JURkFMTCcgKXtcbiAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmRvd25sb2FkU2VsZWN0ZWRSZXBvcnQoc2VsZWN0ZWRSZXBvcnROYW1lLHNlbGVjdGVkU3RhcnREYXRlLHNlbGVjdGVkRW5kRGF0ZSkuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiAge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICAgICAgbGV0IHJlcz0ge2RhdGE6IHRoaXMuYXBwbHlEYXRlRm9ybWF0KHJlc3VsdCl9O1xuICAgICAgICAgIGlmKHJlc1snZGF0YSddLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdQUk9DRVNTRURfVU5BTExPQ0FURUQnICl7XG4gICAgICAgICAgICByZXMuZGF0YT0gcHJvY2Vzc2VkVW5hbGxvY2F0ZWQ7XG4gICAgICAgICAgfSBlbHNlIGlmKHJlc1snZGF0YSddLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdTVVJQTFVTX0FORF9TSE9SVEZBTEwnICkge1xuICAgICAgICAgICAgcmVzLmRhdGE9IHNob3J0RmFsbHNScHREZWZhdWx0O1xuICAgICAgICAgIH0gXG4gICAgICAgICAgaWYocmVzdWx0WydkYXRhJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yKCB2YXIgaT0wOyBpPCByZXNbJ2RhdGEnXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnZW52X3JlZiddID0gcmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXS5zdWJzdHIoMCwxMyk7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2Vudl9pdGVtJ10gPSByZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdLnN1YnN0cigxMywyMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYocmVzWydkYXRhJ11baV1bXCJhbW91bnRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydhbW91bnQnXSA9IHRoaXMuY29udmVydFRvRmxvYXRWYWx1ZShyZXNbJ2RhdGEnXVtpXVsnYW1vdW50J10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wiYmFsYW5jZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2JhbGFuY2UnXSA9IHRoaXMuY29udmVydFRvRmxvYXRWYWx1ZShyZXNbJ2RhdGEnXVtpXVtcImJhbGFuY2VcIl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBPcCA9IHJlc1snZGF0YSddW2ldW1wic3VycGx1c19zaG9ydGZhbGxcIl07XG4gICAgICAgICAgICAgIGlmKE9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnc3VycGx1c19zaG9ydGZhbGwnXSA9IE9wID09XCJTdXJwbHVzXCIgPyBcIk92ZXIgcGF5bWVudFwiOlwiVW5kZXIgcGF5bWVudFwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hbW91bnRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydwYXltZW50X2Ftb3VudCddID0gdGhpcy5jb252ZXJ0VG9GbG9hdFZhbHVlKHJlc1snZGF0YSddW2ldWydwYXltZW50X2Ftb3VudCddKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gXG4gICAgICAgICAgdGhpcy5pc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnhsRmlsZVNlcnZpY2UuZXhwb3J0QXNFeGNlbEZpbGUocmVzWydkYXRhJ10sIHRoaXMuZ2V0RmlsZU5hbWUodGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3NlbGVjdGVkcmVwb3J0JykudmFsdWUsIHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlKTtcbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmRvd25sb2FkU2VsZWN0ZWRSZXBvcnQoc2VsZWN0ZWRSZXBvcnROYW1lLHNlbGVjdGVkU3RhcnREYXRlLHNlbGVjdGVkRW5kRGF0ZSkuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiAge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICAgICAgbGV0IHJlcyA9IHtkYXRhOiB0aGlzLmFwcGx5RGF0ZUZvcm1hdChyZXN1bHQpfTtcbiAgICAgICAgICBpZihyZXNbJ2RhdGEnXS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnREFUQV9MT1NTJyApe1xuICAgICAgICAgICAgcmVzLmRhdGE9IGRhdGFMb3NzUnB0RGVmYXVsdDtcbiAgICAgICAgICB9IGVsc2UgaWYocmVzWydkYXRhJ10ubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkUmVwb3J0TmFtZSA9PT0gJ1VOUFJPQ0VTU0VEJyl7XG4gICAgICAgICAgICByZXMuZGF0YSA9IHVuUHJvY2Vzc2VkUnB0RGVmYXVsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVzdWx0WydkYXRhJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciggdmFyIGk9MDsgaTwgcmVzWydkYXRhJ10ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wiYW1vdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2Ftb3VudCddID0gdGhpcy5jb252ZXJ0VG9GbG9hdFZhbHVlKHJlc1snZGF0YSddW2ldWydhbW91bnQnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydlbnZfcmVmJ10gPSByZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdLnN1YnN0cigwLDEzKTtcbiAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydlbnZfaXRlbSddID0gcmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXS5zdWJzdHIoMTMsMjEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnhsRmlsZVNlcnZpY2UuZXhwb3J0QXNFeGNlbEZpbGUocmVzWydkYXRhJ10sIHRoaXMuZ2V0RmlsZU5hbWUodGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3NlbGVjdGVkcmVwb3J0JykudmFsdWUsIHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUgKSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0RmlsZU5hbWUoc2VsZWN0ZWRPcHRpb246IHN0cmluZywgc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyApIHtcbiAgICBjb25zdCBsb2MgPSAnZW4tVVMnLFxuICAgICAgc3REdCA9IGZvcm1hdERhdGUoc3RhcnREYXRlLCAnZGRNTXl5JywgbG9jKSxcbiAgICAgIGVuRHQgPSBmb3JtYXREYXRlKGVuZERhdGUsICdkZE1NeXknLCBsb2MpLFxuICAgICAgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgIGN1cnJlbnREYXRlID0gZm9ybWF0RGF0ZShub3csICdkZE1NeXknLCBsb2MpLFxuICAgICAgdGltZXN0YW1wID0gYCR7Y3VycmVudERhdGV9XyR7dGhpcy5nZXRUd29kaWdpdChub3cuZ2V0SG91cnMoKSl9JHt0aGlzLmdldFR3b2RpZ2l0KG5vdy5nZXRNaW51dGVzKCkpfSR7dGhpcy5nZXRUd29kaWdpdChub3cuZ2V0U2Vjb25kcygpKX1gLFxuICAgICAgc2VsZWN0ZWRPcHRpb25UeHQgPSB0aGlzLmdldENhbWVsQ2FzZVN0cmluZyhzZWxlY3RlZE9wdGlvbik7XG4gICAgICBcbiAgICAgIHJldHVybiBzZWxlY3RlZE9wdGlvblR4dCsnXycrc3REdCsnX1RvXycrZW5EdCsnX1J1bl8nKyB0aW1lc3RhbXA7XG4gIH0gXG4gIHRyYW5mb3JtRGF0ZShzdHJEYXRlOiBzdHJpbmcpIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgaWYgKHN0ckRhdGUpIHtcbiAgICAgIGxldCBwYXJ0cyA9IHN0ckRhdGUuc3BsaXQoJy0nKTtcbiAgICAgIHJlc3VsdCA9IGAke3BhcnRzWzFdfS8ke3BhcnRzWzJdfS8ke3BhcnRzWzBdfWA7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0VHdvZGlnaXQoaW5wdXQ6IG51bWJlcil7XG4gICAgcmV0dXJuIChcIjBcIiArIGlucHV0KS5zbGljZSgtMik7XG4gIH1cbiAgZ2V0Q2FtZWxDYXNlU3RyaW5nKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBzd2l0Y2goc2VsZWN0ZWRPcHRpb24pIHsgXG4gICAgICBjYXNlICdVTlBST0NFU1NFRCc6IHsgXG4gICAgICAgIHJlc3VsdCA9ICdVbnByb2Nlc3NlZCc7XG4gICAgICAgIGJyZWFrOyBcbiAgICAgIH0gXG4gICAgICBjYXNlICdEQVRBX0xPU1MnOiB7IFxuICAgICAgICByZXN1bHQgPSAnRGF0YV9Mb3NzJztcbiAgICAgICAgYnJlYWs7IFxuICAgICAgfSBcbiAgICAgIGNhc2UgJ1BST0NFU1NFRF9VTkFMTE9DQVRFRCc6IHsgXG4gICAgICAgIHJlc3VsdCA9ICdQcm9jZXNzZWRfVW5hbGxvY2F0ZWQnO1xuICAgICAgICBicmVhazsgXG4gICAgICB9IFxuICAgICAgY2FzZSAnU1VSUExVU19BTkRfU0hPUlRGQUxMJzogeyBcbiAgICAgICAgcmVzdWx0ID0gJ092ZXIgUGF5bWVudF9VbmRlciBQYXltZW50JztcbiAgICAgICAgYnJlYWs7IFxuICAgICAgfSBcbiAgICAgIGRlZmF1bHQ6IHsgXG4gICAgICAgIHJlc3VsdCA9IHNlbGVjdGVkT3B0aW9uO1xuICAgICAgICBicmVhazsgXG4gICAgICB9IFxuICAgfSBcbiAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgYXBwbHlEYXRlRm9ybWF0KHJlcykge1xuICAgIGNvbnN0IGZtdCA9ICdkZC9NTS95eXl5JyxcbiAgICBsb2MgPSAnZW4tVVMnO1xuICAgIHJldHVybiByZXNbJ2RhdGEnXS5tYXAodmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlWydkYXRlX2JhbmtlZCddKSB7XG4gICAgICAgIHZhbHVlWydkYXRlX2JhbmtlZCddID0gZm9ybWF0RGF0ZSh2YWx1ZVsnZGF0ZV9iYW5rZWQnXSwgZm10LCBsb2MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICB9XG4gIFxuICBjb252ZXJ0VG9GbG9hdFZhbHVlKGFtdCkge1xuICAgIHJldHVybiBhbXQgPyBOdW1iZXIucGFyc2VGbG9hdChhbXQpLnRvRml4ZWQoMik6ICcwLjAwJztcbiAgfVxufVxuIl19