@bitgo-beta/sdk-core 8.2.1-beta.75 → 8.2.1-beta.750

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 (467) hide show
  1. package/CHANGELOG.md +2626 -0
  2. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts +0 -1
  3. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -1
  4. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +0 -1
  5. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
  6. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +1 -1
  7. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +0 -1
  8. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +1 -1
  9. package/dist/src/account-lib/baseCoin/blsKeyPair.js +43 -29
  10. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +1 -0
  11. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -1
  12. package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +41 -29
  13. package/dist/src/account-lib/baseCoin/enum.d.ts +14 -2
  14. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  15. package/dist/src/account-lib/baseCoin/enum.js +28 -6
  16. package/dist/src/account-lib/baseCoin/errors.js +1 -1
  17. package/dist/src/account-lib/baseCoin/iface.d.ts +18 -15
  18. package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
  19. package/dist/src/account-lib/baseCoin/iface.js +10 -7
  20. package/dist/src/account-lib/baseCoin/index.js +6 -2
  21. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +1 -2
  22. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -1
  23. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +38 -26
  24. package/dist/src/account-lib/index.js +23 -9
  25. package/dist/src/account-lib/mpc/curves/ed25519.d.ts +4 -18
  26. package/dist/src/account-lib/mpc/curves/ed25519.d.ts.map +1 -1
  27. package/dist/src/account-lib/mpc/curves/ed25519.js +6 -60
  28. package/dist/src/account-lib/mpc/index.d.ts +4 -4
  29. package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
  30. package/dist/src/account-lib/mpc/index.js +11 -7
  31. package/dist/src/account-lib/mpc/shamir.d.ts +5 -37
  32. package/dist/src/account-lib/mpc/shamir.d.ts.map +1 -1
  33. package/dist/src/account-lib/mpc/shamir.js +6 -130
  34. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +38 -9
  35. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
  36. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +497 -349
  37. package/dist/src/account-lib/mpc/tss/ecdsa/index.js +23 -9
  38. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +2 -2
  39. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
  40. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +3 -3
  41. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +73 -52
  42. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
  43. package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
  44. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +1 -2
  45. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -1
  46. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +66 -69
  47. package/dist/src/account-lib/mpc/tss/eddsa/index.js +23 -9
  48. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +1 -1
  49. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -1
  50. package/dist/src/account-lib/mpc/tss/eddsa/types.js +1 -1
  51. package/dist/src/account-lib/mpc/tss/index.js +23 -9
  52. package/dist/src/account-lib/mpc/util.d.ts +7 -1
  53. package/dist/src/account-lib/mpc/util.d.ts.map +1 -1
  54. package/dist/src/account-lib/mpc/util.js +19 -1
  55. package/dist/src/account-lib/staking/index.js +6 -2
  56. package/dist/src/account-lib/staking/utils.js +3 -3
  57. package/dist/src/account-lib/util/crypto.d.ts +8 -2
  58. package/dist/src/account-lib/util/crypto.d.ts.map +1 -1
  59. package/dist/src/account-lib/util/crypto.js +61 -31
  60. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +2 -1
  61. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -1
  62. package/dist/src/account-lib/util/ed25519KeyDeriver.js +5 -3
  63. package/dist/src/api/bip32path.js +2 -3
  64. package/dist/src/api/index.js +6 -2
  65. package/dist/src/api/types.d.ts +1 -0
  66. package/dist/src/api/types.d.ts.map +1 -1
  67. package/dist/src/api/types.js +1 -1
  68. package/dist/src/bitgo/address-book/address-book.d.ts +61 -0
  69. package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -0
  70. package/dist/src/bitgo/address-book/address-book.js +139 -0
  71. package/dist/src/bitgo/address-book/index.d.ts +3 -0
  72. package/dist/src/bitgo/address-book/index.d.ts.map +1 -0
  73. package/dist/src/bitgo/address-book/index.js +19 -0
  74. package/dist/src/bitgo/address-book/types.d.ts +170 -0
  75. package/dist/src/bitgo/address-book/types.d.ts.map +1 -0
  76. package/dist/src/bitgo/address-book/types.js +3 -0
  77. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +64 -8
  78. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  79. package/dist/src/bitgo/baseCoin/baseCoin.js +109 -15
  80. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +77 -19
  81. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  82. package/dist/src/bitgo/baseCoin/iBaseCoin.js +2 -2
  83. package/dist/src/bitgo/baseCoin/index.js +6 -2
  84. package/dist/src/bitgo/bip32util.d.ts +0 -1
  85. package/dist/src/bitgo/bip32util.d.ts.map +1 -1
  86. package/dist/src/bitgo/bip32util.js +25 -12
  87. package/dist/src/bitgo/bitcoin.d.ts +0 -1
  88. package/dist/src/bitgo/bitcoin.d.ts.map +1 -1
  89. package/dist/src/bitgo/bitcoin.js +26 -13
  90. package/dist/src/bitgo/bitgoBase.d.ts +4 -1
  91. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  92. package/dist/src/bitgo/bitgoBase.js +1 -1
  93. package/dist/src/bitgo/coinFactory.d.ts +1 -1
  94. package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
  95. package/dist/src/bitgo/coinFactory.js +1 -1
  96. package/dist/src/bitgo/config.d.ts +62 -20
  97. package/dist/src/bitgo/config.d.ts.map +1 -1
  98. package/dist/src/bitgo/config.js +26 -15
  99. package/dist/src/bitgo/ecdh.d.ts +0 -1
  100. package/dist/src/bitgo/ecdh.d.ts.map +1 -1
  101. package/dist/src/bitgo/ecdh.js +26 -13
  102. package/dist/src/bitgo/enterprise/enterprise.d.ts +16 -14
  103. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
  104. package/dist/src/bitgo/enterprise/enterprise.js +64 -31
  105. package/dist/src/bitgo/enterprise/enterprises.d.ts +6 -0
  106. package/dist/src/bitgo/enterprise/enterprises.d.ts.map +1 -1
  107. package/dist/src/bitgo/enterprise/enterprises.js +48 -9
  108. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +6 -7
  109. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
  110. package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
  111. package/dist/src/bitgo/enterprise/iEnterprises.d.ts +2 -0
  112. package/dist/src/bitgo/enterprise/iEnterprises.d.ts.map +1 -1
  113. package/dist/src/bitgo/enterprise/iEnterprises.js +1 -1
  114. package/dist/src/bitgo/enterprise/index.js +6 -2
  115. package/dist/src/bitgo/environments.d.ts +37 -5
  116. package/dist/src/bitgo/environments.d.ts.map +1 -1
  117. package/dist/src/bitgo/environments.js +63 -16
  118. package/dist/src/bitgo/errors.d.ts +3 -0
  119. package/dist/src/bitgo/errors.d.ts.map +1 -1
  120. package/dist/src/bitgo/errors.js +8 -2
  121. package/dist/src/bitgo/index.d.ts +2 -1
  122. package/dist/src/bitgo/index.d.ts.map +1 -1
  123. package/dist/src/bitgo/index.js +27 -11
  124. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts +3 -3
  125. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts.map +1 -1
  126. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.js +1 -1
  127. package/dist/src/bitgo/inscriptionBuilder/index.js +6 -2
  128. package/dist/src/bitgo/internal/index.js +6 -2
  129. package/dist/src/bitgo/internal/internal.js +5 -6
  130. package/dist/src/bitgo/internal/keycard.js +6 -7
  131. package/dist/src/bitgo/keychain/decryptKeychain.d.ts +13 -0
  132. package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -0
  133. package/dist/src/bitgo/keychain/decryptKeychain.js +35 -0
  134. package/dist/src/bitgo/keychain/iKeychains.d.ts +61 -4
  135. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  136. package/dist/src/bitgo/keychain/iKeychains.js +2 -2
  137. package/dist/src/bitgo/keychain/index.d.ts +1 -0
  138. package/dist/src/bitgo/keychain/index.d.ts.map +1 -1
  139. package/dist/src/bitgo/keychain/index.js +7 -2
  140. package/dist/src/bitgo/keychain/keychains.d.ts +13 -3
  141. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  142. package/dist/src/bitgo/keychain/keychains.js +128 -30
  143. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts +3 -3
  144. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts.map +1 -1
  145. package/dist/src/bitgo/keychain/ovcJsonCodec.js +23 -9
  146. package/dist/src/bitgo/legacyBitcoin.d.ts +0 -1
  147. package/dist/src/bitgo/legacyBitcoin.d.ts.map +1 -1
  148. package/dist/src/bitgo/legacyBitcoin.js +27 -13
  149. package/dist/src/bitgo/lightning/{iLightning.d.ts → custodial/iLightning.d.ts} +12 -12
  150. package/dist/src/bitgo/lightning/custodial/iLightning.d.ts.map +1 -0
  151. package/dist/src/bitgo/lightning/custodial/iLightning.js +120 -0
  152. package/dist/src/bitgo/lightning/custodial/index.d.ts.map +1 -0
  153. package/dist/src/bitgo/lightning/{index.js → custodial/index.js} +6 -2
  154. package/dist/src/bitgo/lightning/{lightning.d.ts → custodial/lightning.d.ts} +2 -2
  155. package/dist/src/bitgo/lightning/custodial/lightning.d.ts.map +1 -0
  156. package/dist/src/bitgo/lightning/custodial/lightning.js +111 -0
  157. package/dist/src/bitgo/lightning/{lightningUtils.d.ts → custodial/lightningUtils.d.ts} +1 -1
  158. package/dist/src/bitgo/lightning/custodial/lightningUtils.d.ts.map +1 -0
  159. package/dist/src/bitgo/lightning/custodial/lightningUtils.js +145 -0
  160. package/dist/src/bitgo/lightning/custodial/lnurlCodec.d.ts.map +1 -0
  161. package/dist/src/bitgo/lightning/custodial/lnurlCodec.js +27 -0
  162. package/dist/src/bitgo/market/iMarkets.d.ts +2 -2
  163. package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -1
  164. package/dist/src/bitgo/market/index.js +6 -2
  165. package/dist/src/bitgo/market/markets.js +23 -9
  166. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +2 -0
  167. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
  168. package/dist/src/bitgo/pendingApproval/iPendingApproval.js +4 -4
  169. package/dist/src/bitgo/pendingApproval/index.js +6 -2
  170. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +20 -8
  171. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
  172. package/dist/src/bitgo/pendingApproval/pendingApproval.js +202 -107
  173. package/dist/src/bitgo/pendingApproval/pendingApprovals.js +23 -9
  174. package/dist/src/bitgo/recovery/index.js +6 -2
  175. package/dist/src/bitgo/recovery/initiate.d.ts +8 -2
  176. package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
  177. package/dist/src/bitgo/recovery/initiate.js +7 -8
  178. package/dist/src/bitgo/staking/iStakingWallet.d.ts +104 -4
  179. package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
  180. package/dist/src/bitgo/staking/iStakingWallet.js +2 -2
  181. package/dist/src/bitgo/staking/index.js +6 -2
  182. package/dist/src/bitgo/staking/stakingWallet.d.ts +13 -2
  183. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  184. package/dist/src/bitgo/staking/stakingWallet.js +45 -4
  185. package/dist/src/bitgo/trading/iTradingAccount.d.ts +2 -32
  186. package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
  187. package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
  188. package/dist/src/bitgo/trading/index.d.ts +1 -15
  189. package/dist/src/bitgo/trading/index.d.ts.map +1 -1
  190. package/dist/src/bitgo/trading/index.js +7 -17
  191. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts +8 -0
  192. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts.map +1 -0
  193. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.js +31 -0
  194. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts +8 -0
  195. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts.map +1 -0
  196. package/dist/src/bitgo/trading/network/decrypt-rsa.js +23 -0
  197. package/dist/src/bitgo/trading/network/decrypt.d.ts +14 -0
  198. package/dist/src/bitgo/trading/network/decrypt.d.ts.map +1 -0
  199. package/dist/src/bitgo/trading/network/decrypt.js +23 -0
  200. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts +8 -0
  201. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts.map +1 -0
  202. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.js +25 -0
  203. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts +8 -0
  204. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts.map +1 -0
  205. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.js +65 -0
  206. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts +8 -0
  207. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts.map +1 -0
  208. package/dist/src/bitgo/trading/network/encrypt-rsa.js +23 -0
  209. package/dist/src/bitgo/trading/network/encrypt.d.ts +37 -0
  210. package/dist/src/bitgo/trading/network/encrypt.d.ts.map +1 -0
  211. package/dist/src/bitgo/trading/network/encrypt.js +58 -0
  212. package/dist/src/bitgo/trading/network/index.d.ts +5 -0
  213. package/dist/src/bitgo/trading/network/index.d.ts.map +1 -0
  214. package/dist/src/bitgo/trading/network/index.js +21 -0
  215. package/dist/src/bitgo/trading/network/network.d.ts +36 -0
  216. package/dist/src/bitgo/trading/network/network.d.ts.map +1 -0
  217. package/dist/src/bitgo/trading/network/network.js +101 -0
  218. package/dist/src/bitgo/trading/network/types.d.ts +277 -0
  219. package/dist/src/bitgo/trading/network/types.d.ts.map +1 -0
  220. package/dist/src/bitgo/trading/network/types.js +3 -0
  221. package/dist/src/bitgo/trading/network/utils.d.ts +20 -0
  222. package/dist/src/bitgo/trading/network/utils.d.ts.map +1 -0
  223. package/dist/src/bitgo/trading/network/utils.js +54 -0
  224. package/dist/src/bitgo/trading/tradingAccount.d.ts +11 -35
  225. package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
  226. package/dist/src/bitgo/trading/tradingAccount.js +9 -96
  227. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +27 -0
  228. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
  229. package/dist/src/bitgo/tss/bitgoPubKeys.js +61 -0
  230. package/dist/src/bitgo/tss/common.d.ts +37 -5
  231. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  232. package/dist/src/bitgo/tss/common.js +103 -17
  233. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +6 -4
  234. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  235. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +78 -66
  236. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts +15 -0
  237. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  238. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +162 -0
  239. package/dist/src/bitgo/tss/ecdsa/index.d.ts +1 -0
  240. package/dist/src/bitgo/tss/ecdsa/index.d.ts.map +1 -1
  241. package/dist/src/bitgo/tss/ecdsa/index.js +25 -10
  242. package/dist/src/bitgo/tss/ecdsa/types.d.ts +27 -27
  243. package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
  244. package/dist/src/bitgo/tss/ecdsa/types.js +3 -3
  245. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +11 -8
  246. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
  247. package/dist/src/bitgo/tss/eddsa/eddsa.js +38 -41
  248. package/dist/src/bitgo/tss/eddsa/index.js +23 -9
  249. package/dist/src/bitgo/tss/eddsa/types.d.ts +4 -4
  250. package/dist/src/bitgo/tss/eddsa/types.d.ts.map +1 -1
  251. package/dist/src/bitgo/tss/index.d.ts +3 -2
  252. package/dist/src/bitgo/tss/index.d.ts.map +1 -1
  253. package/dist/src/bitgo/tss/index.js +26 -10
  254. package/dist/src/bitgo/tss/types.d.ts +16 -1
  255. package/dist/src/bitgo/tss/types.d.ts.map +1 -1
  256. package/dist/src/bitgo/tss/types.js +2 -2
  257. package/dist/src/bitgo/types.d.ts +3 -3
  258. package/dist/src/bitgo/types.d.ts.map +1 -1
  259. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +11 -0
  260. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -1
  261. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +66 -10
  262. package/dist/src/bitgo/utils/blsUtils.js +5 -5
  263. package/dist/src/bitgo/utils/codecProps.d.ts +7 -0
  264. package/dist/src/bitgo/utils/codecProps.d.ts.map +1 -0
  265. package/dist/src/bitgo/utils/codecProps.js +54 -0
  266. package/dist/src/bitgo/utils/decode.d.ts.map +1 -1
  267. package/dist/src/bitgo/utils/decode.js +30 -16
  268. package/dist/src/bitgo/utils/index.d.ts +2 -0
  269. package/dist/src/bitgo/utils/index.d.ts.map +1 -1
  270. package/dist/src/bitgo/utils/index.js +25 -9
  271. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  272. package/dist/src/bitgo/utils/mpcUtils.js +17 -12
  273. package/dist/src/bitgo/utils/notEmpty.d.ts +2 -0
  274. package/dist/src/bitgo/utils/notEmpty.d.ts.map +1 -0
  275. package/dist/src/bitgo/utils/notEmpty.js +7 -0
  276. package/dist/src/bitgo/utils/opengpgUtils.d.ts +11 -4
  277. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
  278. package/dist/src/bitgo/utils/opengpgUtils.js +76 -63
  279. package/dist/src/bitgo/utils/postWithCodec.d.ts +18 -0
  280. package/dist/src/bitgo/utils/postWithCodec.d.ts.map +1 -0
  281. package/dist/src/bitgo/utils/postWithCodec.js +25 -0
  282. package/dist/src/bitgo/utils/promise-utils.d.ts +1 -1
  283. package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -1
  284. package/dist/src/bitgo/utils/promise-utils.js +2 -3
  285. package/dist/src/bitgo/utils/triple.d.ts +1 -1
  286. package/dist/src/bitgo/utils/triple.d.ts.map +1 -1
  287. package/dist/src/bitgo/utils/triple.js +2 -3
  288. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +54 -8
  289. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  290. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +170 -28
  291. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +239 -31
  292. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  293. package/dist/src/bitgo/utils/tss/baseTypes.js +35 -19
  294. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts +23 -0
  295. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts.map +1 -0
  296. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.js +157 -0
  297. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts +30 -0
  298. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts.map +1 -0
  299. package/dist/src/bitgo/utils/tss/ecdsa/base.js +55 -0
  300. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +48 -33
  301. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  302. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +272 -179
  303. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +199 -0
  304. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  305. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +930 -0
  306. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +8 -0
  307. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -0
  308. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +13 -0
  309. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +4 -0
  310. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
  311. package/dist/src/bitgo/utils/tss/ecdsa/index.js +10 -2
  312. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +15 -7
  313. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
  314. package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
  315. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +107 -0
  316. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -0
  317. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +55 -0
  318. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +5 -3
  319. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  320. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +75 -58
  321. package/dist/src/bitgo/utils/tss/eddsa/index.js +23 -9
  322. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +7 -7
  323. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
  324. package/dist/src/bitgo/utils/tss/index.js +23 -9
  325. package/dist/src/bitgo/utils/txRequest.d.ts +10 -0
  326. package/dist/src/bitgo/utils/txRequest.d.ts.map +1 -0
  327. package/dist/src/bitgo/utils/txRequest.js +47 -0
  328. package/dist/src/bitgo/utils/util.js +24 -10
  329. package/dist/src/bitgo/utils/wallet.d.ts +7 -0
  330. package/dist/src/bitgo/utils/wallet.d.ts.map +1 -0
  331. package/dist/src/bitgo/utils/wallet.js +48 -0
  332. package/dist/src/bitgo/wallet/BuildParams.d.ts +119 -0
  333. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -0
  334. package/dist/src/bitgo/wallet/BuildParams.js +140 -0
  335. package/dist/src/bitgo/wallet/iWallet.d.ts +192 -16
  336. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  337. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  338. package/dist/src/bitgo/wallet/iWallets.d.ts +62 -13
  339. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  340. package/dist/src/bitgo/wallet/iWallets.js +42 -2
  341. package/dist/src/bitgo/wallet/index.js +6 -2
  342. package/dist/src/bitgo/wallet/wallet.d.ts +167 -19
  343. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  344. package/dist/src/bitgo/wallet/wallet.js +825 -317
  345. package/dist/src/bitgo/wallet/wallets.d.ts +66 -8
  346. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  347. package/dist/src/bitgo/wallet/wallets.js +598 -189
  348. package/dist/src/bitgo/webhook/index.js +6 -2
  349. package/dist/src/bitgo/webhook/webhooks.js +23 -9
  350. package/dist/src/coins/fiateur.d.ts +0 -1
  351. package/dist/src/coins/fiateur.d.ts.map +1 -1
  352. package/dist/src/coins/fiatgbp.d.ts +0 -1
  353. package/dist/src/coins/fiatgbp.d.ts.map +1 -1
  354. package/dist/src/coins/fiatusd.d.ts +0 -1
  355. package/dist/src/coins/fiatusd.d.ts.map +1 -1
  356. package/dist/src/coins/index.js +6 -2
  357. package/dist/src/coins/ofc.d.ts +0 -1
  358. package/dist/src/coins/ofc.d.ts.map +1 -1
  359. package/dist/src/coins/ofc.js +2 -2
  360. package/dist/src/coins/ofcToken.js +2 -2
  361. package/dist/src/coins/susd.d.ts +0 -1
  362. package/dist/src/coins/susd.d.ts.map +1 -1
  363. package/dist/src/common.js +27 -13
  364. package/dist/src/index.d.ts +6 -1
  365. package/dist/src/index.d.ts.map +1 -1
  366. package/dist/src/index.js +28 -11
  367. package/dist/src/units.js +5 -6
  368. package/dist/test/node.utils.d.ts +2 -0
  369. package/dist/test/node.utils.d.ts.map +1 -0
  370. package/dist/test/node.utils.js +5 -0
  371. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +2 -0
  372. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
  373. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +233 -0
  374. package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.d.ts +3 -0
  375. package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.d.ts.map +1 -0
  376. package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.js +24 -0
  377. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts +2 -0
  378. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts.map +1 -0
  379. package/dist/test/unit/bitgo/trading/network/encrypt.js +71 -0
  380. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.d.ts +2 -0
  381. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -0
  382. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.js +45 -0
  383. package/dist/test/unit/bitgo/utils/notEmpty.d.ts +2 -0
  384. package/dist/test/unit/bitgo/utils/notEmpty.d.ts.map +1 -0
  385. package/dist/test/unit/bitgo/utils/notEmpty.js +15 -0
  386. package/dist/test/unit/bitgo/utils/postWithCodec.d.ts +2 -0
  387. package/dist/test/unit/bitgo/utils/postWithCodec.d.ts.map +1 -0
  388. package/dist/test/unit/bitgo/utils/postWithCodec.js +73 -0
  389. package/dist/test/unit/bitgo/utils/txRequest.d.ts +2 -0
  390. package/dist/test/unit/bitgo/utils/txRequest.d.ts.map +1 -0
  391. package/dist/test/unit/bitgo/utils/txRequest.js +105 -0
  392. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts +2 -0
  393. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts.map +1 -0
  394. package/dist/test/unit/bitgo/wallet/BuildParams.js +68 -0
  395. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.d.ts +2 -0
  396. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.d.ts.map +1 -0
  397. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +58 -0
  398. package/dist/test/unit/units.d.ts +2 -0
  399. package/dist/test/unit/units.d.ts.map +1 -0
  400. package/dist/test/unit/units.js +98 -0
  401. package/dist/tsconfig.tsbuildinfo +1 -1
  402. package/package.json +26 -20
  403. package/dist/src/account-lib/mpc/hdTree.d.ts +0 -31
  404. package/dist/src/account-lib/mpc/hdTree.d.ts.map +0 -1
  405. package/dist/src/account-lib/mpc/hdTree.js +0 -141
  406. package/dist/src/account-lib/mpc/types.d.ts +0 -5
  407. package/dist/src/account-lib/mpc/types.d.ts.map +0 -1
  408. package/dist/src/account-lib/mpc/types.js +0 -3
  409. package/dist/src/bitgo/lightning/iLightning.d.ts.map +0 -1
  410. package/dist/src/bitgo/lightning/iLightning.js +0 -106
  411. package/dist/src/bitgo/lightning/index.d.ts.map +0 -1
  412. package/dist/src/bitgo/lightning/lightning.d.ts.map +0 -1
  413. package/dist/src/bitgo/lightning/lightning.js +0 -111
  414. package/dist/src/bitgo/lightning/lightningUtils.d.ts.map +0 -1
  415. package/dist/src/bitgo/lightning/lightningUtils.js +0 -133
  416. package/dist/src/bitgo/lightning/lnurlCodec.d.ts.map +0 -1
  417. package/dist/src/bitgo/lightning/lnurlCodec.js +0 -28
  418. package/dist/src/bitgo/trading/affirmation.d.ts +0 -35
  419. package/dist/src/bitgo/trading/affirmation.d.ts.map +0 -1
  420. package/dist/src/bitgo/trading/affirmation.js +0 -53
  421. package/dist/src/bitgo/trading/affirmations.d.ts +0 -23
  422. package/dist/src/bitgo/trading/affirmations.d.ts.map +0 -1
  423. package/dist/src/bitgo/trading/affirmations.js +0 -45
  424. package/dist/src/bitgo/trading/iAffirmation.d.ts +0 -15
  425. package/dist/src/bitgo/trading/iAffirmation.d.ts.map +0 -1
  426. package/dist/src/bitgo/trading/iAffirmation.js +0 -13
  427. package/dist/src/bitgo/trading/iAffirmations.d.ts +0 -10
  428. package/dist/src/bitgo/trading/iAffirmations.d.ts.map +0 -1
  429. package/dist/src/bitgo/trading/iAffirmations.js +0 -3
  430. package/dist/src/bitgo/trading/iSettlement.d.ts +0 -25
  431. package/dist/src/bitgo/trading/iSettlement.d.ts.map +0 -1
  432. package/dist/src/bitgo/trading/iSettlement.js +0 -17
  433. package/dist/src/bitgo/trading/iSettlements.d.ts +0 -19
  434. package/dist/src/bitgo/trading/iSettlements.d.ts.map +0 -1
  435. package/dist/src/bitgo/trading/iSettlements.js +0 -3
  436. package/dist/src/bitgo/trading/iTradingPartner.d.ts +0 -14
  437. package/dist/src/bitgo/trading/iTradingPartner.d.ts.map +0 -1
  438. package/dist/src/bitgo/trading/iTradingPartner.js +0 -17
  439. package/dist/src/bitgo/trading/iTradingPartners.d.ts +0 -15
  440. package/dist/src/bitgo/trading/iTradingPartners.d.ts.map +0 -1
  441. package/dist/src/bitgo/trading/iTradingPartners.js +0 -9
  442. package/dist/src/bitgo/trading/lock.d.ts +0 -16
  443. package/dist/src/bitgo/trading/lock.d.ts.map +0 -1
  444. package/dist/src/bitgo/trading/lock.js +0 -12
  445. package/dist/src/bitgo/trading/payload.d.ts +0 -22
  446. package/dist/src/bitgo/trading/payload.d.ts.map +0 -1
  447. package/dist/src/bitgo/trading/payload.js +0 -3
  448. package/dist/src/bitgo/trading/settlement.d.ts +0 -16
  449. package/dist/src/bitgo/trading/settlement.d.ts.map +0 -1
  450. package/dist/src/bitgo/trading/settlement.js +0 -21
  451. package/dist/src/bitgo/trading/settlements.d.ts +0 -32
  452. package/dist/src/bitgo/trading/settlements.d.ts.map +0 -1
  453. package/dist/src/bitgo/trading/settlements.js +0 -61
  454. package/dist/src/bitgo/trading/trade.d.ts +0 -29
  455. package/dist/src/bitgo/trading/trade.d.ts.map +0 -1
  456. package/dist/src/bitgo/trading/trade.js +0 -11
  457. package/dist/src/bitgo/trading/tradingPartner.d.ts +0 -26
  458. package/dist/src/bitgo/trading/tradingPartner.d.ts.map +0 -1
  459. package/dist/src/bitgo/trading/tradingPartner.js +0 -31
  460. package/dist/src/bitgo/trading/tradingPartners.d.ts +0 -24
  461. package/dist/src/bitgo/trading/tradingPartners.d.ts.map +0 -1
  462. package/dist/src/bitgo/trading/tradingPartners.js +0 -32
  463. package/dist/src/openssl/index.d.ts +0 -5
  464. package/dist/src/openssl/index.d.ts.map +0 -1
  465. package/dist/src/openssl/index.js +0 -9
  466. /package/dist/src/bitgo/lightning/{index.d.ts → custodial/index.d.ts} +0 -0
  467. /package/dist/src/bitgo/lightning/{lnurlCodec.d.ts → custodial/lnurlCodec.d.ts} +0 -0
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,12 +15,25 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
20
37
  };
