@vality/swag-payments 0.1.3-e658db3.0 → 0.1.3-fd6802c.0

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 (761) hide show
  1. package/README.md +224 -12
  2. package/{lib/api → api}/api.d.ts +1 -3
  3. package/{lib/api → api}/categories.service.d.ts +16 -15
  4. package/{lib/api → api}/contracts.service.d.ts +52 -33
  5. package/{lib/api → api}/countries.service.d.ts +16 -15
  6. package/{lib/api → api}/customers.service.d.ts +58 -36
  7. package/{lib/api → api}/invoiceTemplates.service.d.ts +40 -27
  8. package/{lib/api → api}/invoices.service.d.ts +58 -36
  9. package/{lib/api → api}/parties.service.d.ts +40 -27
  10. package/api/paymentInstitutions.service.d.ts +132 -0
  11. package/{lib/api → api}/payments.service.d.ts +88 -51
  12. package/{lib/api → api}/search.service.d.ts +22 -57
  13. package/{lib/api → api}/shops.service.d.ts +52 -33
  14. package/{lib/api → api}/tokens.service.d.ts +10 -12
  15. package/{lib/api → api}/tradeBlocs.service.d.ts +16 -15
  16. package/{lib/api → api}/webhooks.service.d.ts +34 -24
  17. package/api.base.service.d.ts +12 -0
  18. package/{lib/configuration.d.ts → configuration.d.ts} +3 -1
  19. package/fesm2022/vality-swag-payments.mjs +1187 -4352
  20. package/fesm2022/vality-swag-payments.mjs.map +1 -1
  21. package/index.d.ts +6 -5
  22. package/model/accessToken.d.ts +15 -0
  23. package/model/allocationFee.d.ts +24 -0
  24. package/model/allocationFeeTarget.d.ts +21 -0
  25. package/model/allocationTarget.d.ts +21 -0
  26. package/model/allocationTargetShop.d.ts +21 -0
  27. package/model/allocationTransaction.d.ts +32 -0
  28. package/model/apiExtensionRequest.d.ts +16 -0
  29. package/model/applePay.d.ts +22 -0
  30. package/model/articlesOfAssociation.d.ts +17 -0
  31. package/model/bankAccount.d.ts +27 -0
  32. package/model/bankCard.d.ts +23 -0
  33. package/model/bankCardDetails.d.ts +42 -0
  34. package/{lib/model → model}/bankCardTokenProviderData.d.ts +0 -2
  35. package/model/bankCardTokenizationMethod.d.ts +17 -0
  36. package/model/browserGetRequest.d.ts +16 -0
  37. package/model/browserPostRequest.d.ts +21 -0
  38. package/model/browserRequest.d.ts +15 -0
  39. package/model/cancelPayment400Response.d.ts +30 -0
  40. package/model/captureParams.d.ts +33 -0
  41. package/model/capturePayment400Response.d.ts +35 -0
  42. package/model/cardData.d.ts +30 -0
  43. package/model/category.d.ts +14 -0
  44. package/model/chargeback.d.ts +58 -0
  45. package/model/clientInfo.d.ts +26 -0
  46. package/model/contactInfo.d.ts +58 -0
  47. package/model/contract.d.ts +52 -0
  48. package/model/contractAdjustment.d.ts +30 -0
  49. package/model/contractor.d.ts +26 -0
  50. package/model/costAmountRange.d.ts +19 -0
  51. package/model/country.d.ts +20 -0
  52. package/model/createBinding400Response.d.ts +32 -0
  53. package/model/createCustomer400Response.d.ts +32 -0
  54. package/model/createInvoice400Response.d.ts +36 -0
  55. package/model/createInvoiceTemplate400Response.d.ts +32 -0
  56. package/model/createInvoiceWithTemplate400Response.d.ts +29 -0
  57. package/model/createPayment400Response.d.ts +36 -0
  58. package/model/createRefund400Response.d.ts +39 -0
  59. package/model/createWebhook400Response.d.ts +29 -0
  60. package/model/createWebhook429Response.d.ts +15 -0
  61. package/model/cryptoCurrencyTransferRequest.d.ts +24 -0
  62. package/model/cryptoWallet.d.ts +18 -0
  63. package/model/cryptoWalletData.d.ts +18 -0
  64. package/model/cryptoWalletDetails.d.ts +15 -0
  65. package/model/customer.d.ts +44 -0
  66. package/model/customerAndToken.d.ts +15 -0
  67. package/model/customerBinding.d.ts +35 -0
  68. package/model/customerBindingError.d.ts +16 -0
  69. package/model/customerBindingInteractionCompleted.d.ts +20 -0
  70. package/model/customerBindingInteractionRequested.d.ts +20 -0
  71. package/model/customerBindingParams.d.ts +17 -0
  72. package/model/customerBindingStarted.d.ts +16 -0
  73. package/model/customerBindingStatus.d.ts +25 -0
  74. package/model/customerBindingStatusChanged.d.ts +27 -0
  75. package/model/customerChange.d.ts +21 -0
  76. package/model/customerEvent.d.ts +15 -0
  77. package/model/customerParams.d.ts +29 -0
  78. package/model/customerPayer.d.ts +21 -0
  79. package/model/customersTopic.d.ts +34 -0
  80. package/model/decimal.d.ts +22 -0
  81. package/model/defaultLogicError.d.ts +26 -0
  82. package/model/deleteCustomer400Response.d.ts +28 -0
  83. package/model/digitalWallet.d.ts +18 -0
  84. package/model/digitalWalletData.d.ts +26 -0
  85. package/model/digitalWalletDetails.d.ts +15 -0
  86. package/model/externalIDConflictError.d.ts +23 -0
  87. package/model/fulfillInvoice400Response.d.ts +29 -0
  88. package/model/generalError.d.ts +12 -0
  89. package/model/googlePay.d.ts +22 -0
  90. package/model/internationalBankAccount.d.ts +26 -0
  91. package/model/internationalBankDetails.d.ts +34 -0
  92. package/model/internationalCorrespondentBankAccount.d.ts +22 -0
  93. package/model/internationalLegalEntity.d.ts +41 -0
  94. package/{lib/model → model}/invoice.d.ts +2 -2
  95. package/model/invoiceAmountRandomized.d.ts +22 -0
  96. package/model/invoiceAndToken.d.ts +15 -0
  97. package/model/invoiceBankAccount.d.ts +24 -0
  98. package/model/invoiceChange.d.ts +25 -0
  99. package/model/invoiceClientInfo.d.ts +25 -0
  100. package/model/invoiceCreated.d.ts +16 -0
  101. package/model/invoiceEvent.d.ts +15 -0
  102. package/model/invoiceLine.d.ts +32 -0
  103. package/model/invoiceLineTaxMode.d.ts +24 -0
  104. package/model/invoiceLineTaxVAT.d.ts +28 -0
  105. package/{lib/model → model}/invoiceParams.d.ts +2 -2
  106. package/model/invoiceParamsWithTemplate.d.ts +27 -0
  107. package/model/invoiceRandomizeAmount.d.ts +46 -0
  108. package/model/invoiceRussianBankAccount.d.ts +22 -0
  109. package/model/invoiceStatus.d.ts +28 -0
  110. package/model/invoiceStatusChanged.d.ts +29 -0
  111. package/model/invoiceTemplate.d.ts +45 -0
  112. package/model/invoiceTemplateAndToken.d.ts +15 -0
  113. package/model/invoiceTemplateCreateParams.d.ts +41 -0
  114. package/model/invoiceTemplateDetails.d.ts +12 -0
  115. package/model/invoiceTemplateLineCost.d.ts +15 -0
  116. package/model/invoiceTemplateLineCostFixed.d.ts +20 -0
  117. package/model/invoiceTemplateLineCostRange.d.ts +18 -0
  118. package/model/invoiceTemplateLineCostUnlim.d.ts +12 -0
  119. package/model/invoiceTemplateMultiLine.d.ts +21 -0
  120. package/model/invoiceTemplateSingleLine.d.ts +20 -0
  121. package/model/invoiceTemplateUpdateParams.d.ts +29 -0
  122. package/{lib/model → model}/invoicesTopic.d.ts +0 -2
  123. package/model/legalAgreement.d.ts +26 -0
  124. package/model/legalEntity.d.ts +26 -0
  125. package/model/lifetimeInterval.d.ts +17 -0
  126. package/model/logicError.d.ts +16 -0
  127. package/model/mobileCommerce.d.ts +18 -0
  128. package/model/mobileCommerceData.d.ts +16 -0
  129. package/model/mobileCommerceDetails.d.ts +15 -0
  130. package/model/mobileCommercePhone.d.ts +22 -0
  131. package/{lib/model → model}/models.d.ts +2 -73
  132. package/model/party.d.ts +14 -0
  133. package/model/payer.d.ts +17 -0
  134. package/model/payerSessionInfo.d.ts +18 -0
  135. package/{lib/model → model}/payment.d.ts +0 -2
  136. package/model/paymentError.d.ts +20 -0
  137. package/model/paymentFlow.d.ts +22 -0
  138. package/model/paymentFlowHold.d.ts +27 -0
  139. package/model/paymentFlowInstant.d.ts +14 -0
  140. package/model/paymentInstitution.d.ts +29 -0
  141. package/model/paymentInteractionCompleted.d.ts +20 -0
  142. package/model/paymentInteractionRequested.d.ts +20 -0
  143. package/model/paymentMethod.d.ts +25 -0
  144. package/model/paymentParams.d.ts +31 -0
  145. package/model/paymentRecurrentParent.d.ts +22 -0
  146. package/model/paymentResource.d.ts +26 -0
  147. package/model/paymentResourceClientInfo.d.ts +23 -0
  148. package/model/paymentResourceParams.d.ts +15 -0
  149. package/model/paymentResourcePayer.d.ts +29 -0
  150. package/model/paymentResourceResult.d.ts +34 -0
  151. package/{lib/model → model}/paymentSearchResult.d.ts +0 -2
  152. package/model/paymentStarted.d.ts +16 -0
  153. package/model/paymentStatus.d.ts +28 -0
  154. package/model/paymentStatusChanged.d.ts +30 -0
  155. package/model/paymentTerminal.d.ts +18 -0
  156. package/model/paymentTerminalData.d.ts +22 -0
  157. package/model/paymentTerminalDetails.d.ts +15 -0
  158. package/model/paymentTerminalReceipt.d.ts +20 -0
  159. package/model/paymentTerms.d.ts +13 -0
  160. package/model/paymentTool.d.ts +26 -0
  161. package/model/paymentToolDetails.d.ts +18 -0
  162. package/model/paymentToolDetailsBankCard.d.ts +43 -0
  163. package/model/paymentToolDetailsCryptoWallet.d.ts +16 -0
  164. package/model/paymentToolDetailsDigitalWallet.d.ts +16 -0
  165. package/model/paymentToolDetailsMobileCommerce.d.ts +16 -0
  166. package/model/paymentToolDetailsPaymentTerminal.d.ts +16 -0
  167. package/model/powerOfAttorney.d.ts +26 -0
  168. package/model/privateEntity.d.ts +25 -0
  169. package/model/qrCodeDisplayRequest.d.ts +16 -0
  170. package/model/realmMode.d.ts +17 -0
  171. package/model/reason.d.ts +15 -0
  172. package/model/recurrentPayer.d.ts +21 -0
  173. package/model/redirect.d.ts +14 -0
  174. package/{lib/model → model}/refund.d.ts +0 -2
  175. package/model/refundError.d.ts +22 -0
  176. package/model/refundParams.d.ts +37 -0
  177. package/{lib/model → model}/refundSearchResult.d.ts +8 -10
  178. package/model/refundStarted.d.ts +17 -0
  179. package/model/refundStatus.d.ts +25 -0
  180. package/model/refundStatusChanged.d.ts +28 -0
  181. package/model/registeredUser.d.ts +21 -0
  182. package/model/reportLink.d.ts +15 -0
  183. package/model/reportParams.d.ts +29 -0
  184. package/model/reportingPreferences.d.ts +16 -0
  185. package/model/representative.d.ts +24 -0
  186. package/model/representativeDocument.d.ts +22 -0
  187. package/model/rescindInvoice400Response.d.ts +30 -0
  188. package/{lib/model → model}/russianLegalEntity.d.ts +0 -2
  189. package/model/russianPrivateEntity.d.ts +31 -0
  190. package/model/samsungPay.d.ts +22 -0
  191. package/model/schedule.d.ts +17 -0
  192. package/model/searchInvoices200Response.d.ts +17 -0
  193. package/model/searchPayments200Response.d.ts +17 -0
  194. package/model/searchRefunds200Response.d.ts +14 -0
  195. package/model/serviceAcceptanceActPreferences.d.ts +20 -0
  196. package/model/serviceProvider.d.ts +30 -0
  197. package/model/shop.d.ts +46 -0
  198. package/model/shopDetails.d.ts +19 -0
  199. package/model/shopLocation.d.ts +18 -0
  200. package/model/shopLocationUrl.d.ts +19 -0
  201. package/model/subError.d.ts +19 -0
  202. package/model/tokenizedCardData.d.ts +22 -0
  203. package/model/tradeBloc.d.ts +17 -0
  204. package/model/transactionInfo.d.ts +22 -0
  205. package/model/updateInvoiceTemplate400Response.d.ts +29 -0
  206. package/model/userInteraction.d.ts +15 -0
  207. package/model/userInteractionFormInner.d.ts +19 -0
  208. package/model/webhook.d.ts +33 -0
  209. package/model/webhookScope.d.ts +25 -0
  210. package/model/yandexPay.d.ts +22 -0
  211. package/package.json +14 -10
  212. package/esm2022/lib/api/api.mjs +0 -32
  213. package/esm2022/lib/api/categories.service.mjs +0 -212
  214. package/esm2022/lib/api/contracts.service.mjs +0 -592
  215. package/esm2022/lib/api/countries.service.mjs +0 -212
  216. package/esm2022/lib/api/customers.service.mjs +0 -675
  217. package/esm2022/lib/api/invoiceTemplates.service.mjs +0 -491
  218. package/esm2022/lib/api/invoices.service.mjs +0 -698
  219. package/esm2022/lib/api/parties.service.mjs +0 -444
  220. package/esm2022/lib/api/paymentInstitutions.service.mjs +0 -622
  221. package/esm2022/lib/api/payments.service.mjs +0 -1056
  222. package/esm2022/lib/api/payouts.service.mjs +0 -541
  223. package/esm2022/lib/api/search.service.mjs +0 -616
  224. package/esm2022/lib/api/shops.service.mjs +0 -584
  225. package/esm2022/lib/api/tokens.service.mjs +0 -165
  226. package/esm2022/lib/api/tradeBlocs.service.mjs +0 -212
  227. package/esm2022/lib/api/webhooks.service.mjs +0 -401
  228. package/esm2022/lib/api.module.mjs +0 -40
  229. package/esm2022/lib/configuration.mjs +0 -102
  230. package/esm2022/lib/encoder.mjs +0 -19
  231. package/esm2022/lib/index.mjs +0 -7
  232. package/esm2022/lib/model/accessToken.mjs +0 -13
  233. package/esm2022/lib/model/allocationBodyAmount.mjs +0 -2
  234. package/esm2022/lib/model/allocationBodyAmountAllOf.mjs +0 -13
  235. package/esm2022/lib/model/allocationBodyTotal.mjs +0 -2
  236. package/esm2022/lib/model/allocationBodyTotalAllOf.mjs +0 -2
  237. package/esm2022/lib/model/allocationFee.mjs +0 -8
  238. package/esm2022/lib/model/allocationFeeFixed.mjs +0 -2
  239. package/esm2022/lib/model/allocationFeeFixedAllOf.mjs +0 -13
  240. package/esm2022/lib/model/allocationFeeShare.mjs +0 -2
  241. package/esm2022/lib/model/allocationFeeShareAllOf.mjs +0 -2
  242. package/esm2022/lib/model/allocationFeeTarget.mjs +0 -18
  243. package/esm2022/lib/model/allocationTarget.mjs +0 -18
  244. package/esm2022/lib/model/allocationTargetShop.mjs +0 -2
  245. package/esm2022/lib/model/allocationTargetShopAllOf.mjs +0 -13
  246. package/esm2022/lib/model/allocationTransaction.mjs +0 -8
  247. package/esm2022/lib/model/apiExtensionRequest.mjs +0 -2
  248. package/esm2022/lib/model/apiExtensionRequestAllOf.mjs +0 -13
  249. package/esm2022/lib/model/applePay.mjs +0 -2
  250. package/esm2022/lib/model/applePayAllOf.mjs +0 -13
  251. package/esm2022/lib/model/articlesOfAssociation.mjs +0 -2
  252. package/esm2022/lib/model/bankAccount.mjs +0 -13
  253. package/esm2022/lib/model/bankCard.mjs +0 -2
  254. package/esm2022/lib/model/bankCardAllOf.mjs +0 -2
  255. package/esm2022/lib/model/bankCardAllOfTokenProviderData.mjs +0 -19
  256. package/esm2022/lib/model/bankCardDetails.mjs +0 -19
  257. package/esm2022/lib/model/bankCardTokenProviderData.mjs +0 -19
  258. package/esm2022/lib/model/bankCardTokenizationMethod.mjs +0 -16
  259. package/esm2022/lib/model/browserGetRequest.mjs +0 -2
  260. package/esm2022/lib/model/browserGetRequestAllOf.mjs +0 -13
  261. package/esm2022/lib/model/browserPostRequest.mjs +0 -2
  262. package/esm2022/lib/model/browserPostRequestAllOf.mjs +0 -2
  263. package/esm2022/lib/model/browserRequest.mjs +0 -13
  264. package/esm2022/lib/model/cancelPayment400Response.mjs +0 -23
  265. package/esm2022/lib/model/captureParams.mjs +0 -2
  266. package/esm2022/lib/model/captureParamsAllOf.mjs +0 -2
  267. package/esm2022/lib/model/capturePayment400Response.mjs +0 -28
  268. package/esm2022/lib/model/cardData.mjs +0 -2
  269. package/esm2022/lib/model/cardDataAllOf.mjs +0 -13
  270. package/esm2022/lib/model/category.mjs +0 -13
  271. package/esm2022/lib/model/chargeback.mjs +0 -26
  272. package/esm2022/lib/model/clientInfo.mjs +0 -13
  273. package/esm2022/lib/model/contactInfo.mjs +0 -13
  274. package/esm2022/lib/model/contract.mjs +0 -8
  275. package/esm2022/lib/model/contractAdjustment.mjs +0 -13
  276. package/esm2022/lib/model/contractor.mjs +0 -20
  277. package/esm2022/lib/model/costAmountRange.mjs +0 -13
  278. package/esm2022/lib/model/country.mjs +0 -13
  279. package/esm2022/lib/model/createBinding400Response.mjs +0 -25
  280. package/esm2022/lib/model/createCustomer400Response.mjs +0 -25
  281. package/esm2022/lib/model/createInvoice400Response.mjs +0 -29
  282. package/esm2022/lib/model/createInvoiceTemplate400Response.mjs +0 -25
  283. package/esm2022/lib/model/createInvoiceWithTemplate400Response.mjs +0 -22
  284. package/esm2022/lib/model/createPayment400Response.mjs +0 -29
  285. package/esm2022/lib/model/createPayout400Response.mjs +0 -23
  286. package/esm2022/lib/model/createRefund400Response.mjs +0 -32
  287. package/esm2022/lib/model/createWebhook400Response.mjs +0 -22
  288. package/esm2022/lib/model/createWebhook429Response.mjs +0 -13
  289. package/esm2022/lib/model/cryptoCurrencyTransferRequest.mjs +0 -2
  290. package/esm2022/lib/model/cryptoCurrencyTransferRequestAllOf.mjs +0 -13
  291. package/esm2022/lib/model/cryptoWallet.mjs +0 -2
  292. package/esm2022/lib/model/cryptoWalletAllOf.mjs +0 -13
  293. package/esm2022/lib/model/cryptoWalletData.mjs +0 -2
  294. package/esm2022/lib/model/cryptoWalletDetails.mjs +0 -13
  295. package/esm2022/lib/model/customer.mjs +0 -8
  296. package/esm2022/lib/model/customerAndToken.mjs +0 -2
  297. package/esm2022/lib/model/customerBinding.mjs +0 -9
  298. package/esm2022/lib/model/customerBindingError.mjs +0 -13
  299. package/esm2022/lib/model/customerBindingInteractionCompleted.mjs +0 -2
  300. package/esm2022/lib/model/customerBindingInteractionCompletedAllOf.mjs +0 -2
  301. package/esm2022/lib/model/customerBindingInteractionRequested.mjs +0 -2
  302. package/esm2022/lib/model/customerBindingInteractionRequestedAllOf.mjs +0 -2
  303. package/esm2022/lib/model/customerBindingParams.mjs +0 -2
  304. package/esm2022/lib/model/customerBindingStarted.mjs +0 -2
  305. package/esm2022/lib/model/customerBindingStartedAllOf.mjs +0 -2
  306. package/esm2022/lib/model/customerBindingStatus.mjs +0 -9
  307. package/esm2022/lib/model/customerBindingStatusChanged.mjs +0 -9
  308. package/esm2022/lib/model/customerBindingStatusChangedAllOf.mjs +0 -13
  309. package/esm2022/lib/model/customerChange.mjs +0 -21
  310. package/esm2022/lib/model/customerEvent.mjs +0 -2
  311. package/esm2022/lib/model/customerParams.mjs +0 -2
  312. package/esm2022/lib/model/customerPayer.mjs +0 -2
  313. package/esm2022/lib/model/customerPayerAllOf.mjs +0 -2
  314. package/esm2022/lib/model/customersTopic.mjs +0 -12
  315. package/esm2022/lib/model/customersTopicAllOf.mjs +0 -23
  316. package/esm2022/lib/model/decimal.mjs +0 -13
  317. package/esm2022/lib/model/defaultLogicError.mjs +0 -19
  318. package/esm2022/lib/model/deleteCustomer400Response.mjs +0 -21
  319. package/esm2022/lib/model/digitalWallet.mjs +0 -2
  320. package/esm2022/lib/model/digitalWalletAllOf.mjs +0 -13
  321. package/esm2022/lib/model/digitalWalletData.mjs +0 -2
  322. package/esm2022/lib/model/digitalWalletDataAllOf.mjs +0 -13
  323. package/esm2022/lib/model/digitalWalletDetails.mjs +0 -13
  324. package/esm2022/lib/model/externalIDConflictError.mjs +0 -13
  325. package/esm2022/lib/model/fulfillInvoice400Response.mjs +0 -22
  326. package/esm2022/lib/model/generalError.mjs +0 -13
  327. package/esm2022/lib/model/googlePay.mjs +0 -2
  328. package/esm2022/lib/model/googlePayAllOf.mjs +0 -13
  329. package/esm2022/lib/model/internationalBankAccount.mjs +0 -2
  330. package/esm2022/lib/model/internationalBankDetails.mjs +0 -13
  331. package/esm2022/lib/model/internationalCorrespondentBankAccount.mjs +0 -2
  332. package/esm2022/lib/model/internationalLegalEntity.mjs +0 -2
  333. package/esm2022/lib/model/internationalLegalEntityAllOf.mjs +0 -13
  334. package/esm2022/lib/model/invoice.mjs +0 -10
  335. package/esm2022/lib/model/invoiceAndToken.mjs +0 -2
  336. package/esm2022/lib/model/invoiceBankAccount.mjs +0 -18
  337. package/esm2022/lib/model/invoiceChange.mjs +0 -25
  338. package/esm2022/lib/model/invoiceClientInfo.mjs +0 -19
  339. package/esm2022/lib/model/invoiceCreated.mjs +0 -2
  340. package/esm2022/lib/model/invoiceCreatedAllOf.mjs +0 -2
  341. package/esm2022/lib/model/invoiceEvent.mjs +0 -2
  342. package/esm2022/lib/model/invoiceLine.mjs +0 -2
  343. package/esm2022/lib/model/invoiceLineTaxMode.mjs +0 -18
  344. package/esm2022/lib/model/invoiceLineTaxVAT.mjs +0 -13
  345. package/esm2022/lib/model/invoiceLineTaxVATAllOf.mjs +0 -24
  346. package/esm2022/lib/model/invoiceParams.mjs +0 -2
  347. package/esm2022/lib/model/invoiceParamsWithTemplate.mjs +0 -13
  348. package/esm2022/lib/model/invoiceRussianBankAccount.mjs +0 -2
  349. package/esm2022/lib/model/invoiceRussianBankAccountAllOf.mjs +0 -13
  350. package/esm2022/lib/model/invoiceStatus.mjs +0 -21
  351. package/esm2022/lib/model/invoiceStatusChanged.mjs +0 -10
  352. package/esm2022/lib/model/invoiceTemplate.mjs +0 -2
  353. package/esm2022/lib/model/invoiceTemplateAndToken.mjs +0 -2
  354. package/esm2022/lib/model/invoiceTemplateCreateParams.mjs +0 -2
  355. package/esm2022/lib/model/invoiceTemplateDetails.mjs +0 -13
  356. package/esm2022/lib/model/invoiceTemplateLineCost.mjs +0 -13
  357. package/esm2022/lib/model/invoiceTemplateLineCostFixed.mjs +0 -2
  358. package/esm2022/lib/model/invoiceTemplateLineCostFixedAllOf.mjs +0 -13
  359. package/esm2022/lib/model/invoiceTemplateLineCostRange.mjs +0 -2
  360. package/esm2022/lib/model/invoiceTemplateLineCostRangeAllOf.mjs +0 -2
  361. package/esm2022/lib/model/invoiceTemplateLineCostUnlim.mjs +0 -2
  362. package/esm2022/lib/model/invoiceTemplateMultiLine.mjs +0 -2
  363. package/esm2022/lib/model/invoiceTemplateMultiLineAllOf.mjs +0 -2
  364. package/esm2022/lib/model/invoiceTemplateSingleLine.mjs +0 -2
  365. package/esm2022/lib/model/invoiceTemplateSingleLineAllOf.mjs +0 -2
  366. package/esm2022/lib/model/invoiceTemplateUpdateParams.mjs +0 -2
  367. package/esm2022/lib/model/invoicesTopic.mjs +0 -21
  368. package/esm2022/lib/model/invoicesTopicAllOf.mjs +0 -32
  369. package/esm2022/lib/model/legalAgreement.mjs +0 -13
  370. package/esm2022/lib/model/legalEntity.mjs +0 -2
  371. package/esm2022/lib/model/legalEntityAllOf.mjs +0 -19
  372. package/esm2022/lib/model/lifetimeInterval.mjs +0 -13
  373. package/esm2022/lib/model/logicError.mjs +0 -13
  374. package/esm2022/lib/model/mobileCommerce.mjs +0 -2
  375. package/esm2022/lib/model/mobileCommerceAllOf.mjs +0 -13
  376. package/esm2022/lib/model/mobileCommerceData.mjs +0 -2
  377. package/esm2022/lib/model/mobileCommerceDataAllOf.mjs +0 -2
  378. package/esm2022/lib/model/mobileCommerceDetails.mjs +0 -13
  379. package/esm2022/lib/model/mobileCommercePhone.mjs +0 -13
  380. package/esm2022/lib/model/models.mjs +0 -264
  381. package/esm2022/lib/model/party.mjs +0 -13
  382. package/esm2022/lib/model/payer.mjs +0 -2
  383. package/esm2022/lib/model/payerSessionInfo.mjs +0 -13
  384. package/esm2022/lib/model/payment.mjs +0 -12
  385. package/esm2022/lib/model/paymentError.mjs +0 -2
  386. package/esm2022/lib/model/paymentFlow.mjs +0 -19
  387. package/esm2022/lib/model/paymentFlowHold.mjs +0 -8
  388. package/esm2022/lib/model/paymentFlowHoldAllOf.mjs +0 -19
  389. package/esm2022/lib/model/paymentFlowInstant.mjs +0 -2
  390. package/esm2022/lib/model/paymentInstitution.mjs +0 -19
  391. package/esm2022/lib/model/paymentInteractionCompleted.mjs +0 -2
  392. package/esm2022/lib/model/paymentInteractionCompletedAllOf.mjs +0 -2
  393. package/esm2022/lib/model/paymentInteractionRequested.mjs +0 -2
  394. package/esm2022/lib/model/paymentInteractionRequestedAllOf.mjs +0 -2
  395. package/esm2022/lib/model/paymentMethod.mjs +0 -22
  396. package/esm2022/lib/model/paymentParams.mjs +0 -2
  397. package/esm2022/lib/model/paymentRecurrentParent.mjs +0 -13
  398. package/esm2022/lib/model/paymentResource.mjs +0 -2
  399. package/esm2022/lib/model/paymentResourceClientInfo.mjs +0 -13
  400. package/esm2022/lib/model/paymentResourceParams.mjs +0 -2
  401. package/esm2022/lib/model/paymentResourcePayer.mjs +0 -2
  402. package/esm2022/lib/model/paymentResourcePayerAllOf.mjs +0 -2
  403. package/esm2022/lib/model/paymentResourceResult.mjs +0 -2
  404. package/esm2022/lib/model/paymentSearchResult.mjs +0 -12
  405. package/esm2022/lib/model/paymentSearchResultAllOf.mjs +0 -2
  406. package/esm2022/lib/model/paymentStarted.mjs +0 -2
  407. package/esm2022/lib/model/paymentStartedAllOf.mjs +0 -2
  408. package/esm2022/lib/model/paymentStatus.mjs +0 -12
  409. package/esm2022/lib/model/paymentStatusChanged.mjs +0 -12
  410. package/esm2022/lib/model/paymentStatusChangedAllOf.mjs +0 -13
  411. package/esm2022/lib/model/paymentTerminal.mjs +0 -2
  412. package/esm2022/lib/model/paymentTerminalAllOf.mjs +0 -13
  413. package/esm2022/lib/model/paymentTerminalData.mjs +0 -2
  414. package/esm2022/lib/model/paymentTerminalDataAllOf.mjs +0 -13
  415. package/esm2022/lib/model/paymentTerminalDetails.mjs +0 -13
  416. package/esm2022/lib/model/paymentTerminalReceipt.mjs +0 -2
  417. package/esm2022/lib/model/paymentTerminalReceiptAllOf.mjs +0 -13
  418. package/esm2022/lib/model/paymentTerms.mjs +0 -13
  419. package/esm2022/lib/model/paymentTool.mjs +0 -23
  420. package/esm2022/lib/model/paymentToolDetails.mjs +0 -13
  421. package/esm2022/lib/model/paymentToolDetailsBankCard.mjs +0 -8
  422. package/esm2022/lib/model/paymentToolDetailsCryptoWallet.mjs +0 -2
  423. package/esm2022/lib/model/paymentToolDetailsDigitalWallet.mjs +0 -2
  424. package/esm2022/lib/model/paymentToolDetailsMobileCommerce.mjs +0 -2
  425. package/esm2022/lib/model/paymentToolDetailsPaymentTerminal.mjs +0 -2
  426. package/esm2022/lib/model/payout.mjs +0 -2
  427. package/esm2022/lib/model/payoutParams.mjs +0 -13
  428. package/esm2022/lib/model/payoutTool.mjs +0 -2
  429. package/esm2022/lib/model/payoutToolAllOf.mjs +0 -13
  430. package/esm2022/lib/model/payoutToolDetails.mjs +0 -13
  431. package/esm2022/lib/model/payoutToolDetailsBankAccount.mjs +0 -2
  432. package/esm2022/lib/model/payoutToolDetailsInternationalBankAccount.mjs +0 -2
  433. package/esm2022/lib/model/payoutToolDetailsPaymentInstitutionAccount.mjs +0 -2
  434. package/esm2022/lib/model/payoutToolDetailsWalletInfo.mjs +0 -2
  435. package/esm2022/lib/model/payoutToolDetailsWalletInfoAllOf.mjs +0 -13
  436. package/esm2022/lib/model/payoutToolParams.mjs +0 -2
  437. package/esm2022/lib/model/powerOfAttorney.mjs +0 -2
  438. package/esm2022/lib/model/privateEntity.mjs +0 -2
  439. package/esm2022/lib/model/privateEntityAllOf.mjs +0 -18
  440. package/esm2022/lib/model/qrCodeDisplayRequest.mjs +0 -2
  441. package/esm2022/lib/model/qrCodeDisplayRequestAllOf.mjs +0 -13
  442. package/esm2022/lib/model/realmMode.mjs +0 -16
  443. package/esm2022/lib/model/reason.mjs +0 -13
  444. package/esm2022/lib/model/recurrentPayer.mjs +0 -2
  445. package/esm2022/lib/model/recurrentPayerAllOf.mjs +0 -2
  446. package/esm2022/lib/model/redirect.mjs +0 -2
  447. package/esm2022/lib/model/redirectAllOf.mjs +0 -2
  448. package/esm2022/lib/model/refund.mjs +0 -9
  449. package/esm2022/lib/model/refundError.mjs +0 -13
  450. package/esm2022/lib/model/refundParams.mjs +0 -2
  451. package/esm2022/lib/model/refundSearchResult.mjs +0 -9
  452. package/esm2022/lib/model/refundSearchResultAllOf.mjs +0 -13
  453. package/esm2022/lib/model/refundStarted.mjs +0 -2
  454. package/esm2022/lib/model/refundStartedAllOf.mjs +0 -2
  455. package/esm2022/lib/model/refundStatus.mjs +0 -9
  456. package/esm2022/lib/model/refundStatusChanged.mjs +0 -9
  457. package/esm2022/lib/model/refundStatusChangedAllOf.mjs +0 -13
  458. package/esm2022/lib/model/registeredUser.mjs +0 -2
  459. package/esm2022/lib/model/registeredUserAllOf.mjs +0 -13
  460. package/esm2022/lib/model/reportLink.mjs +0 -13
  461. package/esm2022/lib/model/reportParams.mjs +0 -18
  462. package/esm2022/lib/model/reportingPreferences.mjs +0 -2
  463. package/esm2022/lib/model/representative.mjs +0 -2
  464. package/esm2022/lib/model/representativeDocument.mjs +0 -19
  465. package/esm2022/lib/model/rescindInvoice400Response.mjs +0 -23
  466. package/esm2022/lib/model/russianLegalEntity.mjs +0 -2
  467. package/esm2022/lib/model/russianLegalEntityAllOf.mjs +0 -2
  468. package/esm2022/lib/model/russianPrivateEntity.mjs +0 -2
  469. package/esm2022/lib/model/russianPrivateEntityAllOf.mjs +0 -2
  470. package/esm2022/lib/model/samsungPay.mjs +0 -2
  471. package/esm2022/lib/model/samsungPayAllOf.mjs +0 -13
  472. package/esm2022/lib/model/schedule.mjs +0 -13
  473. package/esm2022/lib/model/searchInvoices200Response.mjs +0 -2
  474. package/esm2022/lib/model/searchPayments200Response.mjs +0 -2
  475. package/esm2022/lib/model/searchPayouts200Response.mjs +0 -2
  476. package/esm2022/lib/model/searchRefunds200Response.mjs +0 -2
  477. package/esm2022/lib/model/serviceAcceptanceActPreferences.mjs +0 -2
  478. package/esm2022/lib/model/serviceProvider.mjs +0 -13
  479. package/esm2022/lib/model/shop.mjs +0 -2
  480. package/esm2022/lib/model/shopDetails.mjs +0 -13
  481. package/esm2022/lib/model/shopLocation.mjs +0 -13
  482. package/esm2022/lib/model/shopLocationUrl.mjs +0 -2
  483. package/esm2022/lib/model/shopLocationUrlAllOf.mjs +0 -13
  484. package/esm2022/lib/model/subError.mjs +0 -13
  485. package/esm2022/lib/model/tokenizedCardData.mjs +0 -2
  486. package/esm2022/lib/model/tokenizedCardDataAllOf.mjs +0 -21
  487. package/esm2022/lib/model/tradeBloc.mjs +0 -13
  488. package/esm2022/lib/model/transactionInfo.mjs +0 -13
  489. package/esm2022/lib/model/updateInvoiceTemplate400Response.mjs +0 -22
  490. package/esm2022/lib/model/userInteraction.mjs +0 -13
  491. package/esm2022/lib/model/userInteractionFormInner.mjs +0 -13
  492. package/esm2022/lib/model/webhook.mjs +0 -2
  493. package/esm2022/lib/model/webhookScope.mjs +0 -19
  494. package/esm2022/lib/model/yandexPay.mjs +0 -2
  495. package/esm2022/lib/model/yandexPayAllOf.mjs +0 -13
  496. package/esm2022/lib/param.mjs +0 -2
  497. package/esm2022/lib/variables.mjs +0 -9
  498. package/esm2022/public-api.mjs +0 -2
  499. package/esm2022/vality-swag-payments.mjs +0 -5
  500. package/lib/api/paymentInstitutions.service.d.ts +0 -245
  501. package/lib/api/payouts.service.d.ts +0 -209
  502. package/lib/index.d.ts +0 -6
  503. package/lib/model/accessToken.d.ts +0 -17
  504. package/lib/model/allocationBodyAmountAllOf.d.ts +0 -21
  505. package/lib/model/allocationBodyTotalAllOf.d.ts +0 -27
  506. package/lib/model/allocationFee.d.ts +0 -26
  507. package/lib/model/allocationFeeFixedAllOf.d.ts +0 -17
  508. package/lib/model/allocationFeeShareAllOf.d.ts +0 -19
  509. package/lib/model/allocationFeeTarget.d.ts +0 -23
  510. package/lib/model/allocationTarget.d.ts +0 -23
  511. package/lib/model/allocationTargetShop.d.ts +0 -23
  512. package/lib/model/allocationTargetShopAllOf.d.ts +0 -17
  513. package/lib/model/allocationTransaction.d.ts +0 -34
  514. package/lib/model/apiExtensionRequest.d.ts +0 -18
  515. package/lib/model/apiExtensionRequestAllOf.d.ts +0 -17
  516. package/lib/model/applePay.d.ts +0 -24
  517. package/lib/model/applePayAllOf.d.ts +0 -24
  518. package/lib/model/articlesOfAssociation.d.ts +0 -19
  519. package/lib/model/bankAccount.d.ts +0 -29
  520. package/lib/model/bankCard.d.ts +0 -26
  521. package/lib/model/bankCardAllOf.d.ts +0 -23
  522. package/lib/model/bankCardAllOfTokenProviderData.d.ts +0 -36
  523. package/lib/model/bankCardDetails.d.ts +0 -44
  524. package/lib/model/bankCardTokenizationMethod.d.ts +0 -19
  525. package/lib/model/browserGetRequest.d.ts +0 -18
  526. package/lib/model/browserGetRequestAllOf.d.ts +0 -17
  527. package/lib/model/browserPostRequest.d.ts +0 -23
  528. package/lib/model/browserPostRequestAllOf.d.ts +0 -22
  529. package/lib/model/browserRequest.d.ts +0 -17
  530. package/lib/model/cancelPayment400Response.d.ts +0 -32
  531. package/lib/model/captureParams.d.ts +0 -35
  532. package/lib/model/captureParamsAllOf.d.ts +0 -34
  533. package/lib/model/capturePayment400Response.d.ts +0 -37
  534. package/lib/model/cardData.d.ts +0 -32
  535. package/lib/model/cardDataAllOf.d.ts +0 -32
  536. package/lib/model/category.d.ts +0 -16
  537. package/lib/model/chargeback.d.ts +0 -60
  538. package/lib/model/clientInfo.d.ts +0 -28
  539. package/lib/model/contactInfo.d.ts +0 -52
  540. package/lib/model/contract.d.ts +0 -54
  541. package/lib/model/contractAdjustment.d.ts +0 -32
  542. package/lib/model/contractor.d.ts +0 -28
  543. package/lib/model/costAmountRange.d.ts +0 -21
  544. package/lib/model/country.d.ts +0 -22
  545. package/lib/model/createBinding400Response.d.ts +0 -34
  546. package/lib/model/createCustomer400Response.d.ts +0 -34
  547. package/lib/model/createInvoice400Response.d.ts +0 -38
  548. package/lib/model/createInvoiceTemplate400Response.d.ts +0 -34
  549. package/lib/model/createInvoiceWithTemplate400Response.d.ts +0 -31
  550. package/lib/model/createPayment400Response.d.ts +0 -38
  551. package/lib/model/createPayout400Response.d.ts +0 -32
  552. package/lib/model/createRefund400Response.d.ts +0 -41
  553. package/lib/model/createWebhook400Response.d.ts +0 -31
  554. package/lib/model/createWebhook429Response.d.ts +0 -17
  555. package/lib/model/cryptoCurrencyTransferRequest.d.ts +0 -26
  556. package/lib/model/cryptoCurrencyTransferRequestAllOf.d.ts +0 -25
  557. package/lib/model/cryptoWallet.d.ts +0 -20
  558. package/lib/model/cryptoWalletAllOf.d.ts +0 -17
  559. package/lib/model/cryptoWalletData.d.ts +0 -20
  560. package/lib/model/cryptoWalletDetails.d.ts +0 -17
  561. package/lib/model/customer.d.ts +0 -46
  562. package/lib/model/customerAndToken.d.ts +0 -17
  563. package/lib/model/customerBinding.d.ts +0 -37
  564. package/lib/model/customerBindingError.d.ts +0 -18
  565. package/lib/model/customerBindingInteractionCompleted.d.ts +0 -22
  566. package/lib/model/customerBindingInteractionCompletedAllOf.d.ts +0 -22
  567. package/lib/model/customerBindingInteractionRequested.d.ts +0 -22
  568. package/lib/model/customerBindingInteractionRequestedAllOf.d.ts +0 -22
  569. package/lib/model/customerBindingParams.d.ts +0 -19
  570. package/lib/model/customerBindingStarted.d.ts +0 -18
  571. package/lib/model/customerBindingStartedAllOf.d.ts +0 -15
  572. package/lib/model/customerBindingStatus.d.ts +0 -27
  573. package/lib/model/customerBindingStatusChanged.d.ts +0 -29
  574. package/lib/model/customerBindingStatusChangedAllOf.d.ts +0 -14
  575. package/lib/model/customerChange.d.ts +0 -23
  576. package/lib/model/customerEvent.d.ts +0 -17
  577. package/lib/model/customerParams.d.ts +0 -31
  578. package/lib/model/customerPayer.d.ts +0 -23
  579. package/lib/model/customerPayerAllOf.d.ts +0 -19
  580. package/lib/model/customersTopic.d.ts +0 -36
  581. package/lib/model/customersTopicAllOf.d.ts +0 -32
  582. package/lib/model/decimal.d.ts +0 -24
  583. package/lib/model/defaultLogicError.d.ts +0 -28
  584. package/lib/model/deleteCustomer400Response.d.ts +0 -30
  585. package/lib/model/digitalWallet.d.ts +0 -20
  586. package/lib/model/digitalWalletAllOf.d.ts +0 -17
  587. package/lib/model/digitalWalletData.d.ts +0 -28
  588. package/lib/model/digitalWalletDataAllOf.d.ts +0 -28
  589. package/lib/model/digitalWalletDetails.d.ts +0 -17
  590. package/lib/model/externalIDConflictError.d.ts +0 -25
  591. package/lib/model/fulfillInvoice400Response.d.ts +0 -31
  592. package/lib/model/generalError.d.ts +0 -14
  593. package/lib/model/googlePay.d.ts +0 -24
  594. package/lib/model/googlePayAllOf.d.ts +0 -24
  595. package/lib/model/internationalBankAccount.d.ts +0 -28
  596. package/lib/model/internationalBankDetails.d.ts +0 -36
  597. package/lib/model/internationalCorrespondentBankAccount.d.ts +0 -24
  598. package/lib/model/internationalLegalEntity.d.ts +0 -43
  599. package/lib/model/internationalLegalEntityAllOf.d.ts +0 -37
  600. package/lib/model/invoiceAndToken.d.ts +0 -17
  601. package/lib/model/invoiceBankAccount.d.ts +0 -26
  602. package/lib/model/invoiceChange.d.ts +0 -27
  603. package/lib/model/invoiceClientInfo.d.ts +0 -27
  604. package/lib/model/invoiceCreated.d.ts +0 -18
  605. package/lib/model/invoiceCreatedAllOf.d.ts +0 -15
  606. package/lib/model/invoiceEvent.d.ts +0 -17
  607. package/lib/model/invoiceLine.d.ts +0 -34
  608. package/lib/model/invoiceLineTaxMode.d.ts +0 -26
  609. package/lib/model/invoiceLineTaxVAT.d.ts +0 -30
  610. package/lib/model/invoiceLineTaxVATAllOf.d.ts +0 -32
  611. package/lib/model/invoiceParamsWithTemplate.d.ts +0 -29
  612. package/lib/model/invoiceRussianBankAccount.d.ts +0 -24
  613. package/lib/model/invoiceRussianBankAccountAllOf.d.ts +0 -24
  614. package/lib/model/invoiceStatus.d.ts +0 -30
  615. package/lib/model/invoiceStatusChanged.d.ts +0 -31
  616. package/lib/model/invoiceTemplate.d.ts +0 -45
  617. package/lib/model/invoiceTemplateAndToken.d.ts +0 -17
  618. package/lib/model/invoiceTemplateCreateParams.d.ts +0 -41
  619. package/lib/model/invoiceTemplateDetails.d.ts +0 -14
  620. package/lib/model/invoiceTemplateLineCost.d.ts +0 -17
  621. package/lib/model/invoiceTemplateLineCostFixed.d.ts +0 -22
  622. package/lib/model/invoiceTemplateLineCostFixedAllOf.d.ts +0 -21
  623. package/lib/model/invoiceTemplateLineCostRange.d.ts +0 -20
  624. package/lib/model/invoiceTemplateLineCostRangeAllOf.d.ts +0 -19
  625. package/lib/model/invoiceTemplateLineCostUnlim.d.ts +0 -14
  626. package/lib/model/invoiceTemplateMultiLine.d.ts +0 -23
  627. package/lib/model/invoiceTemplateMultiLineAllOf.d.ts +0 -22
  628. package/lib/model/invoiceTemplateSingleLine.d.ts +0 -22
  629. package/lib/model/invoiceTemplateSingleLineAllOf.d.ts +0 -21
  630. package/lib/model/invoiceTemplateUpdateParams.d.ts +0 -29
  631. package/lib/model/invoicesTopicAllOf.d.ts +0 -41
  632. package/lib/model/legalAgreement.d.ts +0 -28
  633. package/lib/model/legalEntity.d.ts +0 -20
  634. package/lib/model/legalEntityAllOf.d.ts +0 -24
  635. package/lib/model/lifetimeInterval.d.ts +0 -19
  636. package/lib/model/logicError.d.ts +0 -18
  637. package/lib/model/mobileCommerce.d.ts +0 -20
  638. package/lib/model/mobileCommerceAllOf.d.ts +0 -17
  639. package/lib/model/mobileCommerceData.d.ts +0 -6
  640. package/lib/model/mobileCommerceDataAllOf.d.ts +0 -18
  641. package/lib/model/mobileCommerceDetails.d.ts +0 -17
  642. package/lib/model/mobileCommercePhone.d.ts +0 -24
  643. package/lib/model/party.d.ts +0 -16
  644. package/lib/model/payer.d.ts +0 -19
  645. package/lib/model/payerSessionInfo.d.ts +0 -20
  646. package/lib/model/paymentError.d.ts +0 -22
  647. package/lib/model/paymentFlow.d.ts +0 -24
  648. package/lib/model/paymentFlowHold.d.ts +0 -29
  649. package/lib/model/paymentFlowHoldAllOf.d.ts +0 -28
  650. package/lib/model/paymentFlowInstant.d.ts +0 -16
  651. package/lib/model/paymentInstitution.d.ts +0 -31
  652. package/lib/model/paymentInteractionCompleted.d.ts +0 -22
  653. package/lib/model/paymentInteractionCompletedAllOf.d.ts +0 -22
  654. package/lib/model/paymentInteractionRequested.d.ts +0 -22
  655. package/lib/model/paymentInteractionRequestedAllOf.d.ts +0 -22
  656. package/lib/model/paymentMethod.d.ts +0 -27
  657. package/lib/model/paymentParams.d.ts +0 -33
  658. package/lib/model/paymentRecurrentParent.d.ts +0 -24
  659. package/lib/model/paymentResource.d.ts +0 -28
  660. package/lib/model/paymentResourceClientInfo.d.ts +0 -25
  661. package/lib/model/paymentResourceParams.d.ts +0 -17
  662. package/lib/model/paymentResourcePayer.d.ts +0 -31
  663. package/lib/model/paymentResourcePayerAllOf.d.ts +0 -15
  664. package/lib/model/paymentResourceResult.d.ts +0 -36
  665. package/lib/model/paymentSearchResultAllOf.d.ts +0 -73
  666. package/lib/model/paymentStarted.d.ts +0 -18
  667. package/lib/model/paymentStartedAllOf.d.ts +0 -15
  668. package/lib/model/paymentStatus.d.ts +0 -30
  669. package/lib/model/paymentStatusChanged.d.ts +0 -32
  670. package/lib/model/paymentStatusChangedAllOf.d.ts +0 -14
  671. package/lib/model/paymentTerminal.d.ts +0 -20
  672. package/lib/model/paymentTerminalAllOf.d.ts +0 -17
  673. package/lib/model/paymentTerminalData.d.ts +0 -24
  674. package/lib/model/paymentTerminalDataAllOf.d.ts +0 -24
  675. package/lib/model/paymentTerminalDetails.d.ts +0 -17
  676. package/lib/model/paymentTerminalReceipt.d.ts +0 -22
  677. package/lib/model/paymentTerminalReceiptAllOf.d.ts +0 -21
  678. package/lib/model/paymentTerms.d.ts +0 -15
  679. package/lib/model/paymentTool.d.ts +0 -28
  680. package/lib/model/paymentToolDetails.d.ts +0 -20
  681. package/lib/model/paymentToolDetailsBankCard.d.ts +0 -45
  682. package/lib/model/paymentToolDetailsCryptoWallet.d.ts +0 -18
  683. package/lib/model/paymentToolDetailsDigitalWallet.d.ts +0 -18
  684. package/lib/model/paymentToolDetailsMobileCommerce.d.ts +0 -18
  685. package/lib/model/paymentToolDetailsPaymentTerminal.d.ts +0 -18
  686. package/lib/model/payout.d.ts +0 -47
  687. package/lib/model/payoutParams.d.ts +0 -37
  688. package/lib/model/payoutTool.d.ts +0 -26
  689. package/lib/model/payoutToolAllOf.d.ts +0 -17
  690. package/lib/model/payoutToolDetails.d.ts +0 -20
  691. package/lib/model/payoutToolDetailsBankAccount.d.ts +0 -27
  692. package/lib/model/payoutToolDetailsInternationalBankAccount.d.ts +0 -26
  693. package/lib/model/payoutToolDetailsPaymentInstitutionAccount.d.ts +0 -14
  694. package/lib/model/payoutToolDetailsWalletInfo.d.ts +0 -18
  695. package/lib/model/payoutToolDetailsWalletInfoAllOf.d.ts +0 -17
  696. package/lib/model/payoutToolParams.d.ts +0 -19
  697. package/lib/model/powerOfAttorney.d.ts +0 -28
  698. package/lib/model/privateEntity.d.ts +0 -20
  699. package/lib/model/privateEntityAllOf.d.ts +0 -23
  700. package/lib/model/qrCodeDisplayRequest.d.ts +0 -18
  701. package/lib/model/qrCodeDisplayRequestAllOf.d.ts +0 -17
  702. package/lib/model/realmMode.d.ts +0 -19
  703. package/lib/model/reason.d.ts +0 -17
  704. package/lib/model/recurrentPayer.d.ts +0 -23
  705. package/lib/model/recurrentPayerAllOf.d.ts +0 -19
  706. package/lib/model/redirect.d.ts +0 -16
  707. package/lib/model/redirectAllOf.d.ts +0 -15
  708. package/lib/model/refundError.d.ts +0 -24
  709. package/lib/model/refundParams.d.ts +0 -39
  710. package/lib/model/refundSearchResultAllOf.d.ts +0 -21
  711. package/lib/model/refundStarted.d.ts +0 -19
  712. package/lib/model/refundStartedAllOf.d.ts +0 -16
  713. package/lib/model/refundStatus.d.ts +0 -27
  714. package/lib/model/refundStatusChanged.d.ts +0 -30
  715. package/lib/model/refundStatusChangedAllOf.d.ts +0 -15
  716. package/lib/model/registeredUser.d.ts +0 -23
  717. package/lib/model/registeredUserAllOf.d.ts +0 -17
  718. package/lib/model/reportLink.d.ts +0 -17
  719. package/lib/model/reportParams.d.ts +0 -31
  720. package/lib/model/reportingPreferences.d.ts +0 -18
  721. package/lib/model/representative.d.ts +0 -26
  722. package/lib/model/representativeDocument.d.ts +0 -24
  723. package/lib/model/rescindInvoice400Response.d.ts +0 -32
  724. package/lib/model/russianLegalEntityAllOf.d.ts +0 -47
  725. package/lib/model/russianPrivateEntity.d.ts +0 -33
  726. package/lib/model/russianPrivateEntityAllOf.d.ts +0 -27
  727. package/lib/model/samsungPay.d.ts +0 -24
  728. package/lib/model/samsungPayAllOf.d.ts +0 -24
  729. package/lib/model/schedule.d.ts +0 -19
  730. package/lib/model/searchInvoices200Response.d.ts +0 -19
  731. package/lib/model/searchPayments200Response.d.ts +0 -19
  732. package/lib/model/searchPayouts200Response.d.ts +0 -16
  733. package/lib/model/searchRefunds200Response.d.ts +0 -16
  734. package/lib/model/serviceAcceptanceActPreferences.d.ts +0 -22
  735. package/lib/model/serviceProvider.d.ts +0 -32
  736. package/lib/model/shop.d.ts +0 -56
  737. package/lib/model/shopDetails.d.ts +0 -21
  738. package/lib/model/shopLocation.d.ts +0 -20
  739. package/lib/model/shopLocationUrl.d.ts +0 -21
  740. package/lib/model/shopLocationUrlAllOf.d.ts +0 -17
  741. package/lib/model/subError.d.ts +0 -21
  742. package/lib/model/tokenizedCardData.d.ts +0 -17
  743. package/lib/model/tokenizedCardDataAllOf.d.ts +0 -26
  744. package/lib/model/tradeBloc.d.ts +0 -19
  745. package/lib/model/transactionInfo.d.ts +0 -24
  746. package/lib/model/updateInvoiceTemplate400Response.d.ts +0 -31
  747. package/lib/model/userInteraction.d.ts +0 -17
  748. package/lib/model/userInteractionFormInner.d.ts +0 -21
  749. package/lib/model/webhook.d.ts +0 -35
  750. package/lib/model/webhookScope.d.ts +0 -27
  751. package/lib/model/yandexPay.d.ts +0 -24
  752. package/lib/model/yandexPayAllOf.d.ts +0 -24
  753. package/public-api.d.ts +0 -1
  754. /package/{lib/api.module.d.ts → api.module.d.ts} +0 -0
  755. /package/{lib/encoder.d.ts → encoder.d.ts} +0 -0
  756. /package/{lib/model → model}/allocationBodyAmount.d.ts +0 -0
  757. /package/{lib/model → model}/allocationBodyTotal.d.ts +0 -0
  758. /package/{lib/model → model}/allocationFeeFixed.d.ts +0 -0
  759. /package/{lib/model → model}/allocationFeeShare.d.ts +0 -0
  760. /package/{lib/param.d.ts → param.d.ts} +0 -0
  761. /package/{lib/variables.d.ts → variables.d.ts} +0 -0