21
38
  Object.defineProperty(exports, "__esModule", { value: true });
22
39
  exports.PendingApproval = void 0;
@@ -24,16 +41,30 @@ exports.PendingApproval = void 0;
24
41
  * @prettier
25
42
  */
26
43
  const _ = __importStar(require("lodash"));
27
- const common = __importStar(require("../../common"));
28
44
  const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
29
45
  const pendingApproval_1 = require("../pendingApproval");
30
46
  const utils_1 = require("../utils");
47
+ const BuildParams_1 = require("../wallet/BuildParams");
48
+ const eddsa_1 = __importDefault(require("../utils/tss/eddsa"));
49
+ const ecdsa_1 = require("../utils/tss/ecdsa");
31
50
  class PendingApproval {
32
51
  constructor(bitgo, baseCoin, pendingApprovalData, wallet) {
33
52
  this.bitgo = bitgo;
34
53
  this.baseCoin = baseCoin;
35
54
  this.wallet = wallet;
36
- this.tssUtils = new utils_1.TssUtils(this.bitgo, this.baseCoin, wallet);
55
+ if (this.baseCoin.supportsTss()) {
56
+ if (this.baseCoin.getMPCAlgorithm() === 'ecdsa') {
57
+ if (this.wallet?.multisigTypeVersion() === 'MPCv2') {
58
+ this.tssUtils = new ecdsa_1.EcdsaMPCv2Utils(this.bitgo, this.baseCoin, wallet);
59
+ }
60
+ else {
61
+ this.tssUtils = new ecdsa_1.EcdsaUtils(this.bitgo, this.baseCoin, wallet);
62
+ }
63
+ }
64
+ else {
65
+ this.tssUtils = new eddsa_1.default(this.bitgo, this.baseCoin, wallet);
66
+ }
67
+ }
37
68
  this._pendingApproval = pendingApprovalData;
38
69
  }
39
70
  /**
@@ -42,6 +73,9 @@ class PendingApproval {
42
73
  id() {
43
74
  return this._pendingApproval.id;
44
75
  }
76
+ toJSON() {
77
+ return this._pendingApproval;
78
+ }
45
79
  /**
46
80
  * Get the owner type (wallet or enterprise)
47
81
  * Pending approvals can be approved or modified by different scopes (depending on how they were created)
@@ -122,108 +156,31 @@ class PendingApproval {
122
156
  this._pendingApproval = await this.bitgo.get(this.url()).result();
123
157
  return this;
124
158
  }
125
- /**
126
- * Helper function to ensure that self.wallet is set
127
- */
128
- async populateWallet() {
129
- const transactionRequest = this.info().transactionRequest;
130
- if (_.isUndefined(transactionRequest)) {
131
- throw new Error('missing required object property transactionRequest');
132
- }
133
- if (_.isUndefined(this.wallet)) {
134
- const updatedWallet = await this.baseCoin.wallets().get({ id: transactionRequest.sourceWallet });
135
- if (_.isUndefined(updatedWallet)) {
136
- throw new Error('unexpected - unable to get wallet using sourcewallet');
137
- }
138
- this.wallet = updatedWallet;
139
- }
140
- if (this.wallet.id() !== transactionRequest.sourceWallet) {
141
- throw new Error('unexpected source wallet for pending approval');
142
- }
143
- // otherwise returns undefined
144
- return;
145
- }
146
159
  /**
147
160
  * Sets this PendingApproval to an approved state
148
161
  */
149
162
  async approve(params = {}) {
150
- var _a, _b, _c, _d, _e, _f;
151
- common.validateParams(params, [], ['walletPassphrase', 'otp']);
152
- let canRecreateTransaction = true;
153
163
  params.previewPendingTxs = true;
154
- /*
155
- * Cold wallets cannot recreate transactions if the only thing provided is the wallet passphrase
156
- *
157
- * The transaction can be recreated if either
158
- * – there is an xprv
159
- * – there is a walletPassphrase and the wallet is not cold (because if it's cold, the passphrase is of little use)
160
- *
161
- * Therefore, if neither of these is true, the transaction cannot be recreated, which is reflected in the if
162
- * statement below.
163
- */
164
- const isColdWallet = !!_.get(this.wallet, '_wallet.isCold');
165
- const isOFCWallet = this.baseCoin.getFamily() === 'ofc'; // Off-chain transactions don't need to be rebuilt
166
- if (!params.xprv && !(params.walletPassphrase && !isColdWallet && !isOFCWallet)) {
167
- canRecreateTransaction = false;
168
- }
169
- // If there are no recipients, then the transaction cannot be recreated
170
- const recipients = ((_c = (_b = (_a = this.info()) === null || _a === void 0 ? void 0 : _a.transactionRequest) === null || _b === void 0 ? void 0 : _b.buildParams) === null || _c === void 0 ? void 0 : _c.recipients) || [];
171
- const type = (_f = (_e = (_d = this.info()) === null || _d === void 0 ? void 0 : _d.transactionRequest) === null || _e === void 0 ? void 0 : _e.buildParams) === null || _f === void 0 ? void 0 : _f.type;
172
- // We only want to not recreate transactions with no recipients if it is a UTXO coin.
173
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
174
- if (utxolib.isValidNetwork(this.baseCoin.network) && recipients.length === 0 && type !== 'consolidate') {
175
- canRecreateTransaction = false;
176
- }
164
+ params.pendingApprovalId = this.id();
165
+ const canRecreateTransaction = this.canRecreateTransaction(params);
177
166
  const reqId = new utils_1.RequestTracer();
178
- /*
179
- * Internal helper function to get the serialized transaction which is being approved
180
- */
181
- const getApprovalTransaction = async () => {
182
- if (this.type() === 'transactionRequest') {
183
- /*
184
- * If this is a request for approving a transaction, depending on whether this user has a private key to the wallet
185
- * (some admins may not have the spend permission), the transaction could either be rebroadcast as is, or it could
186
- * be reconstructed. It is preferable to reconstruct a tx in order to adhere to the latest network conditions
187
- * such as newer unspents, different fees, or a higher sequence id
188
- */
189
- if (params.tx) {
190
- // the approval tx was reconstructed and explicitly specified - pass it through
191
- return {
192
- txHex: params.tx,
193
- };
194
- }
195
- const transaction = _.get(this.info(), `transactionRequest.coinSpecific.${this.baseCoin.type}`);
196
- // this user may not have spending privileges or a passphrase may not have been passed in
197
- if (!canRecreateTransaction) {
198
- if (!_.isObject(transaction)) {
199
- throw new Error('there is neither an original transaction object nor can a new one be recreated');
200
- }
201
- return transaction;
202
- }
203
- this.bitgo.setRequestTracer(reqId);
204
- await this.populateWallet();
205
- if (this._pendingApproval.txRequestId) {
206
- return await this.recreateAndSignTSSTransaction(params, reqId);
207
- }
208
- return await this.recreateAndSignTransaction(params);
209
- }
210
- };
211
- /*
212
- * Internal helper function to prepare the approval payload and send it to bitgo
213
- */
214
- const sendApproval = (transaction) => {
167
+ this.bitgo.setRequestTracer(reqId);
168
+ await this.populateWallet();
169
+ try {
170
+ const transaction = await this.preApprove(params, reqId);
215
171
  const approvalParams = { state: 'approved', otp: params.otp };
216
172
  if (transaction) {
217
173
  // if the transaction already has a half signed property, we take that directly
218
174
  approvalParams.halfSigned = transaction.halfSigned || transaction;
219
175
  }
220
- this.bitgo.setRequestTracer(reqId);
221
- return this.bitgo.put(this.url()).send(approvalParams).result();
222
- };
223
- try {
224
- const approvalTransaction = (await getApprovalTransaction());
225
- this.bitgo.setRequestTracer(reqId);
226
- return await sendApproval(approvalTransaction);
176
+ const response = await this.bitgo.put(this.url()).send(approvalParams).result();
177
+ // if the response comes with an error, means that the transaction triggered another condition
178
+ if (response.hasOwnProperty('error') && response.hasOwnProperty('pendingApproval')) {
179
+ return response;
180
+ }
181
+ this._pendingApproval = response;
182
+ await this.postApprove(params, reqId);
183
+ return this._pendingApproval;
227
184
  }
228
185
  catch (e) {
229
186
  if (!canRecreateTransaction &&
@@ -269,15 +226,29 @@ class PendingApproval {
269
226
  }
270
227
  const decryptedPrv = await this.wallet.getPrv({ walletPassphrase });
271
228
  const txRequest = await this.tssUtils.recreateTxRequest(txRequestId, decryptedPrv, reqId);
272
- return {
273
- txHex: txRequest.unsignedTxs[0].serializedTxHex,
274
- };
229
+ if (txRequest.apiVersion === 'lite') {
230
+ if (!txRequest.unsignedTxs || txRequest.unsignedTxs.length === 0) {
231
+ throw new Error('Unexpected error, no transactions found in txRequest.');
232
+ }
233
+ return {
234
+ txHex: txRequest.unsignedTxs[0].serializedTxHex,
235
+ };
236
+ }
237
+ else {
238
+ if (!txRequest.transactions || txRequest.transactions.length === 0) {
239
+ throw new Error('Unexpected error, no transactions found in txRequest.');
240
+ }
241
+ return {
242
+ txHex: txRequest.transactions[0].unsignedTx.serializedTxHex,
243
+ };
244
+ }
275
245
  }
276
246
  /**
277
247
  * Recreate a transaction for a pending approval to respond to updated network conditions
278
248
  * @param params
249
+ * @param reqId
279
250
  */
280
- async recreateAndSignTransaction(params = {}) {
251
+ async recreateAndSignTransaction(params = {}, reqId) {
281
252
  // this method only makes sense with existing transaction requests
282
253
  const transactionRequest = this.info().transactionRequest;
283
254
  if (_.isUndefined(transactionRequest)) {
@@ -288,19 +259,22 @@ class PendingApproval {
288
259
  }
289
260
  const originalPrebuild = transactionRequest.coinSpecific[this.baseCoin.type];
290
261
  const recipients = transactionRequest.recipients;
291
- const prebuildParams = _.extend({}, params, { recipients: recipients }, transactionRequest.buildParams);
262
+ let prebuildParams = _.extend({}, params, { recipients: recipients }, transactionRequest.buildParams);
292
263
  if (!_.isUndefined(originalPrebuild.hopTransaction)) {
293
264
  prebuildParams.hop = true;
294
265
  }
266
+ const reqTracer = reqId || new utils_1.RequestTracer();
295
267
  if (transactionRequest.buildParams && transactionRequest.buildParams.type === 'consolidate') {
296
268
  // consolidate tag is in the build params - this is a consolidation transaction, so
297
269
  // it needs to be rebuilt using the special consolidation build route
270
+ this.bitgo.setRequestTracer(reqTracer);
298
271
  prebuildParams.prebuildTx = await this.bitgo
299
272
  .post(this.wallet.url(`/consolidateUnspents`))
300
- .send(prebuildParams)
273
+ .send(BuildParams_1.BuildParams.encode(prebuildParams))
301
274
  .result();
302
275
  delete prebuildParams.recipients;
303
276
  }
277
+ prebuildParams = _.extend({}, prebuildParams, { reqId: reqId });
304
278
  const signedTransaction = await this.wallet.prebuildAndSignTransaction(prebuildParams);
305
279
  // compare PAYGo fees
306
280
  const originalParsedTransaction = (await this.baseCoin.parseTransaction({
@@ -326,6 +300,127 @@ class PendingApproval {
326
300
  }
327
301
  return signedTransaction;
328
302
  }
303
+ /*
304
+ * Cold wallets cannot recreate transactions if the only thing provided is the wallet passphrase
305
+ *
306
+ * The transaction can be recreated if either
307
+ * – there is an xprv
308
+ * – there is a walletPassphrase and the wallet is not cold (because if it's cold, the passphrase is of little use)
309
+ *
310
+ * Therefore, if neither of these is true, the transaction cannot be recreated, which is reflected in the if
311
+ * statement below.
312
+ */
313
+ canRecreateTransaction(params) {
314
+ const isColdWallet = !!_.get(this.wallet, '_wallet.isCold');
315
+ const isOFCWallet = this.baseCoin.getFamily() === 'ofc'; // Off-chain transactions don't need to be rebuilt
316
+ if (!params.xprv && !(params.walletPassphrase && !isColdWallet && !isOFCWallet)) {
317
+ return false;
318
+ }
319
+ // If there are no recipients, then the transaction cannot be recreated
320
+ const recipients = this.info()?.transactionRequest?.buildParams?.recipients || [];
321
+ const type = this.info()?.transactionRequest?.buildParams?.type;
322
+ // We only want to not recreate transactions with no recipients if it is a UTXO coin.
323
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
324
+ return !(utxolib.isValidNetwork(this.baseCoin.network) &&
325
+ recipients.length === 0 &&
326
+ type !== 'consolidate');
327
+ }
328
+ /*
329
+ * Internal helper function to get the serialized transaction which is being approved.
330
+ * If this PA is of type 'transactionRequest' this function will try to rebuild and resign the transaction
331
+ * @param {ApproveOptions} params
332
+ * @param {boolean} canRecreateTransaction -
333
+ * @param {RequestTracer} reqId id tracer
334
+ */
335
+ async preApprove(params = {}, reqId) {
336
+ // TransactionRequestLite or Multisig tx's must sign before pending approval is approved
337
+ // Re-signed tx is provided to the pending approval api
338
+ if (this.type() === pendingApproval_1.Type.TRANSACTION_REQUEST) {
339
+ /*
340
+ * If this is a request for approving a transaction, depending on whether this user has a private key to the wallet
341
+ * (some admins may not have the spend permission), the transaction could either be rebroadcast as is, or it could
342
+ * be reconstructed. It is preferable to reconstruct a tx in order to adhere to the latest network conditions
343
+ * such as newer unspents, different fees, or a higher sequence id
344
+ */
345
+ if (params.tx) {
346
+ // the approval tx was reconstructed and explicitly specified - pass it through
347
+ return {
348
+ txHex: params.tx,
349
+ };
350
+ }
351
+ // this user may not have spending privileges or a passphrase may not have been passed in
352
+ if (!this.canRecreateTransaction(params)) {
353
+ // If this is a TransactionRequest, then the txRequest already has the unsigned transaction
354
+ if (this._pendingApproval.txRequestId) {
355
+ return undefined;
356
+ }
357
+ // If this is a MultiSig, then we need to fetch the half signed tx to propagate to the approval API
358
+ const transaction = _.get(this.info(), `transactionRequest.coinSpecific.${this.baseCoin.type}`);
359
+ if (!_.isObject(transaction)) {
360
+ throw new Error('there is neither an original transaction object nor can a new one be recreated');
361
+ }
362
+ return transaction;
363
+ }
364
+ if (this._pendingApproval.txRequestId) {
365
+ return await this.recreateAndSignTSSTransaction(params, reqId);
366
+ }
367
+ return await this.recreateAndSignTransaction(params, reqId);
368
+ }
369
+ }
370
+ /**
371
+ * Internal helper function to perform any post-approval actions.
372
+ * If type is 'transactionRequestFull', this will sign the txRequestFull if possible
373
+ * @param params
374
+ * @param reqId
375
+ * @private
376
+ */
377
+ async postApprove(params = {}, reqId) {
378
+ switch (this.type()) {
379
+ case pendingApproval_1.Type.TRANSACTION_REQUEST_FULL:
380
+ // TransactionRequestFull for SMH or SMC wallets can only be signed after pending approval is approved
381
+ if (this._pendingApproval.state === pendingApproval_1.State.APPROVED &&
382
+ this.canRecreateTransaction(params) &&
383
+ this.baseCoin.supportsTss()) {
384
+ await this.recreateAndSignTSSTransaction(params, reqId);
385
+ }
386
+ }
387
+ }
388
+ /**
389
+ * Helper function to ensure that self.wallet is set
390
+ */
391
+ async populateWallet() {
392
+ if (this.wallet) {
393
+ return;
394
+ }
395
+ // TODO(WP-1341): consolidate/simplify this logic
396
+ switch (this.type()) {
397
+ case pendingApproval_1.Type.TRANSACTION_REQUEST:
398
+ const transactionRequest = this.info().transactionRequest;
399
+ if (_.isUndefined(transactionRequest)) {
400
+ throw new Error('missing required object property transactionRequest');
401
+ }
402
+ const updatedWallet = await this.baseCoin.wallets().get({ id: transactionRequest.sourceWallet });
403
+ if (_.isUndefined(updatedWallet)) {
404
+ throw new Error('unexpected - unable to get wallet using sourcewallet');
405
+ }
406
+ this.wallet = updatedWallet;
407
+ if (this.wallet.id() !== transactionRequest.sourceWallet) {
408
+ throw new Error('unexpected source wallet for pending approval');
409
+ }
410
+ break;
411
+ case pendingApproval_1.Type.TRANSACTION_REQUEST_FULL:
412
+ const walletId = this.walletId();
413
+ if (!walletId) {
414
+ throw new Error('Unexpected error, pendingApproval.wallet is expected to be defined!');
415
+ }
416
+ this.wallet = await this.baseCoin.wallets().get({ id: this.walletId() });
417
+ if (!this.wallet) {
418
+ throw new Error('unexpected - unable to get wallet using pendingApproval.wallet');
419
+ }
420
+ break;
421
+ }
422
+ return;
423
+ }
329
424
  }
330
425
  exports.PendingApproval = PendingApproval;
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ0FwcHJvdmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3BlbmRpbmdBcHByb3ZhbC9wZW5kaW5nQXBwcm92YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsMENBQTRCO0FBQzVCLHFEQUF1QztBQUN2Qyw4REFBZ0Q7QUFHaEQsd0RBUTRCO0FBQzVCLG9DQUFtRDtBQUduRCxNQUFhLGVBQWU7SUFPMUIsWUFBWSxLQUFnQixFQUFFLFFBQW1CLEVBQUUsbUJBQXdDLEVBQUUsTUFBZ0I7UUFDM0csSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGdCQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxFQUFFO1FBQ0EsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDaEMsT0FBTywyQkFBUyxDQUFDLE1BQU0sQ0FBQztTQUN6QjthQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUMzQyxPQUFPLDJCQUFTLENBQUMsVUFBVSxDQUFDO1NBQzdCO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7U0FDakc7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7U0FDM0Q7UUFFRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFnQyxFQUFFO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGNBQWM7UUFDMUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUM7UUFDMUQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QixNQUFNLGFBQWEsR0FBWSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFFMUcsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7YUFDekU7WUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztTQUM3QjtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUU7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsOEJBQThCO1FBQzlCLE9BQU87SUFDVCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQXlCLEVBQUU7O1FBQ3ZDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFL0QsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbEMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNoQzs7Ozs7Ozs7O1dBU0c7UUFDSCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxrREFBa0Q7UUFDM0csSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9FLHNCQUFzQixHQUFHLEtBQUssQ0FBQztTQUNoQztRQUVELHVFQUF1RTtRQUN2RSxNQUFNLFVBQVUsR0FBRyxDQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxJQUFJLEVBQUUsMENBQUUsa0JBQWtCLDBDQUFFLFdBQVcsMENBQUUsVUFBVSxLQUFJLEVBQUUsQ0FBQztRQUNsRixNQUFNLElBQUksR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsSUFBSSxFQUFFLDBDQUFFLGtCQUFrQiwwQ0FBRSxXQUFXLDBDQUFFLElBQUksQ0FBQztRQUVoRSxxRkFBcUY7UUFDckYsOERBQThEO1FBQzlELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBRSxJQUFJLENBQUMsUUFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFO1lBQy9HLHNCQUFzQixHQUFHLEtBQUssQ0FBQztTQUNoQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUkscUJBQWEsRUFBRSxDQUFDO1FBRWxDOztXQUVHO1FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLElBQTRDLEVBQUU7WUFDaEYsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssb0JBQW9CLEVBQUU7Z0JBQ3hDOzs7OzttQkFLRztnQkFDSCxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUU7b0JBQ2IsK0VBQStFO29CQUMvRSxPQUFPO3dCQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRTtxQkFDakIsQ0FBQztpQkFDSDtnQkFFRCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxtQ0FBbUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FFN0YsQ0FBQztnQkFFRix5RkFBeUY7Z0JBQ3pGLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7d0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztxQkFDbkc7b0JBQ0QsT0FBTyxXQUFXLENBQUM7aUJBQ3BCO2dCQUVELElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUU1QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7b0JBQ3JDLE9BQU8sTUFBTSxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNoRTtnQkFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3REO1FBQ0gsQ0FBQyxDQUFDO1FBRUY7O1dBRUc7UUFDSCxNQUFNLFlBQVksR0FBRyxDQUFDLFdBQW1ELEVBQWdCLEVBQUU7WUFDekYsTUFBTSxjQUFjLEdBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbkUsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsK0VBQStFO2dCQUMvRSxjQUFjLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLElBQUksV0FBVyxDQUFDO2FBQ25FO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsRSxDQUFDLENBQUM7UUFFRixJQUFJO1lBQ0YsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE1BQU0sc0JBQXNCLEVBQUUsQ0FBUSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsT0FBTyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ2hEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUNFLENBQUMsc0JBQXNCO2dCQUN2QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNsRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzRUFBc0UsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ25HO2dCQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQzthQUNqRztZQUNELE1BQU0sQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFnQyxFQUFFO1FBQzdDLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQWdDLEVBQUU7UUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsNkJBQTZCLENBQUMsTUFBc0IsRUFBRSxLQUFvQjtRQUM5RSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDckM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDMUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFGLE9BQU87WUFDTCxLQUFLLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlO1NBQ2hELENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQixDQUFDLFNBQWMsRUFBRTtRQUMvQyxrRUFBa0U7UUFDbEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUM7UUFDMUQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1NBQzVFO1FBRUQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdFLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztRQUNqRCxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEcsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkQsY0FBYyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7U0FDM0I7UUFFRCxJQUFJLGtCQUFrQixDQUFDLFdBQVcsSUFBSSxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRTtZQUMzRixtRkFBbUY7WUFDbkYscUVBQXFFO1lBQ3JFLGNBQWMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSztpQkFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7aUJBQzdDLElBQUksQ0FBQyxjQUFjLENBQUM7aUJBQ3BCLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDO1NBQ2xDO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkYscUJBQXFCO1FBQ3JCLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7WUFDdEUsUUFBUSxFQUFFLGNBQWM7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVUsRUFBRSxnQkFBZ0I7U0FDN0IsQ0FBQyxDQUFRLENBQUM7UUFDWCxNQUFNLDBCQUEwQixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQ3ZFLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixVQUFVLEVBQUUsaUJBQWlCO1NBQzlCLENBQUMsQ0FBUSxDQUFDO1FBRVgsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDLDJCQUEyQixDQUFDLEVBQUU7WUFDekUsT0FBTyxpQkFBaUIsQ0FBQztTQUMxQjtRQUVELElBQ0UsT0FBTywwQkFBMEIsQ0FBQywyQkFBMkIsS0FBSyxRQUFRO1lBQzFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQywyQkFBMkIsQ0FBQyxFQUNuRTtZQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztTQUMzRTtRQUNELElBQ0UsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLDJCQUEyQixDQUFDO1lBQ3JFLDBCQUEwQixDQUFDLDJCQUEyQixHQUFHLHlCQUF5QixDQUFDLDJCQUEyQixFQUM5RztZQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztTQUM5RTtRQUNELE9BQU8saUJBQWlCLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBbFdELDBDQWtXQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBJQmFzZUNvaW4gfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHtcbiAgQXBwcm92ZU9wdGlvbnMsXG4gIElQZW5kaW5nQXBwcm92YWwsXG4gIE93bmVyVHlwZSxcbiAgUGVuZGluZ0FwcHJvdmFsRGF0YSxcbiAgUGVuZGluZ0FwcHJvdmFsSW5mbyxcbiAgU3RhdGUsXG4gIFR5cGUsXG59IGZyb20gJy4uL3BlbmRpbmdBcHByb3ZhbCc7XG5pbXBvcnQgeyBSZXF1ZXN0VHJhY2VyLCBUc3NVdGlscyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IElXYWxsZXQgfSBmcm9tICcuLi93YWxsZXQnO1xuXG5leHBvcnQgY2xhc3MgUGVuZGluZ0FwcHJvdmFsIGltcGxlbWVudHMgSVBlbmRpbmdBcHByb3ZhbCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlQ29pbjogSUJhc2VDb2luO1xuICBwcml2YXRlIHRzc1V0aWxzOiBUc3NVdGlscztcbiAgcHJpdmF0ZSB3YWxsZXQ/OiBJV2FsbGV0O1xuICBwcml2YXRlIF9wZW5kaW5nQXBwcm92YWw6IFBlbmRpbmdBcHByb3ZhbERhdGE7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgYmFzZUNvaW46IElCYXNlQ29pbiwgcGVuZGluZ0FwcHJvdmFsRGF0YTogUGVuZGluZ0FwcHJvdmFsRGF0YSwgd2FsbGV0PzogSVdhbGxldCkge1xuICAgIHRoaXMuYml0Z28gPSBiaXRnbztcbiAgICB0aGlzLmJhc2VDb2luID0gYmFzZUNvaW47XG4gICAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG4gICAgdGhpcy50c3NVdGlscyA9IG5ldyBUc3NVdGlscyh0aGlzLmJpdGdvLCB0aGlzLmJhc2VDb2luLCB3YWxsZXQpO1xuICAgIHRoaXMuX3BlbmRpbmdBcHByb3ZhbCA9IHBlbmRpbmdBcHByb3ZhbERhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZCBmb3IgdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG93bmVyIHR5cGUgKHdhbGxldCBvciBlbnRlcnByaXNlKVxuICAgKiBQZW5kaW5nIGFwcHJvdmFscyBjYW4gYmUgYXBwcm92ZWQgb3IgbW9kaWZpZWQgYnkgZGlmZmVyZW50IHNjb3BlcyAoZGVwZW5kaW5nIG9uIGhvdyB0aGV5IHdlcmUgY3JlYXRlZClcbiAgICogSWYgYSBwZW5kaW5nIGFwcHJvdmFsIGlzIG93bmVkIGJ5IGEgd2FsbGV0LCB0aGVuIGl0IGNhbiBiZSBhcHByb3ZlZCBieSBhZG1pbmlzdHJhdG9ycyBvZiB0aGUgd2FsbGV0XG4gICAqIElmIGEgcGVuZGluZyBhcHByb3ZhbCBpcyBvd25lZCBieSBhbiBlbnRlcnByaXNlLCB0aGVuIGl0IGNhbiBiZSBhcHByb3ZlZCBieSBhZG1pbmlzdHJhdG9ycyBvZiB0aGUgZW50ZXJwcmlzZVxuICAgKi9cbiAgb3duZXJUeXBlKCk6IE93bmVyVHlwZSB7XG4gICAgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC53YWxsZXQpIHtcbiAgICAgIHJldHVybiBPd25lclR5cGUuV0FMTEVUO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGVuZGluZ0FwcHJvdmFsLmVudGVycHJpc2UpIHtcbiAgICAgIHJldHVybiBPd25lclR5cGUuRU5URVJQUklTRTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHBlbmRpbmcgYXBwcm92YWwgb3duZXI6IG5laXRoZXIgd2FsbGV0IG5vciBlbnRlcnByaXNlIHdhcyBwcmVzZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaWQgb2YgdGhlIHdhbGxldCB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIHdhbGxldElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC53YWxsZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBlbnRlcnByaXNlIElEIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBlbnRlcnByaXNlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmVudGVycHJpc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGF0ZSBvZiB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgc3RhdGUoKTogU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZCBvZiB0aGUgdXNlciB0aGF0IHBlcmZvcm1lZCB0aGUgYWN0aW9uIHJlc3VsdGluZyBpbiB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgY3JlYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuY3JlYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHR5cGUgb2YgdGhlIHBlbmRpbmcgYXBwcm92YWwgKHdoYXQgaXQgYXBwcm92ZXMpXG4gICAqL1xuICB0eXBlKCk6IFR5cGUge1xuICAgIGlmICghdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGVuZGluZyBhcHByb3ZhbCBpbmZvIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmluZm8udHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIGluZm8oKTogUGVuZGluZ0FwcHJvdmFsSW5mbyB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5pbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGFwcHJvdmFscyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhpcyBQZW5kaW5nQXBwcm92YWwgdG8gYmUgYXBwcm92ZWQuXG4gICAqIERlZmF1bHRzIHRvIDEgaWYgYXBwcm92YWxzUmVxdWlyZWQgZG9lc24ndCBleGlzdCBvbiB0aGUgb2JqZWN0XG4gICAqL1xuICBhcHByb3ZhbHNSZXF1aXJlZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuYXBwcm92YWxzUmVxdWlyZWQgfHwgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHVybCBmb3IgdGhpcyBQZW5kaW5nQXBwcm92YWwgZm9yIG1ha2luZyByZXF1ZXN0cyB0byB0aGUgc2VydmVyLlxuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIHVybChleHRyYSA9ICcnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlQ29pbi51cmwoJy9wZW5kaW5nYXBwcm92YWxzLycgKyB0aGlzLmlkKCkgKyBleHRyYSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmZXRjaGVzIHRoaXMgUGVuZGluZ0FwcHJvdmFsIGZyb20gdGhlIHNlcnZlciBhbmQgcmV0dXJucyBpdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgbXV0YXRlcyB0aGUgUGVuZGluZ0FwcHJvdmFsIG9iamVjdCBpbiBwbGFjZS5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZ2V0KHBhcmFtczogUmVjb3JkPHN0cmluZywgbmV2ZXI+ID0ge30pOiBQcm9taXNlPFBlbmRpbmdBcHByb3ZhbD4ge1xuICAgIHRoaXMuX3BlbmRpbmdBcHByb3ZhbCA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCkpLnJlc3VsdCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBzZWxmLndhbGxldCBpcyBzZXRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcG9wdWxhdGVXYWxsZXQoKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvblJlcXVlc3QgPSB0aGlzLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3Q7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodHJhbnNhY3Rpb25SZXF1ZXN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBwcm9wZXJ0eSB0cmFuc2FjdGlvblJlcXVlc3QnKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLndhbGxldCkpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRXYWxsZXQ6IElXYWxsZXQgPSBhd2FpdCB0aGlzLmJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogdHJhbnNhY3Rpb25SZXF1ZXN0LnNvdXJjZVdhbGxldCB9KTtcblxuICAgICAgaWYgKF8uaXNVbmRlZmluZWQodXBkYXRlZFdhbGxldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIC0gdW5hYmxlIHRvIGdldCB3YWxsZXQgdXNpbmcgc291cmNld2FsbGV0Jyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMud2FsbGV0ID0gdXBkYXRlZFdhbGxldDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53YWxsZXQuaWQoKSAhPT0gdHJhbnNhY3Rpb25SZXF1ZXN0LnNvdXJjZVdhbGxldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNvdXJjZSB3YWxsZXQgZm9yIHBlbmRpbmcgYXBwcm92YWwnKTtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWRcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIFBlbmRpbmdBcHByb3ZhbCB0byBhbiBhcHByb3ZlZCBzdGF0ZVxuICAgKi9cbiAgYXN5bmMgYXBwcm92ZShwYXJhbXM6IEFwcHJvdmVPcHRpb25zID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3dhbGxldFBhc3NwaHJhc2UnLCAnb3RwJ10pO1xuXG4gICAgbGV0IGNhblJlY3JlYXRlVHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgIHBhcmFtcy5wcmV2aWV3UGVuZGluZ1R4cyA9IHRydWU7XG4gICAgLypcbiAgICAgKiBDb2xkIHdhbGxldHMgY2Fubm90IHJlY3JlYXRlIHRyYW5zYWN0aW9ucyBpZiB0aGUgb25seSB0aGluZyBwcm92aWRlZCBpcyB0aGUgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICAgKlxuICAgICAqIFRoZSB0cmFuc2FjdGlvbiBjYW4gYmUgcmVjcmVhdGVkIGlmIGVpdGhlclxuICAgICAqIOKAkyB0aGVyZSBpcyBhbiB4cHJ2XG4gICAgICog4oCTIHRoZXJlIGlzIGEgd2FsbGV0UGFzc3BocmFzZSBhbmQgdGhlIHdhbGxldCBpcyBub3QgY29sZCAoYmVjYXVzZSBpZiBpdCdzIGNvbGQsIHRoZSBwYXNzcGhyYXNlIGlzIG9mIGxpdHRsZSB1c2UpXG4gICAgICpcbiAgICAgKiBUaGVyZWZvcmUsIGlmIG5laXRoZXIgb2YgdGhlc2UgaXMgdHJ1ZSwgdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBiZSByZWNyZWF0ZWQsIHdoaWNoIGlzIHJlZmxlY3RlZCBpbiB0aGUgaWZcbiAgICAgKiBzdGF0ZW1lbnQgYmVsb3cuXG4gICAgICovXG4gICAgY29uc3QgaXNDb2xkV2FsbGV0ID0gISFfLmdldCh0aGlzLndhbGxldCwgJ193YWxsZXQuaXNDb2xkJyk7XG4gICAgY29uc3QgaXNPRkNXYWxsZXQgPSB0aGlzLmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnb2ZjJzsgLy8gT2ZmLWNoYWluIHRyYW5zYWN0aW9ucyBkb24ndCBuZWVkIHRvIGJlIHJlYnVpbHRcbiAgICBpZiAoIXBhcmFtcy54cHJ2ICYmICEocGFyYW1zLndhbGxldFBhc3NwaHJhc2UgJiYgIWlzQ29sZFdhbGxldCAmJiAhaXNPRkNXYWxsZXQpKSB7XG4gICAgICBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHJlY2lwaWVudHMsIHRoZW4gdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBiZSByZWNyZWF0ZWRcbiAgICBjb25zdCByZWNpcGllbnRzID0gdGhpcy5pbmZvKCk/LnRyYW5zYWN0aW9uUmVxdWVzdD8uYnVpbGRQYXJhbXM/LnJlY2lwaWVudHMgfHwgW107XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuaW5mbygpPy50cmFuc2FjdGlvblJlcXVlc3Q/LmJ1aWxkUGFyYW1zPy50eXBlO1xuXG4gICAgLy8gV2Ugb25seSB3YW50IHRvIG5vdCByZWNyZWF0ZSB0cmFuc2FjdGlvbnMgd2l0aCBubyByZWNpcGllbnRzIGlmIGl0IGlzIGEgVVRYTyBjb2luLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKHV0eG9saWIuaXNWYWxpZE5ldHdvcmsoKHRoaXMuYmFzZUNvaW4gYXMgYW55KS5uZXR3b3JrKSAmJiByZWNpcGllbnRzLmxlbmd0aCA9PT0gMCAmJiB0eXBlICE9PSAnY29uc29saWRhdGUnKSB7XG4gICAgICBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuXG4gICAgLypcbiAgICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIHdoaWNoIGlzIGJlaW5nIGFwcHJvdmVkXG4gICAgICovXG4gICAgY29uc3QgZ2V0QXBwcm92YWxUcmFuc2FjdGlvbiA9IGFzeW5jICgpOiBQcm9taXNlPHsgdHhIZXg6IHN0cmluZyB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICBpZiAodGhpcy50eXBlKCkgPT09ICd0cmFuc2FjdGlvblJlcXVlc3QnKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIElmIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBhcHByb3ZpbmcgYSB0cmFuc2FjdGlvbiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyB1c2VyIGhhcyBhIHByaXZhdGUga2V5IHRvIHRoZSB3YWxsZXRcbiAgICAgICAgICogKHNvbWUgYWRtaW5zIG1heSBub3QgaGF2ZSB0aGUgc3BlbmQgcGVybWlzc2lvbiksIHRoZSB0cmFuc2FjdGlvbiBjb3VsZCBlaXRoZXIgYmUgcmVicm9hZGNhc3QgYXMgaXMsIG9yIGl0IGNvdWxkXG4gICAgICAgICAqIGJlIHJlY29uc3RydWN0ZWQuIEl0IGlzIHByZWZlcmFibGUgdG8gcmVjb25zdHJ1Y3QgYSB0eCBpbiBvcmRlciB0byBhZGhlcmUgdG8gdGhlIGxhdGVzdCBuZXR3b3JrIGNvbmRpdGlvbnNcbiAgICAgICAgICogc3VjaCBhcyBuZXdlciB1bnNwZW50cywgZGlmZmVyZW50IGZlZXMsIG9yIGEgaGlnaGVyIHNlcXVlbmNlIGlkXG4gICAgICAgICAqL1xuICAgICAgICBpZiAocGFyYW1zLnR4KSB7XG4gICAgICAgICAgLy8gdGhlIGFwcHJvdmFsIHR4IHdhcyByZWNvbnN0cnVjdGVkIGFuZCBleHBsaWNpdGx5IHNwZWNpZmllZCAtIHBhc3MgaXQgdGhyb3VnaFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eEhleDogcGFyYW1zLnR4LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IF8uZ2V0KHRoaXMuaW5mbygpLCBgdHJhbnNhY3Rpb25SZXF1ZXN0LmNvaW5TcGVjaWZpYy4ke3RoaXMuYmFzZUNvaW4udHlwZX1gKSBhcyB7XG4gICAgICAgICAgdHhIZXg6IHN0cmluZztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB0aGlzIHVzZXIgbWF5IG5vdCBoYXZlIHNwZW5kaW5nIHByaXZpbGVnZXMgb3IgYSBwYXNzcGhyYXNlIG1heSBub3QgaGF2ZSBiZWVuIHBhc3NlZCBpblxuICAgICAgICBpZiAoIWNhblJlY3JlYXRlVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICBpZiAoIV8uaXNPYmplY3QodHJhbnNhY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZXJlIGlzIG5laXRoZXIgYW4gb3JpZ2luYWwgdHJhbnNhY3Rpb24gb2JqZWN0IG5vciBjYW4gYSBuZXcgb25lIGJlIHJlY3JlYXRlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgICAgICBhd2FpdCB0aGlzLnBvcHVsYXRlV2FsbGV0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uKHBhcmFtcywgcmVxSWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIGFwcHJvdmFsIHBheWxvYWQgYW5kIHNlbmQgaXQgdG8gYml0Z29cbiAgICAgKi9cbiAgICBjb25zdCBzZW5kQXBwcm92YWwgPSAodHJhbnNhY3Rpb246IHsgdHhIZXg6IHN0cmluZzsgaGFsZlNpZ25lZD86IHN0cmluZyB9KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIGNvbnN0IGFwcHJvdmFsUGFyYW1zOiBhbnkgPSB7IHN0YXRlOiAnYXBwcm92ZWQnLCBvdHA6IHBhcmFtcy5vdHAgfTtcbiAgICAgIGlmICh0cmFuc2FjdGlvbikge1xuICAgICAgICAvLyBpZiB0aGUgdHJhbnNhY3Rpb24gYWxyZWFkeSBoYXMgYSBoYWxmIHNpZ25lZCBwcm9wZXJ0eSwgd2UgdGFrZSB0aGF0IGRpcmVjdGx5XG4gICAgICAgIGFwcHJvdmFsUGFyYW1zLmhhbGZTaWduZWQgPSB0cmFuc2FjdGlvbi5oYWxmU2lnbmVkIHx8IHRyYW5zYWN0aW9uO1xuICAgICAgfVxuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcbiAgICAgIHJldHVybiB0aGlzLmJpdGdvLnB1dCh0aGlzLnVybCgpKS5zZW5kKGFwcHJvdmFsUGFyYW1zKS5yZXN1bHQoKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwcHJvdmFsVHJhbnNhY3Rpb24gPSAoYXdhaXQgZ2V0QXBwcm92YWxUcmFuc2FjdGlvbigpKSBhcyBhbnk7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgICAgcmV0dXJuIGF3YWl0IHNlbmRBcHByb3ZhbChhcHByb3ZhbFRyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uICYmXG4gICAgICAgIChlLm1lc3NhZ2UuaW5kZXhPZignY291bGQgbm90IGZpbmQgdW5zcGVudCBvdXRwdXQgZm9yIGlucHV0JykgIT09IC0xIHx8XG4gICAgICAgICAgZS5tZXNzYWdlLmluZGV4T2YoJ3RyYW5zYWN0aW9uIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uIGluIHRoZSBzZW5kIHF1ZXVlJykgIT09IC0xKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zcGVudHMgZXhwaXJlZCwgd2FsbGV0IHBhc3NwaHJhc2Ugb3IgeHBydiByZXF1aXJlZCB0byByZWNyZWF0ZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIFBlbmRpbmdBcHByb3ZhbCB0byBhIHJlamVjdGVkIHN0YXRlXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHJlamVjdChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPiA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5wdXQodGhpcy51cmwoKSkuc2VuZCh7IHN0YXRlOiAncmVqZWN0ZWQnIH0pLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsaWFzIGZvciBQZW5kaW5nQXBwcm92YWwucmVqZWN0KClcbiAgICpcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgY2FuY2VsKHBhcmFtczogUmVjb3JkPHN0cmluZywgbmV2ZXI+ID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJlamVjdChwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlIGFuZCBzaWduIFRTUyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0FwcHJvdmVPcHRpb25zfSBwYXJhbXMgbmVlZGVkIHRvIGdldCB0eHMgYW5kIHVzZSB0aGUgd2FsbGV0UGFzc3BocmFzZSB0byB0c3Mgc2lnblxuICAgKiBAcGFyYW0ge1JlcXVlc3RUcmFjZXJ9IHJlcUlkIGlkIHRyYWNlci5cbiAgICovXG4gIGFzeW5jIHJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uKHBhcmFtczogQXBwcm92ZU9wdGlvbnMsIHJlcUlkOiBSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTx7IHR4SGV4OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgd2FsbGV0UGFzc3BocmFzZSB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHR4UmVxdWVzdElkID0gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLnR4UmVxdWVzdElkO1xuXG4gICAgaWYgKCF0aGlzLndhbGxldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXYWxsZXQgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKCF3YWxsZXRQYXNzcGhyYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhbGxldFBhc3NwaHJhc2Ugbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eFJlcXVlc3RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eFJlcXVlc3RJZCBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRQcnYgPSBhd2FpdCB0aGlzLndhbGxldC5nZXRQcnYoeyB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IHRoaXMudHNzVXRpbHMucmVjcmVhdGVUeFJlcXVlc3QodHhSZXF1ZXN0SWQsIGRlY3J5cHRlZFBydiwgcmVxSWQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eEhleDogdHhSZXF1ZXN0LnVuc2lnbmVkVHhzWzBdLnNlcmlhbGl6ZWRUeEhleCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlIGEgdHJhbnNhY3Rpb24gZm9yIGEgcGVuZGluZyBhcHByb3ZhbCB0byByZXNwb25kIHRvIHVwZGF0ZWQgbmV0d29yayBjb25kaXRpb25zXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIHRoaXMgbWV0aG9kIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBleGlzdGluZyB0cmFuc2FjdGlvbiByZXF1ZXN0c1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdCA9IHRoaXMuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdDtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0cmFuc2FjdGlvblJlcXVlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCByZWNyZWF0ZSB0cmFuc2FjdGlvbiB3aXRob3V0IHRyYW5zYWN0aW9uIHJlcXVlc3QnKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLndhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHJlY3JlYXRlIHRyYW5zYWN0aW9uIHdpdGhvdXQgd2FsbGV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxQcmVidWlsZCA9IHRyYW5zYWN0aW9uUmVxdWVzdC5jb2luU3BlY2lmaWNbdGhpcy5iYXNlQ29pbi50eXBlXTtcblxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0cmFuc2FjdGlvblJlcXVlc3QucmVjaXBpZW50cztcbiAgICBjb25zdCBwcmVidWlsZFBhcmFtcyA9IF8uZXh0ZW5kKHt9LCBwYXJhbXMsIHsgcmVjaXBpZW50czogcmVjaXBpZW50cyB9LCB0cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXMpO1xuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKG9yaWdpbmFsUHJlYnVpbGQuaG9wVHJhbnNhY3Rpb24pKSB7XG4gICAgICBwcmVidWlsZFBhcmFtcy5ob3AgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXMgJiYgdHJhbnNhY3Rpb25SZXF1ZXN0LmJ1aWxkUGFyYW1zLnR5cGUgPT09ICdjb25zb2xpZGF0ZScpIHtcbiAgICAgIC8vIGNvbnNvbGlkYXRlIHRhZyBpcyBpbiB0aGUgYnVpbGQgcGFyYW1zIC0gdGhpcyBpcyBhIGNvbnNvbGlkYXRpb24gdHJhbnNhY3Rpb24sIHNvXG4gICAgICAvLyBpdCBuZWVkcyB0byBiZSByZWJ1aWx0IHVzaW5nIHRoZSBzcGVjaWFsIGNvbnNvbGlkYXRpb24gYnVpbGQgcm91dGVcbiAgICAgIHByZWJ1aWxkUGFyYW1zLnByZWJ1aWxkVHggPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAgIC5wb3N0KHRoaXMud2FsbGV0LnVybChgL2NvbnNvbGlkYXRlVW5zcGVudHNgKSlcbiAgICAgICAgLnNlbmQocHJlYnVpbGRQYXJhbXMpXG4gICAgICAgIC5yZXN1bHQoKTtcbiAgICAgIGRlbGV0ZSBwcmVidWlsZFBhcmFtcy5yZWNpcGllbnRzO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy53YWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ocHJlYnVpbGRQYXJhbXMpO1xuICAgIC8vIGNvbXBhcmUgUEFZR28gZmVlc1xuICAgIGNvbnN0IG9yaWdpbmFsUGFyc2VkVHJhbnNhY3Rpb24gPSAoYXdhaXQgdGhpcy5iYXNlQ29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiBwcmVidWlsZFBhcmFtcyxcbiAgICAgIHdhbGxldDogdGhpcy53YWxsZXQsXG4gICAgICB0eFByZWJ1aWxkOiBvcmlnaW5hbFByZWJ1aWxkLFxuICAgIH0pKSBhcyBhbnk7XG4gICAgY29uc3QgcmVjcmVhdGVkUGFyc2VkVHJhbnNhY3Rpb24gPSAoYXdhaXQgdGhpcy5iYXNlQ29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiBwcmVidWlsZFBhcmFtcyxcbiAgICAgIHdhbGxldDogdGhpcy53YWxsZXQsXG4gICAgICB0eFByZWJ1aWxkOiBzaWduZWRUcmFuc2FjdGlvbixcbiAgICB9KSkgYXMgYW55O1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocmVjcmVhdGVkUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSkge1xuICAgICAgcmV0dXJuIHNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiByZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgIT09ICdiaWdpbnQnICYmXG4gICAgICAhXy5pc0Zpbml0ZShyZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltcGxpY2l0IGV4dGVybmFsIHNwZW5kIGFtb3VudCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCcpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhXy5pc1VuZGVmaW5lZChvcmlnaW5hbFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCkgJiZcbiAgICAgIHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCA+IG9yaWdpbmFsUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50XG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlY3JlYXRlZCB0cmFuc2FjdGlvbiBpcyB1c2luZyBhIGhpZ2hlciBwYXktYXMteW91LWdvLWZlZScpO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmVkVHJhbnNhY3Rpb247XG4gIH1cbn1cbiJdfQ==
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ0FwcHJvdmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3BlbmRpbmdBcHByb3ZhbC9wZW5kaW5nQXBwcm92YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwwQ0FBNEI7QUFDNUIsOERBQWdEO0FBR2hELHdEQVE0QjtBQUM1QixvQ0FBeUM7QUFFekMsdURBQW9EO0FBR3BELCtEQUE0QztBQUM1Qyw4Q0FBaUU7QUFlakUsTUFBYSxlQUFlO0lBTzFCLFlBQVksS0FBZ0IsRUFBRSxRQUFtQixFQUFFLG1CQUF3QyxFQUFFLE1BQWdCO1FBQzNHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSx1QkFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDekUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxrQkFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDcEUsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixJ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QUFNLENBQUMsRUFBRSxFQUFFLEtBQUssa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxzQkFBSSxDQUFDLHdCQUF3QjtnQkFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO2dCQUN6RixDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7Z0JBQ3BGLENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztDQUNGO0FBcGJELDBDQW9iQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgSUJhc2VDb2luIH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7XG4gIEFwcHJvdmVPcHRpb25zLFxuICBJUGVuZGluZ0FwcHJvdmFsLFxuICBPd25lclR5cGUsXG4gIFBlbmRpbmdBcHByb3ZhbERhdGEsXG4gIFBlbmRpbmdBcHByb3ZhbEluZm8sXG4gIFN0YXRlLFxuICBUeXBlLFxufSBmcm9tICcuLi9wZW5kaW5nQXBwcm92YWwnO1xuaW1wb3J0IHsgUmVxdWVzdFRyYWNlciB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IElXYWxsZXQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgQnVpbGRQYXJhbXMgfSBmcm9tICcuLi93YWxsZXQvQnVpbGRQYXJhbXMnO1xuaW1wb3J0IHsgSVJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi8uLi9hcGknO1xuaW1wb3J0IEJhc2VUc3NVdGlscyBmcm9tICcuLi91dGlscy90c3MvYmFzZVRTU1V0aWxzJztcbmltcG9ydCBFZGRzYVV0aWxzIGZyb20gJy4uL3V0aWxzL3Rzcy9lZGRzYSc7XG5pbXBvcnQgeyBFY2RzYU1QQ3YyVXRpbHMsIEVjZHNhVXRpbHMgfSBmcm9tICcuLi91dGlscy90c3MvZWNkc2EnO1xuaW1wb3J0IHsgS2V5U2hhcmUgYXMgRWNkc2FLZXlTaGFyZSB9IGZyb20gJy4uL3V0aWxzL3Rzcy9lY2RzYS90eXBlcyc7XG5pbXBvcnQgeyBLZXlTaGFyZSBhcyBFZGRzYUtleVNoYXJlIH0gZnJvbSAnLi4vdXRpbHMvdHNzL2VkZHNhL3R5cGVzJztcblxudHlwZSBQcmVBcHByb3ZlUmVzdWx0ID0ge1xuICB0eEhleDogc3RyaW5nO1xuICBoYWxmU2lnbmVkPzogc3RyaW5nO1xufTtcblxudHlwZSBBcHByb3ZlUGVuZGluZ0FwcHJvdmFsUmVxdWVzdEJvZHkgPSB7XG4gIHN0YXRlOiAnYXBwcm92ZWQnO1xuICBvdHA6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGFsZlNpZ25lZD86IHN0cmluZyB8IE9taXQ8UHJlQXBwcm92ZVJlc3VsdCwgJ2hhbGZTaWduZWQnPjtcbn07XG5cbmV4cG9ydCBjbGFzcyBQZW5kaW5nQXBwcm92YWwgaW1wbGVtZW50cyBJUGVuZGluZ0FwcHJvdmFsIHtcbiAgcHJpdmF0ZSByZWFkb25seSBiaXRnbzogQml0R29CYXNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VDb2luOiBJQmFzZUNvaW47XG4gIHByaXZhdGUgdHNzVXRpbHM/OiBCYXNlVHNzVXRpbHM8RWNkc2FLZXlTaGFyZSB8IEVkZHNhS2V5U2hhcmU+O1xuICBwcml2YXRlIHdhbGxldD86IElXYWxsZXQ7XG4gIHByaXZhdGUgX3BlbmRpbmdBcHByb3ZhbDogUGVuZGluZ0FwcHJvdmFsRGF0YTtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luLCBwZW5kaW5nQXBwcm92YWxEYXRhOiBQZW5kaW5nQXBwcm92YWxEYXRhLCB3YWxsZXQ/OiBJV2FsbGV0KSB7XG4gICAgdGhpcy5iaXRnbyA9IGJpdGdvO1xuICAgIHRoaXMuYmFzZUNvaW4gPSBiYXNlQ29pbjtcbiAgICB0aGlzLndhbGxldCA9IHdhbGxldDtcblxuICAgIGlmICh0aGlzLmJhc2VDb2luLnN1cHBvcnRzVHNzKCkpIHtcbiAgICAgIGlmICh0aGlzLmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpID09PSAnZWNkc2EnKSB7XG4gICAgICAgIGlmICh0aGlzLndhbGxldD8ubXVsdGlzaWdUeXBlVmVyc2lvbigpID09PSAnTVBDdjInKSB7XG4gICAgICAgICAgdGhpcy50c3NVdGlscyA9IG5ldyBFY2RzYU1QQ3YyVXRpbHModGhpcy5iaXRnbywgdGhpcy5iYXNlQ29pbiwgd2FsbGV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRzc1V0aWxzID0gbmV3IEVjZHNhVXRpbHModGhpcy5iaXRnbywgdGhpcy5iYXNlQ29pbiwgd2FsbGV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50c3NVdGlscyA9IG5ldyBFZGRzYVV0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4sIHdhbGxldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcGVuZGluZ0FwcHJvdmFsID0gcGVuZGluZ0FwcHJvdmFsRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkIGZvciB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmlkO1xuICB9XG5cbiAgdG9KU09OKCk6IFBlbmRpbmdBcHByb3ZhbERhdGEge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvd25lciB0eXBlICh3YWxsZXQgb3IgZW50ZXJwcmlzZSlcbiAgICogUGVuZGluZyBhcHByb3ZhbHMgY2FuIGJlIGFwcHJvdmVkIG9yIG1vZGlmaWVkIGJ5IGRpZmZlcmVudCBzY29wZXMgKGRlcGVuZGluZyBvbiBob3cgdGhleSB3ZXJlIGNyZWF0ZWQpXG4gICAqIElmIGEgcGVuZGluZyBhcHByb3ZhbCBpcyBvd25lZCBieSBhIHdhbGxldCwgdGhlbiBpdCBjYW4gYmUgYXBwcm92ZWQgYnkgYWRtaW5pc3RyYXRvcnMgb2YgdGhlIHdhbGxldFxuICAgKiBJZiBhIHBlbmRpbmcgYXBwcm92YWwgaXMgb3duZWQgYnkgYW4gZW50ZXJwcmlzZSwgdGhlbiBpdCBjYW4gYmUgYXBwcm92ZWQgYnkgYWRtaW5pc3RyYXRvcnMgb2YgdGhlIGVudGVycHJpc2VcbiAgICovXG4gIG93bmVyVHlwZSgpOiBPd25lclR5cGUge1xuICAgIGlmICh0aGlzLl9wZW5kaW5nQXBwcm92YWwud2FsbGV0KSB7XG4gICAgICByZXR1cm4gT3duZXJUeXBlLldBTExFVDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5lbnRlcnByaXNlKSB7XG4gICAgICByZXR1cm4gT3duZXJUeXBlLkVOVEVSUFJJU0U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBwZW5kaW5nIGFwcHJvdmFsIG93bmVyOiBuZWl0aGVyIHdhbGxldCBub3IgZW50ZXJwcmlzZSB3YXMgcHJlc2VudCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkIG9mIHRoZSB3YWxsZXQgd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICB3YWxsZXRJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwud2FsbGV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZW50ZXJwcmlzZSBJRCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgZW50ZXJwcmlzZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5lbnRlcnByaXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RhdGUgb2YgdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIHN0YXRlKCk6IFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLnN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaWQgb2YgdGhlIHVzZXIgdGhhdCBwZXJmb3JtZWQgdGhlIGFjdGlvbiByZXN1bHRpbmcgaW4gdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIGNyZWF0b3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmNyZWF0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0eXBlIG9mIHRoZSBwZW5kaW5nIGFwcHJvdmFsICh3aGF0IGl0IGFwcHJvdmVzKVxuICAgKi9cbiAgdHlwZSgpOiBUeXBlIHtcbiAgICBpZiAoIXRoaXMuX3BlbmRpbmdBcHByb3ZhbC5pbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlbmRpbmcgYXBwcm92YWwgaW5mbyBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5pbmZvLnR5cGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBpbmZvKCk6IFBlbmRpbmdBcHByb3ZhbEluZm8ge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuaW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlciBvZiBhcHByb3ZhbHMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgUGVuZGluZ0FwcHJvdmFsIHRvIGJlIGFwcHJvdmVkLlxuICAgKiBEZWZhdWx0cyB0byAxIGlmIGFwcHJvdmFsc1JlcXVpcmVkIGRvZXNuJ3QgZXhpc3Qgb24gdGhlIG9iamVjdFxuICAgKi9cbiAgYXBwcm92YWxzUmVxdWlyZWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmFwcHJvdmFsc1JlcXVpcmVkIHx8IDE7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSB1cmwgZm9yIHRoaXMgUGVuZGluZ0FwcHJvdmFsIGZvciBtYWtpbmcgcmVxdWVzdHMgdG8gdGhlIHNlcnZlci5cbiAgICogQHBhcmFtIGV4dHJhXG4gICAqL1xuICB1cmwoZXh0cmEgPSAnJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZUNvaW4udXJsKCcvcGVuZGluZ2FwcHJvdmFscy8nICsgdGhpcy5pZCgpICsgZXh0cmEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmV0Y2hlcyB0aGlzIFBlbmRpbmdBcHByb3ZhbCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHJldHVybnMgaXQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIG11dGF0ZXMgdGhlIFBlbmRpbmdBcHByb3ZhbCBvYmplY3QgaW4gcGxhY2UuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGdldChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPiA9IHt9KTogUHJvbWlzZTxQZW5kaW5nQXBwcm92YWw+IHtcbiAgICB0aGlzLl9wZW5kaW5nQXBwcm92YWwgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgpKS5yZXN1bHQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgUGVuZGluZ0FwcHJvdmFsIHRvIGFuIGFwcHJvdmVkIHN0YXRlXG4gICAqL1xuICBhc3luYyBhcHByb3ZlKHBhcmFtczogQXBwcm92ZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgcGFyYW1zLnByZXZpZXdQZW5kaW5nVHhzID0gdHJ1ZTtcbiAgICBwYXJhbXMucGVuZGluZ0FwcHJvdmFsSWQgPSB0aGlzLmlkKCk7XG4gICAgY29uc3QgY2FuUmVjcmVhdGVUcmFuc2FjdGlvbiA9IHRoaXMuY2FuUmVjcmVhdGVUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgIGF3YWl0IHRoaXMucG9wdWxhdGVXYWxsZXQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMucHJlQXBwcm92ZShwYXJhbXMsIHJlcUlkKTtcblxuICAgICAgY29uc3QgYXBwcm92YWxQYXJhbXM6IEFwcHJvdmVQZW5kaW5nQXBwcm92YWxSZXF1ZXN0Qm9keSA9IHsgc3RhdGU6ICdhcHByb3ZlZCcsIG90cDogcGFyYW1zLm90cCB9O1xuICAgICAgaWYgKHRyYW5zYWN0aW9uKSB7XG4gICAgICAgIC8vIGlmIHRoZSB0cmFuc2FjdGlvbiBhbHJlYWR5IGhhcyBhIGhhbGYgc2lnbmVkIHByb3BlcnR5LCB3ZSB0YWtlIHRoYXQgZGlyZWN0bHlcbiAgICAgICAgYXBwcm92YWxQYXJhbXMuaGFsZlNpZ25lZCA9IHRyYW5zYWN0aW9uLmhhbGZTaWduZWQgfHwgdHJhbnNhY3Rpb247XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28ucHV0KHRoaXMudXJsKCkpLnNlbmQoYXBwcm92YWxQYXJhbXMpLnJlc3VsdCgpO1xuXG4gICAgICAvLyBpZiB0aGUgcmVzcG9uc2UgY29tZXMgd2l0aCBhbiBlcnJvciwgbWVhbnMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gdHJpZ2dlcmVkIGFub3RoZXIgY29uZGl0aW9uXG4gICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgcmVzcG9uc2UuaGFzT3duUHJvcGVydHkoJ3BlbmRpbmdBcHByb3ZhbCcpKSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGVuZGluZ0FwcHJvdmFsID0gcmVzcG9uc2U7XG4gICAgICBhd2FpdCB0aGlzLnBvc3RBcHByb3ZlKHBhcmFtcywgcmVxSWQpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWNhblJlY3JlYXRlVHJhbnNhY3Rpb24gJiZcbiAgICAgICAgKGUubWVzc2FnZS5pbmRleE9mKCdjb3VsZCBub3QgZmluZCB1bnNwZW50IG91dHB1dCBmb3IgaW5wdXQnKSAhPT0gLTEgfHxcbiAgICAgICAgICBlLm1lc3NhZ2UuaW5kZXhPZigndHJhbnNhY3Rpb24gY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgdHJhbnNhY3Rpb24gaW4gdGhlIHNlbmQgcXVldWUnKSAhPT0gLTEpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnNwZW50cyBleHBpcmVkLCB3YWxsZXQgcGFzc3BocmFzZSBvciB4cHJ2IHJlcXVpcmVkIHRvIHJlY3JlYXRlIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgUGVuZGluZ0FwcHJvdmFsIHRvIGEgcmVqZWN0ZWQgc3RhdGVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgcmVqZWN0KHBhcmFtczogUmVjb3JkPHN0cmluZywgbmV2ZXI+ID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvLnB1dCh0aGlzLnVybCgpKS5zZW5kKHsgc3RhdGU6ICdyZWplY3RlZCcgfSkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQWxpYXMgZm9yIFBlbmRpbmdBcHByb3ZhbC5yZWplY3QoKVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBjYW5jZWwocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmVqZWN0KHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGUgYW5kIHNpZ24gVFNTIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7QXBwcm92ZU9wdGlvbnN9IHBhcmFtcyBuZWVkZWQgdG8gZ2V0IHR4cyBhbmQgdXNlIHRoZSB3YWxsZXRQYXNzcGhyYXNlIHRvIHRzcyBzaWduXG4gICAqIEBwYXJhbSB7UmVxdWVzdFRyYWNlcn0gcmVxSWQgaWQgdHJhY2VyLlxuICAgKi9cbiAgYXN5bmMgcmVjcmVhdGVBbmRTaWduVFNTVHJhbnNhY3Rpb24ocGFyYW1zOiBBcHByb3ZlT3B0aW9ucywgcmVxSWQ6IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTx7IHR4SGV4OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgd2FsbGV0UGFzc3BocmFzZSB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHR4UmVxdWVzdElkID0gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLnR4UmVxdWVzdElkO1xuXG4gICAgaWYgKCF0aGlzLndhbGxldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXYWxsZXQgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKCF3YWxsZXRQYXNzcGhyYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhbGxldFBhc3NwaHJhc2Ugbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eFJlcXVlc3RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eFJlcXVlc3RJZCBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRQcnYgPSBhd2FpdCB0aGlzLndhbGxldC5nZXRQcnYoeyB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IHRoaXMudHNzVXRpbHMhLnJlY3JlYXRlVHhSZXF1ZXN0KHR4UmVxdWVzdElkLCBkZWNyeXB0ZWRQcnYsIHJlcUlkKTtcbiAgICBpZiAodHhSZXF1ZXN0LmFwaVZlcnNpb24gPT09ICdsaXRlJykge1xuICAgICAgaWYgKCF0eFJlcXVlc3QudW5zaWduZWRUeHMgfHwgdHhSZXF1ZXN0LnVuc2lnbmVkVHhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IsIG5vIHRyYW5zYWN0aW9ucyBmb3VuZCBpbiB0eFJlcXVlc3QuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eEhleDogdHhSZXF1ZXN0LnVuc2lnbmVkVHhzWzBdLnNlcmlhbGl6ZWRUeEhleCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyB8fCB0eFJlcXVlc3QudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IsIG5vIHRyYW5zYWN0aW9ucyBmb3VuZCBpbiB0eFJlcXVlc3QuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eEhleDogdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnNlcmlhbGl6ZWRUeEhleCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlIGEgdHJhbnNhY3Rpb24gZm9yIGEgcGVuZGluZyBhcHByb3ZhbCB0byByZXNwb25kIHRvIHVwZGF0ZWQgbmV0d29yayBjb25kaXRpb25zXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHJlcUlkXG4gICAqL1xuICBhc3luYyByZWNyZWF0ZUFuZFNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IGFueSA9IHt9LCByZXFJZD86IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyB0aGlzIG1ldGhvZCBvbmx5IG1ha2VzIHNlbnNlIHdpdGggZXhpc3RpbmcgdHJhbnNhY3Rpb24gcmVxdWVzdHNcbiAgICBjb25zdCB0cmFuc2FjdGlvblJlcXVlc3QgPSB0aGlzLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3Q7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodHJhbnNhY3Rpb25SZXF1ZXN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgcmVjcmVhdGUgdHJhbnNhY3Rpb24gd2l0aG91dCB0cmFuc2FjdGlvbiByZXF1ZXN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy53YWxsZXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCByZWNyZWF0ZSB0cmFuc2FjdGlvbiB3aXRob3V0IHdhbGxldCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsUHJlYnVpbGQgPSB0cmFuc2FjdGlvblJlcXVlc3QuY29pblNwZWNpZmljW3RoaXMuYmFzZUNvaW4udHlwZV07XG5cbiAgICBjb25zdCByZWNpcGllbnRzID0gdHJhbnNhY3Rpb25SZXF1ZXN0LnJlY2lwaWVudHM7XG4gICAgbGV0IHByZWJ1aWxkUGFyYW1zID0gXy5leHRlbmQoe30sIHBhcmFtcywgeyByZWNpcGllbnRzOiByZWNpcGllbnRzIH0sIHRyYW5zYWN0aW9uUmVxdWVzdC5idWlsZFBhcmFtcyk7XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQob3JpZ2luYWxQcmVidWlsZC5ob3BUcmFuc2FjdGlvbikpIHtcbiAgICAgIHByZWJ1aWxkUGFyYW1zLmhvcCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxVHJhY2VyID0gcmVxSWQgfHwgbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICBpZiAodHJhbnNhY3Rpb25SZXF1ZXN0LmJ1aWxkUGFyYW1zICYmIHRyYW5zYWN0aW9uUmVxdWVzdC5idWlsZFBhcmFtcy50eXBlID09PSAnY29uc29saWRhdGUnKSB7XG4gICAgICAvLyBjb25zb2xpZGF0ZSB0YWcgaXMgaW4gdGhlIGJ1aWxkIHBhcmFtcyAtIHRoaXMgaXMgYSBjb25zb2xpZGF0aW9uIHRyYW5zYWN0aW9uLCBzb1xuICAgICAgLy8gaXQgbmVlZHMgdG8gYmUgcmVidWlsdCB1c2luZyB0aGUgc3BlY2lhbCBjb25zb2xpZGF0aW9uIGJ1aWxkIHJvdXRlXG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgICAgIHByZWJ1aWxkUGFyYW1zLnByZWJ1aWxkVHggPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAgIC5wb3N0KHRoaXMud2FsbGV0LnVybChgL2NvbnNvbGlkYXRlVW5zcGVudHNgKSlcbiAgICAgICAgLnNlbmQoQnVpbGRQYXJhbXMuZW5jb2RlKHByZWJ1aWxkUGFyYW1zKSlcbiAgICAgICAgLnJlc3VsdCgpO1xuICAgICAgZGVsZXRlIHByZWJ1aWxkUGFyYW1zLnJlY2lwaWVudHM7XG4gICAgfVxuXG4gICAgcHJlYnVpbGRQYXJhbXMgPSBfLmV4dGVuZCh7fSwgcHJlYnVpbGRQYXJhbXMsIHsgcmVxSWQ6IHJlcUlkIH0pO1xuICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy53YWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ocHJlYnVpbGRQYXJhbXMpO1xuICAgIC8vIGNvbXBhcmUgUEFZR28gZmVlc1xuICAgIGNvbnN0IG9yaWdpbmFsUGFyc2VkVHJhbnNhY3Rpb24gPSAoYXdhaXQgdGhpcy5iYXNlQ29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiBwcmVidWlsZFBhcmFtcyxcbiAgICAgIHdhbGxldDogdGhpcy53YWxsZXQsXG4gICAgICB0eFByZWJ1aWxkOiBvcmlnaW5hbFByZWJ1aWxkLFxuICAgIH0pKSBhcyBhbnk7XG4gICAgY29uc3QgcmVjcmVhdGVkUGFyc2VkVHJhbnNhY3Rpb24gPSAoYXdhaXQgdGhpcy5iYXNlQ29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiBwcmVidWlsZFBhcmFtcyxcbiAgICAgIHdhbGxldDogdGhpcy53YWxsZXQsXG4gICAgICB0eFByZWJ1aWxkOiBzaWduZWRUcmFuc2FjdGlvbixcbiAgICB9KSkgYXMgYW55O1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocmVjcmVhdGVkUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSkge1xuICAgICAgcmV0dXJuIHNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiByZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgIT09ICdiaWdpbnQnICYmXG4gICAgICAhXy5pc0Zpbml0ZShyZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltcGxpY2l0IGV4dGVybmFsIHNwZW5kIGFtb3VudCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCcpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhXy5pc1VuZGVmaW5lZChvcmlnaW5hbFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCkgJiZcbiAgICAgIHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCA+IG9yaWdpbmFsUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50XG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlY3JlYXRlZCB0cmFuc2FjdGlvbiBpcyB1c2luZyBhIGhpZ2hlciBwYXktYXMteW91LWdvLWZlZScpO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmVkVHJhbnNhY3Rpb247XG4gIH1cblxuICAvKlxuICAgKiBDb2xkIHdhbGxldHMgY2Fubm90IHJlY3JlYXRlIHRyYW5zYWN0aW9ucyBpZiB0aGUgb25seSB0aGluZyBwcm92aWRlZCBpcyB0aGUgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICpcbiAgICogVGhlIHRyYW5zYWN0aW9uIGNhbiBiZSByZWNyZWF0ZWQgaWYgZWl0aGVyXG4gICAqIOKAkyB0aGVyZSBpcyBhbiB4cHJ2XG4gICAqIOKAkyB0aGVyZSBpcyBhIHdhbGxldFBhc3NwaHJhc2UgYW5kIHRoZSB3YWxsZXQgaXMgbm90IGNvbGQgKGJlY2F1c2UgaWYgaXQncyBjb2xkLCB0aGUgcGFzc3BocmFzZSBpcyBvZiBsaXR0bGUgdXNlKVxuICAgKlxuICAgKiBUaGVyZWZvcmUsIGlmIG5laXRoZXIgb2YgdGhlc2UgaXMgdHJ1ZSwgdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBiZSByZWNyZWF0ZWQsIHdoaWNoIGlzIHJlZmxlY3RlZCBpbiB0aGUgaWZcbiAgICogc3RhdGVtZW50IGJlbG93LlxuICAgKi9cbiAgcHJpdmF0ZSBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKHBhcmFtczogQXBwcm92ZU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0NvbGRXYWxsZXQgPSAhIV8uZ2V0KHRoaXMud2FsbGV0LCAnX3dhbGxldC5pc0NvbGQnKTtcbiAgICBjb25zdCBpc09GQ1dhbGxldCA9IHRoaXMuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdvZmMnOyAvLyBPZmYtY2hhaW4gdHJhbnNhY3Rpb25zIGRvbid0IG5lZWQgdG8gYmUgcmVidWlsdFxuICAgIGlmICghcGFyYW1zLnhwcnYgJiYgIShwYXJhbXMud2FsbGV0UGFzc3BocmFzZSAmJiAhaXNDb2xkV2FsbGV0ICYmICFpc09GQ1dhbGxldCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcmVjaXBpZW50cywgdGhlbiB0aGUgdHJhbnNhY3Rpb24gY2Fubm90IGJlIHJlY3JlYXRlZFxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0aGlzLmluZm8oKT8udHJhbnNhY3Rpb25SZXF1ZXN0Py5idWlsZFBhcmFtcz8ucmVjaXBpZW50cyB8fCBbXTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5pbmZvKCk/LnRyYW5zYWN0aW9uUmVxdWVzdD8uYnVpbGRQYXJhbXM/LnR5cGU7XG5cbiAgICAvLyBXZSBvbmx5IHdhbnQgdG8gbm90IHJlY3JlYXRlIHRyYW5zYWN0aW9ucyB3aXRoIG5vIHJlY2lwaWVudHMgaWYgaXQgaXMgYSBVVFhPIGNvaW4uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gIShcbiAgICAgIHV0eG9saWIuaXNWYWxpZE5ldHdvcmsoKHRoaXMuYmFzZUNvaW4gYXMgYW55KS5uZXR3b3JrKSAmJlxuICAgICAgcmVjaXBpZW50cy5sZW5ndGggPT09IDAgJiZcbiAgICAgIHR5cGUgIT09ICdjb25zb2xpZGF0ZSdcbiAgICApO1xuICB9XG5cbiAgLypcbiAgICogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiB3aGljaCBpcyBiZWluZyBhcHByb3ZlZC5cbiAgICogSWYgdGhpcyBQQSBpcyBvZiB0eXBlICd0cmFuc2FjdGlvblJlcXVlc3QnIHRoaXMgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcmVidWlsZCBhbmQgcmVzaWduIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0FwcHJvdmVPcHRpb25zfSBwYXJhbXNcbiAgICogQHBhcmFtIHtib29sZWFufSBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uIC1cbiAgICogQHBhcmFtIHtSZXF1ZXN0VHJhY2VyfSByZXFJZCBpZCB0cmFjZXJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcHJlQXBwcm92ZShwYXJhbXM6IEFwcHJvdmVPcHRpb25zID0ge30sIHJlcUlkOiBJUmVxdWVzdFRyYWNlcik6IFByb21pc2U8UHJlQXBwcm92ZVJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIFRyYW5zYWN0aW9uUmVxdWVzdExpdGUgb3IgTXVsdGlzaWcgdHgncyBtdXN0IHNpZ24gYmVmb3JlIHBlbmRpbmcgYXBwcm92YWwgaXMgYXBwcm92ZWRcbiAgICAvLyBSZS1zaWduZWQgdHggaXMgcHJvdmlkZWQgdG8gdGhlIHBlbmRpbmcgYXBwcm92YWwgYXBpXG4gICAgaWYgKHRoaXMudHlwZSgpID09PSBUeXBlLlRSQU5TQUNUSU9OX1JFUVVFU1QpIHtcbiAgICAgIC8qXG4gICAgICAgKiBJZiB0aGlzIGlzIGEgcmVxdWVzdCBmb3IgYXBwcm92aW5nIGEgdHJhbnNhY3Rpb24sIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgdXNlciBoYXMgYSBwcml2YXRlIGtleSB0byB0aGUgd2FsbGV0XG4gICAgICAgKiAoc29tZSBhZG1pbnMgbWF5IG5vdCBoYXZlIHRoZSBzcGVuZCBwZXJtaXNzaW9uKSwgdGhlIHRyYW5zYWN0aW9uIGNvdWxkIGVpdGhlciBiZSByZWJyb2FkY2FzdCBhcyBpcywgb3IgaXQgY291bGRcbiAgICAgICAqIGJlIHJlY29uc3RydWN0ZWQuIEl0IGlzIHByZWZlcmFibGUgdG8gcmVjb25zdHJ1Y3QgYSB0eCBpbiBvcmRlciB0byBhZGhlcmUgdG8gdGhlIGxhdGVzdCBuZXR3b3JrIGNvbmRpdGlvbnNcbiAgICAgICAqIHN1Y2ggYXMgbmV3ZXIgdW5zcGVudHMsIGRpZmZlcmVudCBmZWVzLCBvciBhIGhpZ2hlciBzZXF1ZW5jZSBpZFxuICAgICAgICovXG4gICAgICBpZiAocGFyYW1zLnR4KSB7XG4gICAgICAgIC8vIHRoZSBhcHByb3ZhbCB0eCB3YXMgcmVjb25zdHJ1Y3RlZCBhbmQgZXhwbGljaXRseSBzcGVjaWZpZWQgLSBwYXNzIGl0IHRocm91Z2hcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eEhleDogcGFyYW1zLnR4LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzIHVzZXIgbWF5IG5vdCBoYXZlIHNwZW5kaW5nIHByaXZpbGVnZXMgb3IgYSBwYXNzcGhyYXNlIG1heSBub3QgaGF2ZSBiZWVuIHBhc3NlZCBpblxuICAgICAgaWYgKCF0aGlzLmNhblJlY3JlYXRlVHJhbnNhY3Rpb24ocGFyYW1zKSkge1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgVHJhbnNhY3Rpb25SZXF1ZXN0LCB0aGVuIHRoZSB0eFJlcXVlc3QgYWxyZWFkeSBoYXMgdGhlIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nQXBwcm92YWwudHhSZXF1ZXN0SWQpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBNdWx0aVNpZywgdGhlbiB3ZSBuZWVkIHRvIGZldGNoIHRoZSBoYWxmIHNpZ25lZCB0eCB0byBwcm9wYWdhdGUgdG8gdGhlIGFwcHJvdmFsIEFQSVxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IF8uZ2V0KFxuICAgICAgICAgIHRoaXMuaW5mbygpLFxuICAgICAgICAgIGB0cmFuc2FjdGlvblJlcXVlc3QuY29pblNwZWNpZmljLiR7dGhpcy5iYXNlQ29pbi50eXBlfWBcbiAgICAgICAgKSBhcyBQcmVBcHByb3ZlUmVzdWx0O1xuICAgICAgICBpZiAoIV8uaXNPYmplY3QodHJhbnNhY3Rpb24pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGVyZSBpcyBuZWl0aGVyIGFuIG9yaWdpbmFsIHRyYW5zYWN0aW9uIG9iamVjdCBub3IgY2FuIGEgbmV3IG9uZSBiZSByZWNyZWF0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9wZW5kaW5nQXBwcm92YWwudHhSZXF1ZXN0SWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVjcmVhdGVBbmRTaWduVFNTVHJhbnNhY3Rpb24ocGFyYW1zLCByZXFJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWNyZWF0ZUFuZFNpZ25UcmFuc2FjdGlvbihwYXJhbXMsIHJlcUlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYW55IHBvc3QtYXBwcm92YWwgYWN0aW9ucy5cbiAgICogSWYgdHlwZSBpcyAndHJhbnNhY3Rpb25SZXF1ZXN0RnVsbCcsIHRoaXMgd2lsbCBzaWduIHRoZSB0eFJlcXVlc3RGdWxsIGlmIHBvc3NpYmxlXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHJlcUlkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBvc3RBcHByb3ZlKHBhcmFtczogQXBwcm92ZU9wdGlvbnMgPSB7fSwgcmVxSWQ6IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGUoKSkge1xuICAgICAgY2FzZSBUeXBlLlRSQU5TQUNUSU9OX1JFUVVFU1RfRlVMTDpcbiAgICAgICAgLy8gVHJhbnNhY3Rpb25SZXF1ZXN0RnVsbCBmb3IgU01IIG9yIFNNQyB3YWxsZXRzIGNhbiBvbmx5IGJlIHNpZ25lZCBhZnRlciBwZW5kaW5nIGFwcHJvdmFsIGlzIGFwcHJvdmVkXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl9wZW5kaW5nQXBwcm92YWwuc3RhdGUgPT09IFN0YXRlLkFQUFJPVkVEICYmXG4gICAgICAgICAgdGhpcy5jYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKHBhcmFtcykgJiZcbiAgICAgICAgICB0aGlzLmJhc2VDb2luLnN1cHBvcnRzVHNzKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZUFuZFNpZ25UU1NUcmFuc2FjdGlvbihwYXJhbXMsIHJlcUlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgc2VsZi53YWxsZXQgaXMgc2V0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBvcHVsYXRlV2FsbGV0KCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMud2FsbGV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRPRE8oV1AtMTM0MSk6IGNvbnNvbGlkYXRlL3NpbXBsaWZ5IHRoaXMgbG9naWNcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSgpKSB7XG4gICAgICBjYXNlIFR5cGUuVFJBTlNBQ1RJT05fUkVRVUVTVDpcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0ID0gdGhpcy5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0O1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0cmFuc2FjdGlvblJlcXVlc3QpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBwcm9wZXJ0eSB0cmFuc2FjdGlvblJlcXVlc3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRXYWxsZXQ6IElXYWxsZXQgPSBhd2FpdCB0aGlzLmJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogdHJhbnNhY3Rpb25SZXF1ZXN0LnNvdXJjZVdhbGxldCB9KTtcblxuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh1cGRhdGVkV2FsbGV0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCAtIHVuYWJsZSB0byBnZXQgd2FsbGV0IHVzaW5nIHNvdXJjZXdhbGxldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YWxsZXQgPSB1cGRhdGVkV2FsbGV0O1xuXG4gICAgICAgIGlmICh0aGlzLndhbGxldC5pZCgpICE9PSB0cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNvdXJjZSB3YWxsZXQgZm9yIHBlbmRpbmcgYXBwcm92YWwnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHlwZS5UUkFOU0FDVElPTl9SRVFVRVNUX0ZVTEw6XG4gICAgICAgIGNvbnN0IHdhbGxldElkID0gdGhpcy53YWxsZXRJZCgpO1xuICAgICAgICBpZiAoIXdhbGxldElkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVycm9yLCBwZW5kaW5nQXBwcm92YWwud2FsbGV0IGlzIGV4cGVjdGVkIHRvIGJlIGRlZmluZWQhJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YWxsZXQgPSBhd2FpdCB0aGlzLmJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogdGhpcy53YWxsZXRJZCgpIH0pO1xuICAgICAgICBpZiAoIXRoaXMud2FsbGV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIC0gdW5hYmxlIHRvIGdldCB3YWxsZXQgdXNpbmcgcGVuZGluZ0FwcHJvdmFsLndhbGxldCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
36
  exports.PendingApprovals = void 0;
23
37
  /**
@@ -73,4 +87,4 @@ class PendingApprovals {
73
87
  }
74
88
  }
75
89
  exports.PendingApprovals = PendingApprovals;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ0FwcHJvdmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9wZW5kaW5nQXBwcm92YWwvcGVuZGluZ0FwcHJvdmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwwQ0FBNEI7QUFDNUIscURBQXVDO0FBR3ZDLHdEQU00QjtBQUU1QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUU1RCxNQUFhLGdCQUFnQjtJQUkzQixZQUFZLEtBQWdCLEVBQUUsUUFBbUI7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBc0MsRUFBRTtRQUNqRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLFdBQVcsR0FBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMvQixXQUFXLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ25DLFdBQVcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztTQUM5QztRQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztTQUNuRztRQUVELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFRLENBQUM7UUFDL0csSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQy9DLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUNyRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFvQyxFQUFFO1FBQzlDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFMUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFRLENBQUM7UUFDakgsSUFBSSxjQUFjLENBQUM7UUFDbkIsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLElBQUk7Z0JBQ0YsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7YUFDakY7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixzR0FBc0c7Z0JBQ3RHLEtBQUssQ0FBQyw0REFBNEQsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNyRztTQUNGO1FBQ0QsT0FBTyxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN0RixDQUFDO0NBQ0Y7QUFyREQsNENBcURDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgY29tbW9uIGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBJQmFzZUNvaW4gfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHtcbiAgR2V0UGVuZGluZ0FwcHJvdmFsT3B0aW9ucyxcbiAgSVBlbmRpbmdBcHByb3ZhbHMsXG4gIExpc3RQZW5kaW5nQXBwcm92YWxzT3B0aW9ucyxcbiAgTGlzdFBlbmRpbmdBcHByb3ZhbHNSZXN1bHQsXG4gIFBlbmRpbmdBcHByb3ZhbCxcbn0gZnJvbSAnLi4vcGVuZGluZ0FwcHJvdmFsJztcblxuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdiaXRnbzp2MjpwZW5kaW5nQXBwcm92YWxzJyk7XG5cbmV4cG9ydCBjbGFzcyBQZW5kaW5nQXBwcm92YWxzIGltcGxlbWVudHMgSVBlbmRpbmdBcHByb3ZhbHMge1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUNvaW46IElCYXNlQ29pbjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luKSB7XG4gICAgdGhpcy5iaXRnbyA9IGJpdGdvO1xuICAgIHRoaXMuYmFzZUNvaW4gPSBiYXNlQ29pbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IHRoZSBwZW5kaW5nIGFwcHJvdmFscyBhdmFpbGFibGUgdG8gdGhlIHVzZXJcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgbGlzdChwYXJhbXM6IExpc3RQZW5kaW5nQXBwcm92YWxzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxMaXN0UGVuZGluZ0FwcHJvdmFsc1Jlc3VsdD4ge1xuICAgIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3dhbGxldElkJywgJ2VudGVycHJpc2VJZCddKTtcbiAgICBjb25zdCBxdWVyeVBhcmFtczogYW55ID0ge307XG4gICAgaWYgKF8uaXNTdHJpbmcocGFyYW1zLndhbGxldElkKSkge1xuICAgICAgcXVlcnlQYXJhbXMud2FsbGV0SWQgPSBwYXJhbXMud2FsbGV0SWQ7XG4gICAgfVxuICAgIGlmIChfLmlzU3RyaW5nKHBhcmFtcy5lbnRlcnByaXNlSWQpKSB7XG4gICAgICBxdWVyeVBhcmFtcy5lbnRlcnByaXNlID0gcGFyYW1zLmVudGVycHJpc2VJZDtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHByb3ZpZGUgZXhhY3RseSAxIG9mIHdhbGxldElkIG9yIGVudGVycHJpc2VJZCB0byBnZXQgcGVuZGluZyBhcHByb3ZhbHMgb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gKGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYmFzZUNvaW4udXJsKCcvcGVuZGluZ2FwcHJvdmFscycpKS5xdWVyeShxdWVyeVBhcmFtcykucmVzdWx0KCkpIGFzIGFueTtcbiAgICBib2R5LnBlbmRpbmdBcHByb3ZhbHMgPSBib2R5LnBlbmRpbmdBcHByb3ZhbHMubWFwKFxuICAgICAgKGN1cnJlbnRBcHByb3ZhbCkgPT4gbmV3IFBlbmRpbmdBcHByb3ZhbCh0aGlzLmJpdGdvLCB0aGlzLmJhc2VDb2luLCBjdXJyZW50QXBwcm92YWwpXG4gICAgKTtcbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbiBleGlzdGluZyBwZW5kaW5nIGFwcHJvdmFsXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGdldChwYXJhbXM6IEdldFBlbmRpbmdBcHByb3ZhbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8UGVuZGluZ0FwcHJvdmFsPiB7XG4gICAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWydpZCddLCBbXSk7XG5cbiAgICBjb25zdCBhcHByb3ZhbERhdGEgPSAoYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy5iYXNlQ29pbi51cmwoJy9wZW5kaW5nYXBwcm92YWxzLycgKyBwYXJhbXMuaWQpKS5yZXN1bHQoKSkgYXMgYW55O1xuICAgIGxldCBhcHByb3ZhbFdhbGxldDtcbiAgICBpZiAoYXBwcm92YWxEYXRhLndhbGxldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwcm92YWxXYWxsZXQgPSBhd2FpdCB0aGlzLmJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogYXBwcm92YWxEYXRhLndhbGxldCB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBiZSBkb25lIGhlcmUsIGFsdGhvdWdoIGl0J3MgcHJvYmFibHkgbm90ZXdvcnRoeSB0aGF0IGEgbm9uLWV4aXN0ZW50IHdhbGxldCBpcyByZWZlcmVuY2VkXG4gICAgICAgIGRlYnVnKCdmYWlsZWQgdG8gZ2V0IHdhbGxldCAlcywgcmVmZXJlbmNlZCBieSBwZW5kaW5nIGFwcHJvdmFsICVzJywgYXBwcm92YWxEYXRhLndhbGxldCwgcGFyYW1zLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQZW5kaW5nQXBwcm92YWwodGhpcy5iaXRnbywgdGhpcy5iYXNlQ29pbiwgYXBwcm92YWxEYXRhLCBhcHByb3ZhbFdhbGxldCk7XG4gIH1cbn1cbiJdfQ==
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ0FwcHJvdmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9wZW5kaW5nQXBwcm92YWwvcGVuZGluZ0FwcHJvdmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILDBDQUE0QjtBQUM1QixxREFBdUM7QUFHdkMsd0RBTTRCO0FBRTVCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBRTVELE1BQWEsZ0JBQWdCO0lBSTNCLFlBQVksS0FBZ0IsRUFBRSxRQUFtQjtRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFzQyxFQUFFO1FBQ2pELE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sV0FBVyxHQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDaEMsV0FBVyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDcEMsV0FBVyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQy9DLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztRQUNwRyxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQVEsQ0FBQztRQUMvRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FDL0MsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQ3JGLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQW9DLEVBQUU7UUFDOUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUxQyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQVEsQ0FBQztRQUNqSCxJQUFJLGNBQWMsQ0FBQztRQUNuQixJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUM7Z0JBQ0gsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEYsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsc0dBQXNHO2dCQUN0RyxLQUFLLENBQUMsNERBQTRELEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEcsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7Q0FDRjtBQXJERCw0Q0FxREMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IElCYXNlQ29pbiB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQge1xuICBHZXRQZW5kaW5nQXBwcm92YWxPcHRpb25zLFxuICBJUGVuZGluZ0FwcHJvdmFscyxcbiAgTGlzdFBlbmRpbmdBcHByb3ZhbHNPcHRpb25zLFxuICBMaXN0UGVuZGluZ0FwcHJvdmFsc1Jlc3VsdCxcbiAgUGVuZGluZ0FwcHJvdmFsLFxufSBmcm9tICcuLi9wZW5kaW5nQXBwcm92YWwnO1xuXG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ2JpdGdvOnYyOnBlbmRpbmdBcHByb3ZhbHMnKTtcblxuZXhwb3J0IGNsYXNzIFBlbmRpbmdBcHByb3ZhbHMgaW1wbGVtZW50cyBJUGVuZGluZ0FwcHJvdmFscyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlQ29pbjogSUJhc2VDb2luO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4pIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5iYXNlQ29pbiA9IGJhc2VDb2luO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgdGhlIHBlbmRpbmcgYXBwcm92YWxzIGF2YWlsYWJsZSB0byB0aGUgdXNlclxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBsaXN0KHBhcmFtczogTGlzdFBlbmRpbmdBcHByb3ZhbHNPcHRpb25zID0ge30pOiBQcm9taXNlPExpc3RQZW5kaW5nQXBwcm92YWxzUmVzdWx0PiB7XG4gICAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFsnd2FsbGV0SWQnLCAnZW50ZXJwcmlzZUlkJ10pO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fTtcbiAgICBpZiAoXy5pc1N0cmluZyhwYXJhbXMud2FsbGV0SWQpKSB7XG4gICAgICBxdWVyeVBhcmFtcy53YWxsZXRJZCA9IHBhcmFtcy53YWxsZXRJZDtcbiAgICB9XG4gICAgaWYgKF8uaXNTdHJpbmcocGFyYW1zLmVudGVycHJpc2VJZCkpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zLmVudGVycHJpc2UgPSBwYXJhbXMuZW50ZXJwcmlzZUlkO1xuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhxdWVyeVBhcmFtcykubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3QgcHJvdmlkZSBleGFjdGx5IDEgb2Ygd2FsbGV0SWQgb3IgZW50ZXJwcmlzZUlkIHRvIGdldCBwZW5kaW5nIGFwcHJvdmFscyBvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy5iYXNlQ29pbi51cmwoJy9wZW5kaW5nYXBwcm92YWxzJykpLnF1ZXJ5KHF1ZXJ5UGFyYW1zKS5yZXN1bHQoKSkgYXMgYW55O1xuICAgIGJvZHkucGVuZGluZ0FwcHJvdmFscyA9IGJvZHkucGVuZGluZ0FwcHJvdmFscy5tYXAoXG4gICAgICAoY3VycmVudEFwcHJvdmFsKSA9PiBuZXcgUGVuZGluZ0FwcHJvdmFsKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4sIGN1cnJlbnRBcHByb3ZhbClcbiAgICApO1xuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuIGV4aXN0aW5nIHBlbmRpbmcgYXBwcm92YWxcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZ2V0KHBhcmFtczogR2V0UGVuZGluZ0FwcHJvdmFsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxQZW5kaW5nQXBwcm92YWw+IHtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ2lkJ10sIFtdKTtcblxuICAgIGNvbnN0IGFwcHJvdmFsRGF0YSA9IChhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLmJhc2VDb2luLnVybCgnL3BlbmRpbmdhcHByb3ZhbHMvJyArIHBhcmFtcy5pZCkpLnJlc3VsdCgpKSBhcyBhbnk7XG4gICAgbGV0IGFwcHJvdmFsV2FsbGV0O1xuICAgIGlmIChhcHByb3ZhbERhdGEud2FsbGV0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBhcHByb3ZhbFdhbGxldCA9IGF3YWl0IHRoaXMuYmFzZUNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiBhcHByb3ZhbERhdGEud2FsbGV0IH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZSwgYWx0aG91Z2ggaXQncyBwcm9iYWJseSBub3Rld29ydGh5IHRoYXQgYSBub24tZXhpc3RlbnQgd2FsbGV0IGlzIHJlZmVyZW5jZWRcbiAgICAgICAgZGVidWcoJ2ZhaWxlZCB0byBnZXQgd2FsbGV0ICVzLCByZWZlcmVuY2VkIGJ5IHBlbmRpbmcgYXBwcm92YWwgJXMnLCBhcHByb3ZhbERhdGEud2FsbGV0LCBwYXJhbXMuaWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFBlbmRpbmdBcHByb3ZhbCh0aGlzLmJpdGdvLCB0aGlzLmJhc2VDb2luLCBhcHByb3ZhbERhdGEsIGFwcHJvdmFsV2FsbGV0KTtcbiAgfVxufVxuIl19
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,4 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
15
  };
12
16
  Object.defineProperty(exports, "__esModule", { value: true });
13
17
  __exportStar(require("./initiate"), exports);
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vcmVjb3ZlcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbml0aWF0ZSc7XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vcmVjb3ZlcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW5pdGlhdGUnO1xuIl19