@@ -1,622 +0,0 @@
1
- /**
2
- * Vality Payments API
3
- * ## Description API is designed for the merchants who accept payments via user interface such as a website or a mobile app and it is the only interaction point with the system for goods and services payment transactions. ## Interaction details Whenever an API is accessed, its unique ID must be passed in the header X-Request-ID of the corresponding request: ``` X-Request-ID: 37d735d4-0f42-4f05-89fa-eaa478fb5aa9 ``` ### Content type and coding The system accepts and returns data in JSON format and UTF-8 coding: ``` Content-Type: application/json; charset=utf-8 ``` ### Date formats The system accepts and returns timestamp values in the format date-time, described in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339): ``` 2017-01-01T00:00:00Z 2017-01-01T00:00:01+00:00 ``` ### Maximum request processing time Whenever an API is accessed, the time cutoff parameters, that define maximum request processing time of the transaction completion, can be passed in the header `X-Request-Deadline` of the corresponding request: ``` X-Request-Deadline: 10s ``` The system stops processing the request upon the specified time. It is recommended to specify a value that is not more than one minute and not less than three seconds. `X-Request-Deadline` can be: * specified in the format `date-time` according to [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339); * specified in relative values: in milliseconds (`150000ms`), in seconds (`540s`) or in minutes (`3.5m`).
4
- *
5
- * The version of the OpenAPI document: 2.0.1
6
- *
7
- *
8
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
- * https://openapi-generator.tech
10
- * Do not edit the class manually.
11
- */
12
- /* tslint:disable:no-unused-variable member-ordering */
13
- import { Inject, Injectable, Optional } from '@angular/core';
14
- import { HttpHeaders, HttpParams, HttpContext } from '@angular/common/http';
15
- import { CustomHttpParameterCodec } from '../encoder';
16
- // @ts-ignore
17
- import { BASE_PATH } from '../variables';
18
- import { Configuration } from '../configuration';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@angular/common/http";
21
- import * as i2 from "../configuration";
22
- export class PaymentInstitutionsService {
23
- constructor(httpClient, basePath, configuration) {
24
- this.httpClient = httpClient;
25
- this.basePath = '/v2';
26
- this.defaultHeaders = new HttpHeaders();
27
- this.configuration = new Configuration();
28
- if (configuration) {
29
- this.configuration = configuration;
30
- }
31
- if (typeof this.configuration.basePath !== 'string') {
32
- if (Array.isArray(basePath) && basePath.length > 0) {
33
- basePath = basePath[0];
34
- }
35
- if (typeof basePath !== 'string') {
36
- basePath = this.basePath;
37
- }
38
- this.configuration.basePath = basePath;
39
- }
40
- this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
41
- }
42
- // @ts-ignore
43
- addToHttpParams(httpParams, value, key) {
44
- if (typeof value === "object" && value instanceof Date === false) {
45
- httpParams = this.addToHttpParamsRecursive(httpParams, value);
46
- }
47
- else {
48
- httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
49
- }
50
- return httpParams;
51
- }
52
- addToHttpParamsRecursive(httpParams, value, key) {
53
- if (value == null) {
54
- return httpParams;
55
- }
56
- if (typeof value === "object") {
57
- if (Array.isArray(value)) {
58
- value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
59
- }
60
- else if (value instanceof Date) {
61
- if (key != null) {
62
- httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
63
- }
64
- else {
65
- throw Error("key may not be null if value is Date");
66
- }
67
- }
68
- else {
69
- Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
70
- }
71
- }
72
- else if (key != null) {
73
- httpParams = httpParams.append(key, value);
74
- }
75
- else {
76
- throw Error("key may not be null if value is not object or array");
77
- }
78
- return httpParams;
79
- }
80
- getPaymentInstitutionByRef(requestParameters, observe = 'body', reportProgress = false, options) {
81
- const xRequestID = requestParameters.xRequestID;
82
- if (xRequestID === null || xRequestID === undefined) {
83
- throw new Error('Required parameter xRequestID was null or undefined when calling getPaymentInstitutionByRef.');
84
- }
85
- const paymentInstitutionID = requestParameters.paymentInstitutionID;
86
- if (paymentInstitutionID === null || paymentInstitutionID === undefined) {
87
- throw new Error('Required parameter paymentInstitutionID was null or undefined when calling getPaymentInstitutionByRef.');
88
- }
89
- const xRequestDeadline = requestParameters.xRequestDeadline;
90
- let localVarHeaders = this.defaultHeaders;
91
- if (xRequestID !== undefined && xRequestID !== null) {
92
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
93
- }
94
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
95
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
96
- }
97
- let localVarCredential;
98
- // authentication (bearer) required
99
- localVarCredential = this.configuration.lookupCredential('bearer');
100
- if (localVarCredential) {
101
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
102
- }
103
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
104
- if (localVarHttpHeaderAcceptSelected === undefined) {
105
- // to determine the Accept header
106
- const httpHeaderAccepts = [
107
- 'application/json; charset=utf-8'
108
- ];
109
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
110
- }
111
- if (localVarHttpHeaderAcceptSelected !== undefined) {
112
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
113
- }
114
- let localVarHttpContext = options && options.context;
115
- if (localVarHttpContext === undefined) {
116
- localVarHttpContext = new HttpContext();
117
- }
118
- let responseType_ = 'json';
119
- if (localVarHttpHeaderAcceptSelected) {
120
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
121
- responseType_ = 'text';
122
- }
123
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
124
- responseType_ = 'json';
125
- }
126
- else {
127
- responseType_ = 'blob';
128
- }
129
- }
130
- let localVarPath = `/processing/payment-institutions/${this.configuration.encodeParam({ name: "paymentInstitutionID", value: paymentInstitutionID, in: "path", style: "simple", explode: false, dataType: "number", dataFormat: "int32" })}`;
131
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
132
- context: localVarHttpContext,
133
- responseType: responseType_,
134
- withCredentials: this.configuration.withCredentials,
135
- headers: localVarHeaders,
136
- observe: observe,
137
- reportProgress: reportProgress
138
- });
139
- }
140
- getPaymentInstitutionPaymentTerms(requestParameters, observe = 'body', reportProgress = false, options) {
141
- const xRequestID = requestParameters.xRequestID;
142
- if (xRequestID === null || xRequestID === undefined) {
143
- throw new Error('Required parameter xRequestID was null or undefined when calling getPaymentInstitutionPaymentTerms.');
144
- }
145
- const paymentInstitutionID = requestParameters.paymentInstitutionID;
146
- if (paymentInstitutionID === null || paymentInstitutionID === undefined) {
147
- throw new Error('Required parameter paymentInstitutionID was null or undefined when calling getPaymentInstitutionPaymentTerms.');
148
- }
149
- const xRequestDeadline = requestParameters.xRequestDeadline;
150
- let localVarHeaders = this.defaultHeaders;
151
- if (xRequestID !== undefined && xRequestID !== null) {
152
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
153
- }
154
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
155
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
156
- }
157
- let localVarCredential;
158
- // authentication (bearer) required
159
- localVarCredential = this.configuration.lookupCredential('bearer');
160
- if (localVarCredential) {
161
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
162
- }
163
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
164
- if (localVarHttpHeaderAcceptSelected === undefined) {
165
- // to determine the Accept header
166
- const httpHeaderAccepts = [
167
- 'application/json; charset=utf-8'
168
- ];
169
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
170
- }
171
- if (localVarHttpHeaderAcceptSelected !== undefined) {
172
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
173
- }
174
- let localVarHttpContext = options && options.context;
175
- if (localVarHttpContext === undefined) {
176
- localVarHttpContext = new HttpContext();
177
- }
178
- let responseType_ = 'json';
179
- if (localVarHttpHeaderAcceptSelected) {
180
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
181
- responseType_ = 'text';
182
- }
183
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
184
- responseType_ = 'json';
185
- }
186
- else {
187
- responseType_ = 'blob';
188
- }
189
- }
190
- let localVarPath = `/processing/payment-institutions/${this.configuration.encodeParam({ name: "paymentInstitutionID", value: paymentInstitutionID, in: "path", style: "simple", explode: false, dataType: "number", dataFormat: "int32" })}/terms/payments`;
191
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
192
- context: localVarHttpContext,
193
- responseType: responseType_,
194
- withCredentials: this.configuration.withCredentials,
195
- headers: localVarHeaders,
196
- observe: observe,
197
- reportProgress: reportProgress
198
- });
199
- }
200
- getPaymentInstitutionPayoutMethods(requestParameters, observe = 'body', reportProgress = false, options) {
201
- const xRequestID = requestParameters.xRequestID;
202
- if (xRequestID === null || xRequestID === undefined) {
203
- throw new Error('Required parameter xRequestID was null or undefined when calling getPaymentInstitutionPayoutMethods.');
204
- }
205
- const paymentInstitutionID = requestParameters.paymentInstitutionID;
206
- if (paymentInstitutionID === null || paymentInstitutionID === undefined) {
207
- throw new Error('Required parameter paymentInstitutionID was null or undefined when calling getPaymentInstitutionPayoutMethods.');
208
- }
209
- const xRequestDeadline = requestParameters.xRequestDeadline;
210
- const currency = requestParameters.currency;
211
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
212
- if (currency !== undefined && currency !== null) {
213
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, currency, 'currency');
214
- }
215
- let localVarHeaders = this.defaultHeaders;
216
- if (xRequestID !== undefined && xRequestID !== null) {
217
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
218
- }
219
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
220
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
221
- }
222
- let localVarCredential;
223
- // authentication (bearer) required
224
- localVarCredential = this.configuration.lookupCredential('bearer');
225
- if (localVarCredential) {
226
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
227
- }
228
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
229
- if (localVarHttpHeaderAcceptSelected === undefined) {
230
- // to determine the Accept header
231
- const httpHeaderAccepts = [
232
- 'application/json; charset=utf-8'
233
- ];
234
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
235
- }
236
- if (localVarHttpHeaderAcceptSelected !== undefined) {
237
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
238
- }
239
- let localVarHttpContext = options && options.context;
240
- if (localVarHttpContext === undefined) {
241
- localVarHttpContext = new HttpContext();
242
- }
243
- let responseType_ = 'json';
244
- if (localVarHttpHeaderAcceptSelected) {
245
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
246
- responseType_ = 'text';
247
- }
248
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
249
- responseType_ = 'json';
250
- }
251
- else {
252
- responseType_ = 'blob';
253
- }
254
- }
255
- let localVarPath = `/processing/payment-institutions/${this.configuration.encodeParam({ name: "paymentInstitutionID", value: paymentInstitutionID, in: "path", style: "simple", explode: false, dataType: "number", dataFormat: "int32" })}/terms/payouts/methods`;
256
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
257
- context: localVarHttpContext,
258
- params: localVarQueryParameters,
259
- responseType: responseType_,
260
- withCredentials: this.configuration.withCredentials,
261
- headers: localVarHeaders,
262
- observe: observe,
263
- reportProgress: reportProgress
264
- });
265
- }
266
- getPaymentInstitutionPayoutMethodsForParty(requestParameters, observe = 'body', reportProgress = false, options) {
267
- const xRequestID = requestParameters.xRequestID;
268
- if (xRequestID === null || xRequestID === undefined) {
269
- throw new Error('Required parameter xRequestID was null or undefined when calling getPaymentInstitutionPayoutMethodsForParty.');
270
- }
271
- const partyID = requestParameters.partyID;
272
- if (partyID === null || partyID === undefined) {
273
- throw new Error('Required parameter partyID was null or undefined when calling getPaymentInstitutionPayoutMethodsForParty.');
274
- }
275
- const paymentInstitutionID = requestParameters.paymentInstitutionID;
276
- if (paymentInstitutionID === null || paymentInstitutionID === undefined) {
277
- throw new Error('Required parameter paymentInstitutionID was null or undefined when calling getPaymentInstitutionPayoutMethodsForParty.');
278
- }
279
- const xRequestDeadline = requestParameters.xRequestDeadline;
280
- const currency = requestParameters.currency;
281
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
282
- if (currency !== undefined && currency !== null) {
283
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, currency, 'currency');
284
- }
285
- let localVarHeaders = this.defaultHeaders;
286
- if (xRequestID !== undefined && xRequestID !== null) {
287
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
288
- }
289
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
290
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
291
- }
292
- let localVarCredential;
293
- // authentication (bearer) required
294
- localVarCredential = this.configuration.lookupCredential('bearer');
295
- if (localVarCredential) {
296
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
297
- }
298
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
299
- if (localVarHttpHeaderAcceptSelected === undefined) {
300
- // to determine the Accept header
301
- const httpHeaderAccepts = [
302
- 'application/json; charset=utf-8'
303
- ];
304
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
305
- }
306
- if (localVarHttpHeaderAcceptSelected !== undefined) {
307
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
308
- }
309
- let localVarHttpContext = options && options.context;
310
- if (localVarHttpContext === undefined) {
311
- localVarHttpContext = new HttpContext();
312
- }
313
- let responseType_ = 'json';
314
- if (localVarHttpHeaderAcceptSelected) {
315
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
316
- responseType_ = 'text';
317
- }
318
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
319
- responseType_ = 'json';
320
- }
321
- else {
322
- responseType_ = 'blob';
323
- }
324
- }
325
- let localVarPath = `/processing/parties/${this.configuration.encodeParam({ name: "partyID", value: partyID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/payment-institutions/${this.configuration.encodeParam({ name: "paymentInstitutionID", value: paymentInstitutionID, in: "path", style: "simple", explode: false, dataType: "number", dataFormat: "int32" })}/terms/payouts/methods`;
326
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
327
- context: localVarHttpContext,
328
- params: localVarQueryParameters,
329
- responseType: responseType_,
330
- withCredentials: this.configuration.withCredentials,
331
- headers: localVarHeaders,
332
- observe: observe,
333
- reportProgress: reportProgress
334
- });
335
- }
336
- getPaymentInstitutionPayoutSchedules(requestParameters, observe = 'body', reportProgress = false, options) {
337
- const xRequestID = requestParameters.xRequestID;
338
- if (xRequestID === null || xRequestID === undefined) {
339
- throw new Error('Required parameter xRequestID was null or undefined when calling getPaymentInstitutionPayoutSchedules.');
340
- }
341
- const paymentInstitutionID = requestParameters.paymentInstitutionID;
342
- if (paymentInstitutionID === null || paymentInstitutionID === undefined) {
343
- throw new Error('Required parameter paymentInstitutionID was null or undefined when calling getPaymentInstitutionPayoutSchedules.');
344
- }
345
- const xRequestDeadline = requestParameters.xRequestDeadline;
346
- const currency = requestParameters.currency;
347
- const payoutMethod = requestParameters.payoutMethod;
348
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
349
- if (currency !== undefined && currency !== null) {
350
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, currency, 'currency');
351
- }
352
- if (payoutMethod !== undefined && payoutMethod !== null) {
353
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, payoutMethod, 'payoutMethod');
354
- }
355
- let localVarHeaders = this.defaultHeaders;
356
- if (xRequestID !== undefined && xRequestID !== null) {
357
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
358
- }
359
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
360
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
361
- }
362
- let localVarCredential;
363
- // authentication (bearer) required
364
- localVarCredential = this.configuration.lookupCredential('bearer');
365
- if (localVarCredential) {
366
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
367
- }
368
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
369
- if (localVarHttpHeaderAcceptSelected === undefined) {
370
- // to determine the Accept header
371
- const httpHeaderAccepts = [
372
- 'application/json; charset=utf-8'
373
- ];
374
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
375
- }
376
- if (localVarHttpHeaderAcceptSelected !== undefined) {
377
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
378
- }
379
- let localVarHttpContext = options && options.context;
380
- if (localVarHttpContext === undefined) {
381
- localVarHttpContext = new HttpContext();
382
- }
383
- let responseType_ = 'json';
384
- if (localVarHttpHeaderAcceptSelected) {
385
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
386
- responseType_ = 'text';
387
- }
388
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
389
- responseType_ = 'json';
390
- }
391
- else {
392
- responseType_ = 'blob';
393
- }
394
- }
395
- let localVarPath = `/processing/payment-institutions/${this.configuration.encodeParam({ name: "paymentInstitutionID", value: paymentInstitutionID, in: "path", style: "simple", explode: false, dataType: "number", dataFormat: "int32" })}/terms/payouts/schedules`;
396
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
397
- context: localVarHttpContext,
398
- params: localVarQueryParameters,
399
- responseType: responseType_,
400
- withCredentials: this.configuration.withCredentials,
401
- headers: localVarHeaders,
402
- observe: observe,
403
- reportProgress: reportProgress
404
- });
405
- }
406
- getPaymentInstitutionPayoutSchedulesForParty(requestParameters, observe = 'body', reportProgress = false, options) {
407
- const xRequestID = requestParameters.xRequestID;
408
- if (xRequestID === null || xRequestID === undefined) {
409
- throw new Error('Required parameter xRequestID was null or undefined when calling getPaymentInstitutionPayoutSchedulesForParty.');
410
- }
411
- const partyID = requestParameters.partyID;
412
- if (partyID === null || partyID === undefined) {
413
- throw new Error('Required parameter partyID was null or undefined when calling getPaymentInstitutionPayoutSchedulesForParty.');
414
- }
415
- const paymentInstitutionID = requestParameters.paymentInstitutionID;
416
- if (paymentInstitutionID === null || paymentInstitutionID === undefined) {
417
- throw new Error('Required parameter paymentInstitutionID was null or undefined when calling getPaymentInstitutionPayoutSchedulesForParty.');
418
- }
419
- const xRequestDeadline = requestParameters.xRequestDeadline;
420
- const currency = requestParameters.currency;
421
- const payoutMethod = requestParameters.payoutMethod;
422
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
423
- if (currency !== undefined && currency !== null) {
424
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, currency, 'currency');
425
- }
426
- if (payoutMethod !== undefined && payoutMethod !== null) {
427
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, payoutMethod, 'payoutMethod');
428
- }
429
- let localVarHeaders = this.defaultHeaders;
430
- if (xRequestID !== undefined && xRequestID !== null) {
431
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
432
- }
433
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
434
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
435
- }
436
- let localVarCredential;
437
- // authentication (bearer) required
438
- localVarCredential = this.configuration.lookupCredential('bearer');
439
- if (localVarCredential) {
440
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
441
- }
442
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
443
- if (localVarHttpHeaderAcceptSelected === undefined) {
444
- // to determine the Accept header
445
- const httpHeaderAccepts = [
446
- 'application/json; charset=utf-8'
447
- ];
448
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
449
- }
450
- if (localVarHttpHeaderAcceptSelected !== undefined) {
451
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
452
- }
453
- let localVarHttpContext = options && options.context;
454
- if (localVarHttpContext === undefined) {
455
- localVarHttpContext = new HttpContext();
456
- }
457
- let responseType_ = 'json';
458
- if (localVarHttpHeaderAcceptSelected) {
459
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
460
- responseType_ = 'text';
461
- }
462
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
463
- responseType_ = 'json';
464
- }
465
- else {
466
- responseType_ = 'blob';
467
- }
468
- }
469
- let localVarPath = `/processing/parties/${this.configuration.encodeParam({ name: "partyID", value: partyID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/payment-institutions/${this.configuration.encodeParam({ name: "paymentInstitutionID", value: paymentInstitutionID, in: "path", style: "simple", explode: false, dataType: "number", dataFormat: "int32" })}/terms/payouts/schedules`;
470
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
471
- context: localVarHttpContext,
472
- params: localVarQueryParameters,
473
- responseType: responseType_,
474
- withCredentials: this.configuration.withCredentials,
475
- headers: localVarHeaders,
476
- observe: observe,
477
- reportProgress: reportProgress
478
- });
479
- }
480
- getPaymentInstitutions(requestParameters, observe = 'body', reportProgress = false, options) {
481
- const xRequestID = requestParameters.xRequestID;
482
- if (xRequestID === null || xRequestID === undefined) {
483
- throw new Error('Required parameter xRequestID was null or undefined when calling getPaymentInstitutions.');
484
- }
485
- const xRequestDeadline = requestParameters.xRequestDeadline;
486
- const residence = requestParameters.residence;
487
- const realm = requestParameters.realm;
488
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
489
- if (residence !== undefined && residence !== null) {
490
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, residence, 'residence');
491
- }
492
- if (realm !== undefined && realm !== null) {
493
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, realm, 'realm');
494
- }
495
- let localVarHeaders = this.defaultHeaders;
496
- if (xRequestID !== undefined && xRequestID !== null) {
497
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
498
- }
499
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
500
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
501
- }
502
- let localVarCredential;
503
- // authentication (bearer) required
504
- localVarCredential = this.configuration.lookupCredential('bearer');
505
- if (localVarCredential) {
506
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
507
- }
508
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
509
- if (localVarHttpHeaderAcceptSelected === undefined) {
510
- // to determine the Accept header
511
- const httpHeaderAccepts = [
512
- 'application/json; charset=utf-8'
513
- ];
514
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
515
- }
516
- if (localVarHttpHeaderAcceptSelected !== undefined) {
517
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
518
- }
519
- let localVarHttpContext = options && options.context;
520
- if (localVarHttpContext === undefined) {
521
- localVarHttpContext = new HttpContext();
522
- }
523
- let responseType_ = 'json';
524
- if (localVarHttpHeaderAcceptSelected) {
525
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
526
- responseType_ = 'text';
527
- }
528
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
529
- responseType_ = 'json';
530
- }
531
- else {
532
- responseType_ = 'blob';
533
- }
534
- }
535
- let localVarPath = `/processing/payment-institutions`;
536
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
537
- context: localVarHttpContext,
538
- params: localVarQueryParameters,
539
- responseType: responseType_,
540
- withCredentials: this.configuration.withCredentials,
541
- headers: localVarHeaders,
542
- observe: observe,
543
- reportProgress: reportProgress
544
- });
545
- }
546
- getServiceProviderByID(requestParameters, observe = 'body', reportProgress = false, options) {
547
- const xRequestID = requestParameters.xRequestID;
548
- if (xRequestID === null || xRequestID === undefined) {
549
- throw new Error('Required parameter xRequestID was null or undefined when calling getServiceProviderByID.');
550
- }
551
- const serviceProviderID = requestParameters.serviceProviderID;
552
- if (serviceProviderID === null || serviceProviderID === undefined) {
553
- throw new Error('Required parameter serviceProviderID was null or undefined when calling getServiceProviderByID.');
554
- }
555
- const xRequestDeadline = requestParameters.xRequestDeadline;
556
- let localVarHeaders = this.defaultHeaders;
557
- if (xRequestID !== undefined && xRequestID !== null) {
558
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
559
- }
560
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
561
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
562
- }
563
- let localVarCredential;
564
- // authentication (bearer) required
565
- localVarCredential = this.configuration.lookupCredential('bearer');
566
- if (localVarCredential) {
567
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
568
- }
569
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
570
- if (localVarHttpHeaderAcceptSelected === undefined) {
571
- // to determine the Accept header
572
- const httpHeaderAccepts = [
573
- 'application/json; charset=utf-8'
574
- ];
575
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
576
- }
577
- if (localVarHttpHeaderAcceptSelected !== undefined) {
578
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
579
- }
580
- let localVarHttpContext = options && options.context;
581
- if (localVarHttpContext === undefined) {
582
- localVarHttpContext = new HttpContext();
583
- }
584
- let responseType_ = 'json';
585
- if (localVarHttpHeaderAcceptSelected) {
586
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
587
- responseType_ = 'text';
588
- }
589
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
590
- responseType_ = 'json';
591
- }
592
- else {
593
- responseType_ = 'blob';
594
- }
595
- }
596
- let localVarPath = `/processing/service-providers/${this.configuration.encodeParam({ name: "serviceProviderID", value: serviceProviderID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
597
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
598
- context: localVarHttpContext,
599
- responseType: responseType_,
600
- withCredentials: this.configuration.withCredentials,
601
- headers: localVarHeaders,
602
- observe: observe,
603
- reportProgress: reportProgress
604
- });
605
- }
606
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: PaymentInstitutionsService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
607
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: PaymentInstitutionsService, providedIn: 'root' }); }
608
- }
609
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: PaymentInstitutionsService, decorators: [{
610
- type: Injectable,
611
- args: [{
612
- providedIn: 'root'
613
- }]
614
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
615
- type: Optional
616
- }, {
617
- type: Inject,
618
- args: [BASE_PATH]
619
- }] }, { type: i2.Configuration, decorators: [{
620
- type: Optional
621
- }] }] });
622
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudEluc3RpdHV0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsaXR5L3N3YWctcGF5bWVudHMvc3JjL2xpYi9hcGkvcGF5bWVudEluc3RpdHV0aW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQWMvRSxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBMEIsY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBMEMsa0JBQWtCLENBQUM7Ozs7QUFpR3JGLE1BQU0sT0FBTywwQkFBMEI7SUFPbkMsWUFBc0IsVUFBc0IsRUFBZ0MsUUFBeUIsRUFBYyxhQUE0QjtRQUF6SCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBTGxDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDcEIsbUJBQWMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ25DLGtCQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUl2QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENB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QUFLLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BPLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQWtCLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUNsRztZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUNKLENBQUM7SUFDTixDQUFDOzhHQTl0QlEsMEJBQTBCLDRDQU84QixTQUFTO2tIQVBqRSwwQkFBMEIsY0FGekIsTUFBTTs7MkZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWtELFFBQVE7OzBCQUFHLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhbGl0eSBQYXltZW50cyBBUElcbiAqICMjIERlc2NyaXB0aW9uIEFQSSBpcyBkZXNpZ25lZCBmb3IgdGhlIG1lcmNoYW50cyB3aG8gYWNjZXB0IHBheW1lbnRzIHZpYSB1c2VyIGludGVyZmFjZSBzdWNoIGFzIGEgd2Vic2l0ZSBvciBhIG1vYmlsZSBhcHAgYW5kIGl0IGlzIHRoZSBvbmx5IGludGVyYWN0aW9uIHBvaW50IHdpdGggdGhlIHN5c3RlbSBmb3IgZ29vZHMgYW5kIHNlcnZpY2VzIHBheW1lbnQgdHJhbnNhY3Rpb25zLiAjIyBJbnRlcmFjdGlvbiBkZXRhaWxzIFdoZW5ldmVyIGFuIEFQSSBpcyBhY2Nlc3NlZCwgaXRzIHVuaXF1ZSBJRCBtdXN0IGJlIHBhc3NlZCBpbiB0aGUgaGVhZGVyIFgtUmVxdWVzdC1JRCBvZiB0aGUgY29ycmVzcG9uZGluZyByZXF1ZXN0OiBgYGAgIFgtUmVxdWVzdC1JRDogMzdkNzM1ZDQtMGY0Mi00ZjA1LTg5ZmEtZWFhNDc4ZmI1YWE5IGBgYCAjIyMgQ29udGVudCB0eXBlIGFuZCBjb2RpbmcgVGhlIHN5c3RlbSBhY2NlcHRzIGFuZCByZXR1cm5zIGRhdGEgaW4gSlNPTiBmb3JtYXQgYW5kIFVURi04IGNvZGluZzogYGBgICAgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IGBgYCAjIyMgRGF0ZSBmb3JtYXRzIFRoZSBzeXN0ZW0gYWNjZXB0cyBhbmQgcmV0dXJucyB0aW1lc3RhbXAgdmFsdWVzIGluIHRoZSBmb3JtYXQgZGF0ZS10aW1lLCBkZXNjcmliZWQgaW4gW1JGQyAzMzM5XShodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMzMzkpOiBgYGAgICAyMDE3LTAxLTAxVDAwOjAwOjAwWiAgIDIwMTctMDEtMDFUMDA6MDA6MDErMDA6MDAgYGBgICMjIyBNYXhpbXVtIHJlcXVlc3QgcHJvY2Vzc2luZyB0aW1lIFdoZW5ldmVyIGFuIEFQSSBpcyBhY2Nlc3NlZCwgdGhlIHRpbWUgY3V0b2ZmIHBhcmFtZXRlcnMsIHRoYXQgZGVmaW5lIG1heGltdW0gcmVxdWVzdCBwcm9jZXNzaW5nIHRpbWUgb2YgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24sIGNhbiBiZSBwYXNzZWQgaW4gdGhlIGhlYWRlciBgWC1SZXF1ZXN0LURlYWRsaW5lYCBvZiB0aGUgY29ycmVzcG9uZGluZyByZXF1ZXN0OiBgYGAgIFgtUmVxdWVzdC1EZWFkbGluZTogMTBzIGBgYCBUaGUgc3lzdGVtIHN0b3BzIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QgdXBvbiB0aGUgc3BlY2lmaWVkIHRpbWUuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIG5vdCBtb3JlIHRoYW4gb25lIG1pbnV0ZSBhbmQgbm90IGxlc3MgdGhhbiB0aHJlZSBzZWNvbmRzLiBgWC1SZXF1ZXN0LURlYWRsaW5lYCBjYW4gYmU6ICAqIHNwZWNpZmllZCBpbiB0aGUgZm9ybWF0IGBkYXRlLXRpbWVgIGFjY29yZGluZyB0byBbUkZDIDMzMzldKGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzMzOSk7ICogc3BlY2lmaWVkIGluIHJlbGF0aXZlIHZhbHVlczogaW4gbWlsbGlzZWNvbmRzIChgMTUwMDAwbXNgKSwgaW4gc2Vjb25kcyAoYDU0MHNgKSBvciBpbiBtaW51dGVzIChgMy41bWApLiBcbiAqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMi4wLjFcbiAqIFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyxcbiAgICAgICAgIEh0dHBSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBDb250ZXh0IFxuICAgICAgICB9ICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRGVmYXVsdExvZ2ljRXJyb3IgfSBmcm9tICcuLi9tb2RlbC9kZWZhdWx0TG9naWNFcnJvcic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBHZW5lcmFsRXJyb3IgfSBmcm9tICcuLi9tb2RlbC9nZW5lcmFsRXJyb3InO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGF5bWVudEluc3RpdHV0aW9uIH0gZnJvbSAnLi4vbW9kZWwvcGF5bWVudEluc3RpdHV0aW9uJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFBheW1lbnRUZXJtcyB9IGZyb20gJy4uL21vZGVsL3BheW1lbnRUZXJtcyc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBTZXJ2aWNlUHJvdmlkZXIgfSBmcm9tICcuLi9tb2RlbC9zZXJ2aWNlUHJvdmlkZXInO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vdmFyaWFibGVzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFBheW1lbnRJbnN0aXR1dGlvbkJ5UmVmUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0IHRvIHRoZSBzeXN0ZW0gKi9cbiAgICB4UmVxdWVzdElEOiBzdHJpbmc7XG4gICAgLyoqIFBheW1lbnQgaW5zdGl0dXRpb24gcmVmZXJlbmNlICovXG4gICAgcGF5bWVudEluc3RpdHV0aW9uSUQ6IG51bWJlcjtcbiAgICAvKiogTWF4aW11bSByZXF1ZXN0IHByb2Nlc3NpbmcgdGltZSAqL1xuICAgIHhSZXF1ZXN0RGVhZGxpbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UGF5bWVudEluc3RpdHV0aW9uUGF5bWVudFRlcm1zUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0IHRvIHRoZSBzeXN0ZW0gKi9cbiAgICB4UmVxdWVzdElEOiBzdHJpbmc7XG4gICAgLyoqIFBheW1lbnQgaW5zdGl0dXRpb24gcmVmZXJlbmNlICovXG4gICAgcGF5bWVudEluc3RpdHV0aW9uSUQ6IG51bWJlcjtcbiAgICAvKiogTWF4aW11bSByZXF1ZXN0IHByb2Nlc3NpbmcgdGltZSAqL1xuICAgIHhSZXF1ZXN0RGVhZGxpbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0TWV0aG9kc1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVxdWVzdCB0byB0aGUgc3lzdGVtICovXG4gICAgeFJlcXVlc3RJRDogc3RyaW5nO1xuICAgIC8qKiBQYXltZW50IGluc3RpdHV0aW9uIHJlZmVyZW5jZSAqL1xuICAgIHBheW1lbnRJbnN0aXR1dGlvbklEOiBudW1iZXI7XG4gICAgLyoqIE1heGltdW0gcmVxdWVzdCBwcm9jZXNzaW5nIHRpbWUgKi9cbiAgICB4UmVxdWVzdERlYWRsaW5lPzogc3RyaW5nO1xuICAgIC8qKiBDdXJyZW5jeSBjaGFyYWN0ZXIgY29kZSBhY2NvcmRpbmcgdG8gW0lTTyA0MjE3XShodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUvc3RhbmRhcmRzL2N1cnJlbmN5X2NvZGVzLmh0bSkuICAqL1xuICAgIGN1cnJlbmN5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dE1ldGhvZHNGb3JQYXJ0eVJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVxdWVzdCB0byB0aGUgc3lzdGVtICovXG4gICAgeFJlcXVlc3RJRDogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFydGljaXBhbnRcXCYjMzk7cyB1bmlxdWUgaWRlbnRpZmllciB3aXRoaW4gdGhlIHN5c3RlbS4gKi9cbiAgICBwYXJ0eUlEOiBzdHJpbmc7XG4gICAgLyoqIFBheW1lbnQgaW5zdGl0dXRpb24gcmVmZXJlbmNlICovXG4gICAgcGF5bWVudEluc3RpdHV0aW9uSUQ6IG51bWJlcjtcbiAgICAvKiogTWF4aW11bSByZXF1ZXN0IHByb2Nlc3NpbmcgdGltZSAqL1xuICAgIHhSZXF1ZXN0RGVhZGxpbmU/OiBzdHJpbmc7XG4gICAgLyoqIEN1cnJlbmN5IGNoYXJhY3RlciBjb2RlIGFjY29yZGluZyB0byBbSVNPIDQyMTddKGh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS9zdGFuZGFyZHMvY3VycmVuY3lfY29kZXMuaHRtKS4gICovXG4gICAgY3VycmVuY3k/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0U2NoZWR1bGVzUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0IHRvIHRoZSBzeXN0ZW0gKi9cbiAgICB4UmVxdWVzdElEOiBzdHJpbmc7XG4gICAgLyoqIFBheW1lbnQgaW5zdGl0dXRpb24gcmVmZXJlbmNlICovXG4gICAgcGF5bWVudEluc3RpdHV0aW9uSUQ6IG51bWJlcjtcbiAgICAvKiogTWF4aW11bSByZXF1ZXN0IHByb2Nlc3NpbmcgdGltZSAqL1xuICAgIHhSZXF1ZXN0RGVhZGxpbmU/OiBzdHJpbmc7XG4gICAgLyoqIEN1cnJlbmN5IGNoYXJhY3RlciBjb2RlIGFjY29yZGluZyB0byBbSVNPIDQyMTddKGh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS9zdGFuZGFyZHMvY3VycmVuY3lfY29kZXMuaHRtKS4gICovXG4gICAgY3VycmVuY3k/OiBzdHJpbmc7XG4gICAgLyoqIFBheW91dCBtZXRob2QgKi9cbiAgICBwYXlvdXRNZXRob2Q/OiAnQmFua0FjY291bnQnIHwgJ0ludGVybmF0aW9uYWxCYW5rQWNjb3VudCcgfCAnV2FsbGV0Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRTY2hlZHVsZXNGb3JQYXJ0eVJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVxdWVzdCB0byB0aGUgc3lzdGVtICovXG4gICAgeFJlcXVlc3RJRDogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFydGljaXBhbnRcXCYjMzk7cyB1bmlxdWUgaWRlbnRpZmllciB3aXRoaW4gdGhlIHN5c3RlbS4gKi9cbiAgICBwYXJ0eUlEOiBzdHJpbmc7XG4gICAgLyoqIFBheW1lbnQgaW5zdGl0dXRpb24gcmVmZXJlbmNlICovXG4gICAgcGF5bWVudEluc3RpdHV0aW9uSUQ6IG51bWJlcjtcbiAgICAvKiogTWF4aW11bSByZXF1ZXN0IHByb2Nlc3NpbmcgdGltZSAqL1xuICAgIHhSZXF1ZXN0RGVhZGxpbmU/OiBzdHJpbmc7XG4gICAgLyoqIEN1cnJlbmN5IGNoYXJhY3RlciBjb2RlIGFjY29yZGluZyB0byBbSVNPIDQyMTddKGh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS9zdGFuZGFyZHMvY3VycmVuY3lfY29kZXMuaHRtKS4gICovXG4gICAgY3VycmVuY3k/OiBzdHJpbmc7XG4gICAgLyoqIFBheW91dCBtZXRob2QgKi9cbiAgICBwYXlvdXRNZXRob2Q/OiAnQmFua0FjY291bnQnIHwgJ0ludGVybmF0aW9uYWxCYW5rQWNjb3VudCcgfCAnV2FsbGV0Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRQYXltZW50SW5zdGl0dXRpb25zUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0IHRvIHRoZSBzeXN0ZW0gKi9cbiAgICB4UmVxdWVzdElEOiBzdHJpbmc7XG4gICAgLyoqIE1heGltdW0gcmVxdWVzdCBwcm9jZXNzaW5nIHRpbWUgKi9cbiAgICB4UmVxdWVzdERlYWRsaW5lPzogc3RyaW5nO1xuICAgIC8qKiBSZXNpZGVuY2UsIGFscGhhLTMgY29kZSBhY2NvcmRpbmcgdG8gc3RhbmRhcmQgW0lTTyAzMTY2LTFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT18zMTY2LTEpICAqL1xuICAgIHJlc2lkZW5jZT86IHN0cmluZztcbiAgICAvKiogUGF5bWVudCBpbnN0aXR1dGlvblxcJiMzOTtzIG1vZGUgKi9cbiAgICByZWFsbT86ICd0ZXN0JyB8ICdsaXZlJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTZXJ2aWNlUHJvdmlkZXJCeUlEUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0IHRvIHRoZSBzeXN0ZW0gKi9cbiAgICB4UmVxdWVzdElEOiBzdHJpbmc7XG4gICAgLyoqIFNlcnZpY2UgcHJvdmlkZXIgaWRlbnRpZmllciAqL1xuICAgIHNlcnZpY2VQcm92aWRlcklEOiBzdHJpbmc7XG4gICAgLyoqIE1heGltdW0gcmVxdWVzdCBwcm9jZXNzaW5nIHRpbWUgKi9cbiAgICB4UmVxdWVzdERlYWRsaW5lPzogc3RyaW5nO1xufVxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBheW1lbnRJbnN0aXR1dGlvbnNTZXJ2aWNlIHtcblxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICcvdjInO1xuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgICBwdWJsaWMgZW5jb2RlcjogSHR0cFBhcmFtZXRlckNvZGVjO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpQEluamVjdChCQVNFX1BBVEgpIGJhc2VQYXRoOiBzdHJpbmd8c3RyaW5nW10sIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShiYXNlUGF0aCkgJiYgYmFzZVBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gYmFzZVBhdGhbMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmVuY29kZXIgfHwgbmV3IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYygpO1xuICAgIH1cblxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlOiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU/OiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55W10pLmZvckVhY2goIGVsZW0gPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIGVsZW0sIGtleSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgKHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDEwKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgRGF0ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKCBrID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcywgdmFsdWVba10sIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIG5vdCBvYmplY3Qgb3IgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGRhdGEgb2YgdGhlIHBheW1lbnQgaW5zdGl0dXRpb24gYnkgaWRlbnRpZmllclxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQYXltZW50SW5zdGl0dXRpb25CeVJlZihyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uQnlSZWZSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxQYXltZW50SW5zdGl0dXRpb24+O1xuICAgIHB1YmxpYyBnZXRQYXltZW50SW5zdGl0dXRpb25CeVJlZihyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uQnlSZWZSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFBheW1lbnRJbnN0aXR1dGlvbj4+O1xuICAgIHB1YmxpYyBnZXRQYXltZW50SW5zdGl0dXRpb25CeVJlZihyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uQnlSZWZSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxQYXltZW50SW5zdGl0dXRpb24+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uQnlSZWYocmVxdWVzdFBhcmFtZXRlcnM6IEdldFBheW1lbnRJbnN0aXR1dGlvbkJ5UmVmUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRQYXltZW50SW5zdGl0dXRpb25CeVJlZi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXltZW50SW5zdGl0dXRpb25JRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnBheW1lbnRJbnN0aXR1dGlvbklEO1xuICAgICAgICBpZiAocGF5bWVudEluc3RpdHV0aW9uSUQgPT09IG51bGwgfHwgcGF5bWVudEluc3RpdHV0aW9uSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgcGF5bWVudEluc3RpdHV0aW9uSUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRQYXltZW50SW5zdGl0dXRpb25CeVJlZi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4UmVxdWVzdERlYWRsaW5lID0gcmVxdWVzdFBhcmFtZXRlcnMueFJlcXVlc3REZWFkbGluZTtcblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdElEICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtSUQnLCBTdHJpbmcoeFJlcXVlc3RJRCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4UmVxdWVzdERlYWRsaW5lICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3REZWFkbGluZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LURlYWRsaW5lJywgU3RyaW5nKHhSZXF1ZXN0RGVhZGxpbmUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKGJlYXJlcikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ2JlYXJlcicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCdcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvcHJvY2Vzc2luZy9wYXltZW50LWluc3RpdHV0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJwYXltZW50SW5zdGl0dXRpb25JRFwiLCB2YWx1ZTogcGF5bWVudEluc3RpdHV0aW9uSUQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJudW1iZXJcIiwgZGF0YUZvcm1hdDogXCJpbnQzMlwifSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFBheW1lbnRJbnN0aXR1dGlvbj4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXltZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB0aGUgcGF5bWVudCBpbnN0aXR1dGlvblxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQYXltZW50SW5zdGl0dXRpb25QYXltZW50VGVybXMocmVxdWVzdFBhcmFtZXRlcnM6IEdldFBheW1lbnRJbnN0aXR1dGlvblBheW1lbnRUZXJtc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPFBheW1lbnRUZXJtcz47XG4gICAgcHVibGljIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW1lbnRUZXJtcyhyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uUGF5bWVudFRlcm1zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYXltZW50VGVybXM+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5bWVudFRlcm1zKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXltZW50VGVybXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxQYXltZW50VGVybXM+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5bWVudFRlcm1zKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXltZW50VGVybXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeFJlcXVlc3RJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0SUQ7XG4gICAgICAgIGlmICh4UmVxdWVzdElEID09PSBudWxsIHx8IHhSZXF1ZXN0SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgeFJlcXVlc3RJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW1lbnRUZXJtcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXltZW50SW5zdGl0dXRpb25JRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnBheW1lbnRJbnN0aXR1dGlvbklEO1xuICAgICAgICBpZiAocGF5bWVudEluc3RpdHV0aW9uSUQgPT09IG51bGwgfHwgcGF5bWVudEluc3RpdHV0aW9uSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgcGF5bWVudEluc3RpdHV0aW9uSUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRQYXltZW50SW5zdGl0dXRpb25QYXltZW50VGVybXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFJlcXVlc3REZWFkbGluZSA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0RGVhZGxpbmU7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmICh4UmVxdWVzdElEICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3RJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LUlEJywgU3RyaW5nKHhSZXF1ZXN0SUQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeFJlcXVlc3REZWFkbGluZSAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0RGVhZGxpbmUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1EZWFkbGluZScsIFN0cmluZyh4UmVxdWVzdERlYWRsaW5lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChiZWFyZXIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdiZWFyZXInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3Byb2Nlc3NpbmcvcGF5bWVudC1pbnN0aXR1dGlvbnMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwicGF5bWVudEluc3RpdHV0aW9uSURcIiwgdmFsdWU6IHBheW1lbnRJbnN0aXR1dGlvbklELCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IFwiaW50MzJcIn0pfS90ZXJtcy9wYXltZW50c2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYXltZW50VGVybXM+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgcGF5b3V0IG1ldGhvZHMgZm9yIHRoZSBwYXltZW50IGluc3RpdHV0aW9uXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dE1ldGhvZHMocmVxdWVzdFBhcmFtZXRlcnM6IEdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dE1ldGhvZHNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0TWV0aG9kcyhyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0TWV0aG9kc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8c3RyaW5nPj4+O1xuICAgIHB1YmxpYyBnZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QXJyYXk8c3RyaW5nPj4+O1xuICAgIHB1YmxpYyBnZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBheW1lbnRJbnN0aXR1dGlvbklEID0gcmVxdWVzdFBhcmFtZXRlcnMucGF5bWVudEluc3RpdHV0aW9uSUQ7XG4gICAgICAgIGlmIChwYXltZW50SW5zdGl0dXRpb25JRCA9PT0gbnVsbCB8fCBwYXltZW50SW5zdGl0dXRpb25JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBwYXltZW50SW5zdGl0dXRpb25JRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dE1ldGhvZHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFJlcXVlc3REZWFkbGluZSA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0RGVhZGxpbmU7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gcmVxdWVzdFBhcmFtZXRlcnMuY3VycmVuY3k7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoY3VycmVuY3kgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmN1cnJlbmN5LCAnY3VycmVuY3knKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1JRCcsIFN0cmluZyh4UmVxdWVzdElEKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHhSZXF1ZXN0RGVhZGxpbmUgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdERlYWRsaW5lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtRGVhZGxpbmUnLCBTdHJpbmcoeFJlcXVlc3REZWFkbGluZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoYmVhcmVyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnYmVhcmVyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9wcm9jZXNzaW5nL3BheW1lbnQtaW5zdGl0dXRpb25zLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInBheW1lbnRJbnN0aXR1dGlvbklEXCIsIHZhbHVlOiBwYXltZW50SW5zdGl0dXRpb25JRCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcIm51bWJlclwiLCBkYXRhRm9ybWF0OiBcImludDMyXCJ9KX0vdGVybXMvcGF5b3V0cy9tZXRob2RzYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFycmF5PHN0cmluZz4+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXlvdXQgbWV0aG9kcyBmb3IgdGhlIHBheW1lbnQgaW5zdGl0dXRpb25cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0TWV0aG9kc0ZvclBhcnR5KHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzRm9yUGFydHlSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0TWV0aG9kc0ZvclBhcnR5KHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzRm9yUGFydHlSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PHN0cmluZz4+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0TWV0aG9kc0ZvclBhcnR5KHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzRm9yUGFydHlSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcnJheTxzdHJpbmc+Pj47XG4gICAgcHVibGljIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dE1ldGhvZHNGb3JQYXJ0eShyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0TWV0aG9kc0ZvclBhcnR5UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzRm9yUGFydHkuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFydHlJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnBhcnR5SUQ7XG4gICAgICAgIGlmIChwYXJ0eUlEID09PSBudWxsIHx8IHBhcnR5SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgcGFydHlJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dE1ldGhvZHNGb3JQYXJ0eS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXltZW50SW5zdGl0dXRpb25JRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnBheW1lbnRJbnN0aXR1dGlvbklEO1xuICAgICAgICBpZiAocGF5bWVudEluc3RpdHV0aW9uSUQgPT09IG51bGwgfHwgcGF5bWVudEluc3RpdHV0aW9uSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgcGF5bWVudEluc3RpdHV0aW9uSUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRNZXRob2RzRm9yUGFydHkuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFJlcXVlc3REZWFkbGluZSA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0RGVhZGxpbmU7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gcmVxdWVzdFBhcmFtZXRlcnMuY3VycmVuY3k7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoY3VycmVuY3kgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmN1cnJlbmN5LCAnY3VycmVuY3knKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1JRCcsIFN0cmluZyh4UmVxdWVzdElEKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHhSZXF1ZXN0RGVhZGxpbmUgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdERlYWRsaW5lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtRGVhZGxpbmUnLCBTdHJpbmcoeFJlcXVlc3REZWFkbGluZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoYmVhcmVyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnYmVhcmVyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9wcm9jZXNzaW5nL3BhcnRpZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwicGFydHlJRFwiLCB2YWx1ZTogcGFydHlJRCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vcGF5bWVudC1pbnN0aXR1dGlvbnMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwicGF5bWVudEluc3RpdHV0aW9uSURcIiwgdmFsdWU6IHBheW1lbnRJbnN0aXR1dGlvbklELCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IFwiaW50MzJcIn0pfS90ZXJtcy9wYXlvdXRzL21ldGhvZHNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QXJyYXk8c3RyaW5nPj4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGF2YWlsYWJsZSBwYXlvdXQgc2NoZWR1bGVzIGZvciB0aGUgcGF5bWVudCBvcmdhbml6YXRpb25cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0U2NoZWR1bGVzKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRTY2hlZHVsZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxBcnJheTxudW1iZXI+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0U2NoZWR1bGVzKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRTY2hlZHVsZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PG51bWJlcj4+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0U2NoZWR1bGVzKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRTY2hlZHVsZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcnJheTxudW1iZXI+Pj47XG4gICAgcHVibGljIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dFNjaGVkdWxlcyhyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0U2NoZWR1bGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRTY2hlZHVsZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF5bWVudEluc3RpdHV0aW9uSUQgPSByZXF1ZXN0UGFyYW1ldGVycy5wYXltZW50SW5zdGl0dXRpb25JRDtcbiAgICAgICAgaWYgKHBheW1lbnRJbnN0aXR1dGlvbklEID09PSBudWxsIHx8IHBheW1lbnRJbnN0aXR1dGlvbklEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHBheW1lbnRJbnN0aXR1dGlvbklEIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0U2NoZWR1bGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0RGVhZGxpbmUgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdERlYWRsaW5lO1xuICAgICAgICBjb25zdCBjdXJyZW5jeSA9IHJlcXVlc3RQYXJhbWV0ZXJzLmN1cnJlbmN5O1xuICAgICAgICBjb25zdCBwYXlvdXRNZXRob2QgPSByZXF1ZXN0UGFyYW1ldGVycy5wYXlvdXRNZXRob2Q7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoY3VycmVuY3kgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmN1cnJlbmN5LCAnY3VycmVuY3knKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF5b3V0TWV0aG9kICE9PSB1bmRlZmluZWQgJiYgcGF5b3V0TWV0aG9kICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+cGF5b3V0TWV0aG9kLCAncGF5b3V0TWV0aG9kJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdElEICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtSUQnLCBTdHJpbmcoeFJlcXVlc3RJRCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4UmVxdWVzdERlYWRsaW5lICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3REZWFkbGluZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LURlYWRsaW5lJywgU3RyaW5nKHhSZXF1ZXN0RGVhZGxpbmUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKGJlYXJlcikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ2JlYXJlcicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCdcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvcHJvY2Vzc2luZy9wYXltZW50LWluc3RpdHV0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJwYXltZW50SW5zdGl0dXRpb25JRFwiLCB2YWx1ZTogcGF5bWVudEluc3RpdHV0aW9uSUQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJudW1iZXJcIiwgZGF0YUZvcm1hdDogXCJpbnQzMlwifSl9L3Rlcm1zL3BheW91dHMvc2NoZWR1bGVzYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFycmF5PG51bWJlcj4+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhdmFpbGFibGUgcGF5b3V0IHNjaGVkdWxlcyBmb3IgdGhlIHBheW1lbnQgaW5zdGl0dXRpb25cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0U2NoZWR1bGVzRm9yUGFydHkocmVxdWVzdFBhcmFtZXRlcnM6IEdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dFNjaGVkdWxlc0ZvclBhcnR5UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8QXJyYXk8bnVtYmVyPj47XG4gICAgcHVibGljIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dFNjaGVkdWxlc0ZvclBhcnR5KHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRTY2hlZHVsZXNGb3JQYXJ0eVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8bnVtYmVyPj4+O1xuICAgIHB1YmxpYyBnZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRTY2hlZHVsZXNGb3JQYXJ0eShyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0U2NoZWR1bGVzRm9yUGFydHlSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcnJheTxudW1iZXI+Pj47XG4gICAgcHVibGljIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dFNjaGVkdWxlc0ZvclBhcnR5KHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25QYXlvdXRTY2hlZHVsZXNGb3JQYXJ0eVJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB4UmVxdWVzdElEID0gcmVxdWVzdFBhcmFtZXRlcnMueFJlcXVlc3RJRDtcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgPT09IG51bGwgfHwgeFJlcXVlc3RJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB4UmVxdWVzdElEIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0UGF5bWVudEluc3RpdHV0aW9uUGF5b3V0U2NoZWR1bGVzRm9yUGFydHkuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFydHlJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnBhcnR5SUQ7XG4gICAgICAgIGlmIChwYXJ0eUlEID09PSBudWxsIHx8IHBhcnR5SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgcGFydHlJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dFNjaGVkdWxlc0ZvclBhcnR5LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBheW1lbnRJbnN0aXR1dGlvbklEID0gcmVxdWVzdFBhcmFtZXRlcnMucGF5bWVudEluc3RpdHV0aW9uSUQ7XG4gICAgICAgIGlmIChwYXltZW50SW5zdGl0dXRpb25JRCA9PT0gbnVsbCB8fCBwYXltZW50SW5zdGl0dXRpb25JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBwYXltZW50SW5zdGl0dXRpb25JRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFBheW1lbnRJbnN0aXR1dGlvblBheW91dFNjaGVkdWxlc0ZvclBhcnR5LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0RGVhZGxpbmUgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdERlYWRsaW5lO1xuICAgICAgICBjb25zdCBjdXJyZW5jeSA9IHJlcXVlc3RQYXJhbWV0ZXJzLmN1cnJlbmN5O1xuICAgICAgICBjb25zdCBwYXlvdXRNZXRob2QgPSByZXF1ZXN0UGFyYW1ldGVycy5wYXlvdXRNZXRob2Q7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoY3VycmVuY3kgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmN1cnJlbmN5LCAnY3VycmVuY3knKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF5b3V0TWV0aG9kICE9PSB1bmRlZmluZWQgJiYgcGF5b3V0TWV0aG9kICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+cGF5b3V0TWV0aG9kLCAncGF5b3V0TWV0aG9kJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdElEICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtSUQnLCBTdHJpbmcoeFJlcXVlc3RJRCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4UmVxdWVzdERlYWRsaW5lICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3REZWFkbGluZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LURlYWRsaW5lJywgU3RyaW5nKHhSZXF1ZXN0RGVhZGxpbmUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKGJlYXJlcikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ2JlYXJlcicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCdcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvcHJvY2Vzc2luZy9wYXJ0aWVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInBhcnR5SURcIiwgdmFsdWU6IHBhcnR5SUQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9L3BheW1lbnQtaW5zdGl0dXRpb25zLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInBheW1lbnRJbnN0aXR1dGlvbklEXCIsIHZhbHVlOiBwYXltZW50SW5zdGl0dXRpb25JRCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcIm51bWJlclwiLCBkYXRhRm9ybWF0OiBcImludDMyXCJ9KX0vdGVybXMvcGF5b3V0cy9zY2hlZHVsZXNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QXJyYXk8bnVtYmVyPj4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgbGlzdCBvZiBwYXltZW50IGluc3RpdHV0aW9uc1xuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQYXltZW50SW5zdGl0dXRpb25zKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRQYXltZW50SW5zdGl0dXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8QXJyYXk8UGF5bWVudEluc3RpdHV0aW9uPj47XG4gICAgcHVibGljIGdldFBheW1lbnRJbnN0aXR1dGlvbnMocmVxdWVzdFBhcmFtZXRlcnM6IEdldFBheW1lbnRJbnN0aXR1dGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PFBheW1lbnRJbnN0aXR1dGlvbj4+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9ucyhyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFycmF5PFBheW1lbnRJbnN0aXR1dGlvbj4+PjtcbiAgICBwdWJsaWMgZ2V0UGF5bWVudEluc3RpdHV0aW9ucyhyZXF1ZXN0UGFyYW1ldGVyczogR2V0UGF5bWVudEluc3RpdHV0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB4UmVxdWVzdElEID0gcmVxdWVzdFBhcmFtZXRlcnMueFJlcXVlc3RJRDtcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgPT09IG51bGwgfHwgeFJlcXVlc3RJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB4UmVxdWVzdElEIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0UGF5bWVudEluc3RpdHV0aW9ucy4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4UmVxdWVzdERlYWRsaW5lID0gcmVxdWVzdFBhcmFtZXRlcnMueFJlcXVlc3REZWFkbGluZTtcbiAgICAgICAgY29uc3QgcmVzaWRlbmNlID0gcmVxdWVzdFBhcmFtZXRlcnMucmVzaWRlbmNlO1xuICAgICAgICBjb25zdCByZWFsbSA9IHJlcXVlc3RQYXJhbWV0ZXJzLnJlYWxtO1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKHJlc2lkZW5jZSAhPT0gdW5kZWZpbmVkICYmIHJlc2lkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnJlc2lkZW5jZSwgJ3Jlc2lkZW5jZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWFsbSAhPT0gdW5kZWZpbmVkICYmIHJlYWxtICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+cmVhbG0sICdyZWFsbScpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmICh4UmVxdWVzdElEICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3RJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LUlEJywgU3RyaW5nKHhSZXF1ZXN0SUQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeFJlcXVlc3REZWFkbGluZSAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0RGVhZGxpbmUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1EZWFkbGluZScsIFN0cmluZyh4UmVxdWVzdERlYWRsaW5lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChiZWFyZXIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdiZWFyZXInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3Byb2Nlc3NpbmcvcGF5bWVudC1pbnN0aXR1dGlvbnNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QXJyYXk8UGF5bWVudEluc3RpdHV0aW9uPj4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGRhdGEgb2YgcGF5bWVudCBzZXJ2aWNlIHByb3ZpZGVyIGJ5IGlkZW50aWZpZXJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2VydmljZVByb3ZpZGVyQnlJRChyZXF1ZXN0UGFyYW1ldGVyczogR2V0U2VydmljZVByb3ZpZGVyQnlJRFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPFNlcnZpY2VQcm92aWRlcj47XG4gICAgcHVibGljIGdldFNlcnZpY2VQcm92aWRlckJ5SUQocmVxdWVzdFBhcmFtZXRlcnM6IEdldFNlcnZpY2VQcm92aWRlckJ5SURSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFNlcnZpY2VQcm92aWRlcj4+O1xuICAgIHB1YmxpYyBnZXRTZXJ2aWNlUHJvdmlkZXJCeUlEKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRTZXJ2aWNlUHJvdmlkZXJCeUlEUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8U2VydmljZVByb3ZpZGVyPj47XG4gICAgcHVibGljIGdldFNlcnZpY2VQcm92aWRlckJ5SUQocmVxdWVzdFBhcmFtZXRlcnM6IEdldFNlcnZpY2VQcm92aWRlckJ5SURSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeFJlcXVlc3RJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0SUQ7XG4gICAgICAgIGlmICh4UmVxdWVzdElEID09PSBudWxsIHx8IHhSZXF1ZXN0SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgeFJlcXVlc3RJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFNlcnZpY2VQcm92aWRlckJ5SUQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VydmljZVByb3ZpZGVySUQgPSByZXF1ZXN0UGFyYW1ldGVycy5zZXJ2aWNlUHJvdmlkZXJJRDtcbiAgICAgICAgaWYgKHNlcnZpY2VQcm92aWRlcklEID09PSBudWxsIHx8IHNlcnZpY2VQcm92aWRlcklEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNlcnZpY2VQcm92aWRlcklEIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0U2VydmljZVByb3ZpZGVyQnlJRC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4UmVxdWVzdERlYWRsaW5lID0gcmVxdWVzdFBhcmFtZXRlcnMueFJlcXVlc3REZWFkbGluZTtcblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdElEICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtSUQnLCBTdHJpbmcoeFJlcXVlc3RJRCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4UmVxdWVzdERlYWRsaW5lICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3REZWFkbGluZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LURlYWRsaW5lJywgU3RyaW5nKHhSZXF1ZXN0RGVhZGxpbmUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKGJlYXJlcikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ2JlYXJlcicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCdcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvcHJvY2Vzc2luZy9zZXJ2aWNlLXByb3ZpZGVycy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzZXJ2aWNlUHJvdmlkZXJJRFwiLCB2YWx1ZTogc2VydmljZVByb3ZpZGVySUQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFNlcnZpY2VQcm92aWRlcj4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxufVxuIl19