@bitgo/abstract-utxo 12.6.0 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +7 -2
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +19 -34
  4. package/dist/cjs/src/address/fixedScript.d.ts +4 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +4 -3
  7. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  8. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  9. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -4
  10. package/dist/cjs/src/impl/bch/bch.d.ts +15 -1
  11. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  12. package/dist/cjs/src/impl/bch/bch.js +29 -5
  13. package/dist/cjs/src/impl/btc/index.d.ts +2 -0
  14. package/dist/cjs/src/impl/btc/index.d.ts.map +1 -1
  15. package/dist/cjs/src/impl/btc/index.js +3 -1
  16. package/dist/cjs/src/impl/btc/inscriptionBuilder.js +4 -4
  17. package/dist/cjs/src/impl/btc/tbtcstx.d.ts +10 -0
  18. package/dist/cjs/src/impl/btc/tbtcstx.d.ts.map +1 -0
  19. package/dist/cjs/src/impl/btc/tbtcstx.js +18 -0
  20. package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts +9 -0
  21. package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
  22. package/dist/cjs/src/impl/btc/tbtcstxprivate1.js +15 -0
  23. package/dist/cjs/src/impl/zec/address.d.ts +51 -0
  24. package/dist/cjs/src/impl/zec/address.d.ts.map +1 -1
  25. package/dist/cjs/src/impl/zec/address.js +103 -1
  26. package/dist/cjs/src/impl/zec/recipients.d.ts +4 -2
  27. package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -1
  28. package/dist/cjs/src/impl/zec/recipients.js +7 -3
  29. package/dist/cjs/src/impl/zec/types.d.ts +5 -2
  30. package/dist/cjs/src/impl/zec/types.d.ts.map +1 -1
  31. package/dist/cjs/src/impl/zec/types.js +1 -1
  32. package/dist/cjs/src/impl/zec/zec.d.ts +23 -2
  33. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  34. package/dist/cjs/src/impl/zec/zec.js +61 -2
  35. package/dist/cjs/src/names.d.ts +5 -2
  36. package/dist/cjs/src/names.d.ts.map +1 -1
  37. package/dist/cjs/src/names.js +19 -1
  38. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +2 -2
  39. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  40. package/dist/cjs/src/recovery/backupKeyRecovery.js +5 -5
  41. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  42. package/dist/cjs/src/recovery/crossChainRecovery.js +4 -4
  43. package/dist/cjs/src/transaction/decode.d.ts +2 -2
  44. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  45. package/dist/cjs/src/transaction/decode.js +3 -2
  46. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +2 -2
  47. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  48. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +6 -5
  49. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  50. package/dist/cjs/src/transaction/descriptor/parse.js +3 -4
  51. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  52. package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +2 -3
  53. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  54. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +2 -3
  55. package/dist/cjs/src/transaction/explainTransaction.d.ts +3 -2
  56. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  57. package/dist/cjs/src/transaction/explainTransaction.js +3 -2
  58. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  59. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  60. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +4 -1
  61. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  62. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +11 -5
  63. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +4 -4
  64. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  65. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +1 -1
  66. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -2
  67. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  68. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +1 -1
  69. package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -1
  70. package/dist/cjs/src/transaction/parseTransaction.js +2 -3
  71. package/dist/cjs/src/transaction/recipient.d.ts +30 -4
  72. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  73. package/dist/cjs/src/transaction/recipient.js +48 -9
  74. package/dist/cjs/src/transaction/signTransaction.js +2 -2
  75. package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -1
  76. package/dist/cjs/src/transaction/verifyTransaction.js +2 -3
  77. package/dist/cjs/test/unit/bip322.js +14 -4
  78. package/dist/cjs/test/unit/customChangeWallet.js +3 -1
  79. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
  80. package/dist/cjs/test/unit/descriptorAddress.js +24 -4
  81. package/dist/cjs/test/unit/impl/bch/unit/bch.js +9 -1
  82. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts +2 -0
  83. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts.map +1 -0
  84. package/dist/cjs/test/unit/impl/zec/psbtDecode.js +69 -0
  85. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts +2 -0
  86. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts.map +1 -0
  87. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.js +329 -0
  88. package/dist/cjs/test/unit/impl/zec/unit/address.js +162 -1
  89. package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.js +7 -5
  90. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +2 -2
  91. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +2 -2
  92. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +2 -2
  93. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
  94. package/dist/cjs/test/unit/recovery/mock.js +5 -3
  95. package/dist/cjs/test/unit/tbtcstx.d.ts +2 -0
  96. package/dist/cjs/test/unit/tbtcstx.d.ts.map +1 -0
  97. package/dist/cjs/test/unit/tbtcstx.js +60 -0
  98. package/dist/cjs/test/unit/tbtcstxprivate1.d.ts +2 -0
  99. package/dist/cjs/test/unit/tbtcstxprivate1.d.ts.map +1 -0
  100. package/dist/cjs/test/unit/tbtcstxprivate1.js +61 -0
  101. package/dist/cjs/test/unit/transaction/addressCodec.d.ts +2 -0
  102. package/dist/cjs/test/unit/transaction/addressCodec.d.ts.map +1 -0
  103. package/dist/cjs/test/unit/transaction/addressCodec.js +30 -0
  104. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +9 -1
  105. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -1
  106. package/dist/cjs/test/unit/transaction.js +2 -2
  107. package/dist/cjs/test/unit/util/address.d.ts +2 -1
  108. package/dist/cjs/test/unit/util/address.d.ts.map +1 -1
  109. package/dist/cjs/test/unit/util/address.js +3 -2
  110. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -1
  111. package/dist/cjs/test/unit/util/nockIndexerAPI.js +3 -4
  112. package/dist/cjs/test/unit/util/transaction.d.ts +1 -1
  113. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
  114. package/dist/cjs/test/unit/util/transaction.js +5 -4
  115. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  116. package/dist/cjs/test/unit/util/unspents.js +3 -3
  117. package/dist/cjs/test/unit/util/utxoCoins.d.ts +2 -2
  118. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
  119. package/dist/cjs/test/unit/util/utxoCoins.js +17 -33
  120. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  121. package/dist/esm/abstractUtxoCoin.d.ts +7 -2
  122. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  123. package/dist/esm/abstractUtxoCoin.js +21 -36
  124. package/dist/esm/address/fixedScript.d.ts +4 -4
  125. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  126. package/dist/esm/address/fixedScript.js +4 -3
  127. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  128. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  129. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -4
  130. package/dist/esm/impl/bch/bch.d.ts +15 -1
  131. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  132. package/dist/esm/impl/bch/bch.js +29 -5
  133. package/dist/esm/impl/btc/index.d.ts +2 -0
  134. package/dist/esm/impl/btc/index.d.ts.map +1 -1
  135. package/dist/esm/impl/btc/index.js +3 -1
  136. package/dist/esm/impl/btc/inscriptionBuilder.js +4 -4
  137. package/dist/esm/impl/btc/tbtcstx.d.ts +10 -0
  138. package/dist/esm/impl/btc/tbtcstx.d.ts.map +1 -0
  139. package/dist/esm/impl/btc/tbtcstx.js +14 -0
  140. package/dist/esm/impl/btc/tbtcstxprivate1.d.ts +9 -0
  141. package/dist/esm/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
  142. package/dist/esm/impl/btc/tbtcstxprivate1.js +11 -0
  143. package/dist/esm/impl/zec/address.d.ts +51 -0
  144. package/dist/esm/impl/zec/address.d.ts.map +1 -1
  145. package/dist/esm/impl/zec/address.js +102 -2
  146. package/dist/esm/impl/zec/recipients.d.ts +4 -2
  147. package/dist/esm/impl/zec/recipients.d.ts.map +1 -1
  148. package/dist/esm/impl/zec/recipients.js +7 -3
  149. package/dist/esm/impl/zec/types.d.ts +5 -2
  150. package/dist/esm/impl/zec/types.d.ts.map +1 -1
  151. package/dist/esm/impl/zec/types.js +1 -1
  152. package/dist/esm/impl/zec/zec.d.ts +23 -2
  153. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  154. package/dist/esm/impl/zec/zec.js +62 -3
  155. package/dist/esm/names.d.ts +5 -2
  156. package/dist/esm/names.d.ts.map +1 -1
  157. package/dist/esm/names.js +18 -1
  158. package/dist/esm/recovery/backupKeyRecovery.d.ts +2 -2
  159. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  160. package/dist/esm/recovery/backupKeyRecovery.js +6 -6
  161. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  162. package/dist/esm/recovery/crossChainRecovery.js +4 -4
  163. package/dist/esm/transaction/decode.d.ts +2 -2
  164. package/dist/esm/transaction/decode.d.ts.map +1 -1
  165. package/dist/esm/transaction/decode.js +3 -2
  166. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +2 -2
  167. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  168. package/dist/esm/transaction/descriptor/explainPsbt.js +6 -5
  169. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  170. package/dist/esm/transaction/descriptor/parse.js +3 -4
  171. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  172. package/dist/esm/transaction/descriptor/parseToAmountType.js +2 -3
  173. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  174. package/dist/esm/transaction/descriptor/verifyTransaction.js +2 -3
  175. package/dist/esm/transaction/explainTransaction.d.ts +3 -2
  176. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  177. package/dist/esm/transaction/explainTransaction.js +3 -2
  178. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  179. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  180. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +4 -1
  181. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  182. package/dist/esm/transaction/fixedScript/parseTransaction.js +11 -5
  183. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +4 -4
  184. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  185. package/dist/esm/transaction/fixedScript/replayProtection.js +1 -1
  186. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -2
  187. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  188. package/dist/esm/transaction/fixedScript/signTransaction.js +1 -1
  189. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -1
  190. package/dist/esm/transaction/parseTransaction.js +2 -3
  191. package/dist/esm/transaction/recipient.d.ts +30 -4
  192. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  193. package/dist/esm/transaction/recipient.js +48 -9
  194. package/dist/esm/transaction/signTransaction.js +2 -2
  195. package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -1
  196. package/dist/esm/transaction/verifyTransaction.js +2 -3
  197. package/package.json +6 -5
@@ -45,11 +45,12 @@ exports.createFullSignedTransaction = createFullSignedTransaction;
45
45
  const assert_1 = __importDefault(require("assert"));
46
46
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
47
47
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
48
+ const names_1 = require("../../../src/names");
48
49
  const utxoCoins_1 = require("./utxoCoins");
49
50
  const { isWalletUnspent, signInputWithUnspent } = utxolib.bitgo;
50
51
  function toTxOutput(u, network) {
51
52
  return {
52
- script: Buffer.from(wasm_utxo_1.address.toOutputScriptWithCoin(u.address, (0, utxoCoins_1.getCoinNameForNetwork)(network))),
53
+ script: Buffer.from(wasm_utxo_1.address.toOutputScriptWithCoin(u.address, (0, names_1.toWasmUtxoCoinName)((0, utxoCoins_1.getCoinNameForNetwork)(network)))),
53
54
  value: u.value,
54
55
  };
55
56
  }
@@ -60,8 +61,8 @@ function assertEqualParsedPsbt(a, b, coinName, walletKeys, replayProtection) {
60
61
  if (!(0, wasm_utxo_1.hasPsbtMagic)(b)) {
61
62
  throw new Error('b is not a psbt');
62
63
  }
63
- const aPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(a, coinName);
64
- const bPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(b, coinName);
64
+ const aPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(a, (0, names_1.toWasmUtxoCoinName)(coinName));
65
+ const bPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(b, (0, names_1.toWasmUtxoCoinName)(coinName));
65
66
  const aParsed = aPsbt.parseTransactionWithWalletKeys(walletKeys, {
66
67
  replayProtection: { publicKeys: replayProtection },
67
68
  });
@@ -128,4 +129,4 @@ function createFullSignedTransaction(network, unspents, outputAddress, signer, h
128
129
  }
129
130
  return createTransactionBuilderWithSignedInputs(network, unspents, new utxolib.bitgo.WalletUnspentSigner(signer.walletKeys, signer.cosigner, signer.signer), halfSigned).build();
130
131
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC90cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFDQSxzREFzQkM7QUFFRCw0Q0FpQkM7QUFFRCxrREFZQztBQUVELDhEQWlCQztBQW9CRCxrRUFXQztBQUVELGtFQWdCQztBQWhLRCxvREFBNEI7QUFFNUIseURBQTJDO0FBQzNDLGdEQUFtRztBQUtuRywyQ0FBb0Q7QUFDcEQsTUFBTSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFrQmhFLFNBQVMsVUFBVSxDQUNqQixDQUFtQixFQUNuQixPQUF3QjtJQUV4QixPQUFPO1FBQ0wsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUEsaUNBQXFCLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7S0FDZixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLHFCQUFxQixDQUNuQyxDQUFTLEVBQ1QsQ0FBUyxFQUNULFFBQXNCLEVBQ3RCLFVBQThCLEVBQzlCLGdCQUEwQjtJQUUxQixJQUFJLENBQUMsSUFBQSx3QkFBWSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxJQUFJLENBQUMsSUFBQSx3QkFBWSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyw2QkFBaUIsQ0FBQyxTQUFT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IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IEVDUGFpciwgZml4ZWRTY3JpcHRXYWxsZXQsIGhhc1BzYnRNYWdpYywgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgdHlwZSB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7IGdldENvaW5OYW1lRm9yTmV0d29yayB9IGZyb20gJy4vdXR4b0NvaW5zJztcbmNvbnN0IHsgaXNXYWxsZXRVbnNwZW50LCBzaWduSW5wdXRXaXRoVW5zcGVudCB9ID0gdXR4b2xpYi5iaXRnbztcbnR5cGUgVXR4b2xpYlJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cztcbnR5cGUgV2FzbVJvb3RXYWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbk9iaiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaGV4OiBzdHJpbmc7XG4gIGluczoge1xuICAgIHR4aWQ6IHN0cmluZztcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHNjcmlwdFNpZz86IHN0cmluZztcbiAgICB3aXRuZXNzPzogc3RyaW5nW107XG4gIH1bXTtcbiAgb3V0czoge1xuICAgIHNjcmlwdDogc3RyaW5nO1xuICAgIHZhbHVlOiBudW1iZXIgfCBzdHJpbmc7XG4gIH1bXTtcbn07XG5cbmZ1bmN0aW9uIHRvVHhPdXRwdXQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHU6IFVuc3BlbnQ8VE51bWJlcj4sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogdXR4b2xpYi5UeE91dHB1dDxUTnVtYmVyPiB7XG4gIHJldHVybiB7XG4gICAgc2NyaXB0OiBCdWZmZXIuZnJvbSh3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKHUuYWRkcmVzcywgZ2V0Q29pbk5hbWVGb3JOZXR3b3JrKG5ldHdvcmspKSksXG4gICAgdmFsdWU6IHUudmFsdWUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFcXVhbFBhcnNlZFBzYnQoXG4gIGE6IEJ1ZmZlcixcbiAgYjogQnVmZmVyLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICB3YWxsZXRLZXlzOiBXYXNtUm9vdFdhbGxldEtleXMsXG4gIHJlcGxheVByb3RlY3Rpb246IEVDUGFpcltdXG4pOiB2b2lkIHtcbiAgaWYgKCFoYXNQc2J0TWFnaWMoYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2EgaXMgbm90IGEgcHNidCcpO1xuICB9XG4gIGlmICghaGFzUHNidE1hZ2ljKGIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdiIGlzIG5vdCBhIHBzYnQnKTtcbiAgfVxuICBjb25zdCBhUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMoYSwgY29pbk5hbWUpO1xuICBjb25zdCBiUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMoYiwgY29pbk5hbWUpO1xuICBjb25zdCBhUGFyc2VkID0gYVBzYnQucGFyc2VUcmFuc2FjdGlvbldpdGhXYWxsZXRLZXlzKHdhbGxldEtleXMsIHtcbiAgICByZXBsYXlQcm90ZWN0aW9uOiB7IHB1YmxpY0tleXM6IHJlcGxheVByb3RlY3Rpb24gfSxcbiAgfSk7XG4gIGNvbnN0IGJQYXJzZWQgPSBiUHNidC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMod2FsbGV0S2V5cywge1xuICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogcmVwbGF5UHJvdGVjdGlvbiB9LFxuICB9KTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChhUGFyc2VkLCBiUGFyc2VkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uVG9PYmo8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogVHJhbnNhY3Rpb25PYmoge1xuICByZXR1cm4ge1xuICAgIGlkOiB0eC5nZXRJZCgpLFxuICAgIGhleDogdHgudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JyksXG4gICAgaW5zOiB0eC5pbnMubWFwKCh2KSA9PiAoe1xuICAgICAgdHhpZDogQnVmZmVyLmZyb20odi5oYXNoKS5yZXZlcnNlKCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgaW5kZXg6IHYuaW5kZXgsXG4gICAgICBzY3JpcHQ6IHYuc2NyaXB0Py50b1N0cmluZygnaGV4JyksXG4gICAgICB3aXRuZXNzOiB2LndpdG5lc3M/Lm1hcCgodikgPT4gdi50b1N0cmluZygnaGV4JykpLFxuICAgIH0pKSxcbiAgICBvdXRzOiB0eC5vdXRzLm1hcCgodikgPT4gKHtcbiAgICAgIHNjcmlwdDogdi5zY3JpcHQudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgdmFsdWU6IHR5cGVvZiB2LnZhbHVlID09PSAnYmlnaW50JyA/IHYudmFsdWUudG9TdHJpbmcoKSA6ICh2LnZhbHVlIGFzIG51bWJlciksXG4gICAgfSkpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25IZXhUb09iaihcbiAgdHhIZXg6IHN0cmluZyxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IFRyYW5zYWN0aW9uT2JqIHtcbiAgY29uc3Qgb2JqID0gdHJhbnNhY3Rpb25Ub09iaihcbiAgICB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihCdWZmZXIuZnJvbSh0eEhleCwgJ2hleCcpLCBuZXR3b3JrLCB7IGFtb3VudFR5cGUgfSlcbiAgKTtcbiAgaWYgKG9iai5oZXggIT09IHR4SGV4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzZXJpYWxpemVkIHR4SGV4IGRvZXMgbm90IG1hdGNoIGlucHV0YCk7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgb3V0cHV0QWRkcmVzczogc3RyaW5nXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIGNvbnN0IHR4YiA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRm9yTmV0d29yazxUTnVtYmVyPihuZXR3b3JrKTtcbiAgdW5zcGVudHMuZm9yRWFjaCgodSkgPT4ge1xuICAgIGNvbnN0IFt0eGlkLCB2aW5dID0gdS5pZC5zcGxpdCgnOicpO1xuICAgIHR4Yi5hZGRJbnB1dCh0eGlkLCBOdW1iZXIodmluKSk7XG4gIH0pO1xuICBjb25zdCBhbW91bnRUeXBlID0gdW5zcGVudHMubGVuZ3RoID4gMCAmJiB0eXBlb2YgdW5zcGVudHNbMF0udmFsdWUgPT09ICdiaWdpbnQnID8gJ2JpZ2ludCcgOiAnbnVtYmVyJztcbiAgaWYgKGFtb3VudFR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgdW5zcGVudHMuZm9yRWFjaCgodSkgPT4gKHUudmFsdWUgPSBNYXRoLnJvdW5kKHUudmFsdWUgYXMgbnVtYmVyKSBhcyBUTnVtYmVyKSk7XG4gIH1cbiAgY29uc3QgdW5zcGVudFN1bSA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bTxUTnVtYmVyPih1bnNwZW50cywgYW1vdW50VHlwZSk7XG4gIHR4Yi5hZGRPdXRwdXQob3V0cHV0QWRkcmVzcywgdXR4b2xpYi5iaXRnby50b1ROdW1iZXI8VE51bWJlcj4oQmlnSW50KHVuc3BlbnRTdW0pIC0gQmlnSW50KDEwMDApLCBhbW91bnRUeXBlKSk7XG4gIHJldHVybiB0eGIuYnVpbGRJbmNvbXBsZXRlKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlcldpdGhTaWduZWRJbnB1dHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgc2lnbmVyOiB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXI8VXR4b2xpYlJvb3RXYWxsZXRLZXlzPixcbiAgaW5wdXRUcmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj5cbik6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPiB7XG4gIGNvbnN0IHR4QnVpbGRlciA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRnJvbVRyYW5zYWN0aW9uPFROdW1iZXI+KFxuICAgIGlucHV0VHJhbnNhY3Rpb24sXG4gICAgdW5zcGVudHMubWFwKCh1KSA9PiB0b1R4T3V0cHV0PFROdW1iZXI+KHUsIG5ldHdvcmspKVxuICApO1xuICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgaWYgKGlzV2FsbGV0VW5zcGVudDxUTnVtYmVyPih1KSkge1xuICAgICAgc2lnbklucHV0V2l0aFVuc3BlbnQ8VE51bWJlcj4odHhCdWlsZGVyLCBpbnB1dEluZGV4LCB1LCBzaWduZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0eEJ1aWxkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgb3V0cHV0QWRkcmVzczogc3RyaW5nLFxuICBzaWduZXI6IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcjxVdHhvbGliUm9vdFdhbGxldEtleXM+LFxuICBwcmVidWlsZD86IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+XG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIGlmICghcHJlYnVpbGQpIHtcbiAgICBwcmVidWlsZCA9IGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb248VE51bWJlcj4obmV0d29yaywgdW5zcGVudHMsIG91dHB1dEFkZHJlc3MpO1xuICB9XG4gIHJldHVybiBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJXaXRoU2lnbmVkSW5wdXRzPFROdW1iZXI+KG5ldHdvcmssIHVuc3BlbnRzLCBzaWduZXIsIHByZWJ1aWxkKS5idWlsZEluY29tcGxldGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB1bnNwZW50czogVW5zcGVudDxUTnVtYmVyPltdLFxuICBvdXRwdXRBZGRyZXNzOiBzdHJpbmcsXG4gIHNpZ25lcjogdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50U2lnbmVyPFV0eG9saWJSb290V2FsbGV0S2V5cz4sXG4gIGhhbGZTaWduZWQ/OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBpZiAoIWhhbGZTaWduZWQpIHtcbiAgICBoYWxmU2lnbmVkID0gY3JlYXRlSGFsZlNpZ25lZFRyYW5zYWN0aW9uPFROdW1iZXI+KG5ldHdvcmssIHVuc3BlbnRzLCBvdXRwdXRBZGRyZXNzLCBzaWduZXIpO1xuICB9XG4gIHJldHVybiBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJXaXRoU2lnbmVkSW5wdXRzPFROdW1iZXI+KFxuICAgIG5ldHdvcmssXG4gICAgdW5zcGVudHMsXG4gICAgbmV3IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcihzaWduZXIud2FsbGV0S2V5cywgc2lnbmVyLmNvc2lnbmVyLCBzaWduZXIuc2lnbmVyKSxcbiAgICBoYWxmU2lnbmVkXG4gICkuYnVpbGQoKTtcbn1cbiJdfQ==
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC90cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVDQSxzREFzQkM7QUFFRCw0Q0FpQkM7QUFFRCxrREFZQztBQUVELDhEQWlCQztBQW9CRCxrRUFXQztBQUVELGtFQWdCQztBQWxLRCxvREFBNEI7QUFFNUIseURBQTJDO0FBQzNDLGdEQUFtRztBQUVuRyw4Q0FBMkU7QUFHM0UsMkNBQW9EO0FBQ3BELE1BQU0sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBa0JoRSxTQUFTLFVBQVUsQ0FDakIsQ0FBbUIsRUFDbkIsT0FBd0I7SUFFeEIsT0FBTztRQUNMLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUNqQixtQkFBVyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBQSwwQkFBa0IsRUFBQyxJQUFBLGlDQUFxQixFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDbEc7UUFDRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7S0FDZixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLHFCQUFxQixDQUNuQyxDQUFTLEVBQ1QsQ0FBUyxFQUNULFFBQXNCLEVBQ3RCLFVBQThCLEVBQzlCLGdCQUEwQjtJQUUxQixJQUFJLENBQUMsSUFBQSx3QkFBWSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxJQUFJLENBQUMsSUFBQSx3QkFBWSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFBLDBCQUFrQixFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckYsTUFBTSxLQUFLLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBQSwwQkFBa0IsRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxVQUFVLEVBQUU7UUFDL0QsZ0JBQWdCLEVBQUUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUU7S0FDbkQsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLDhCQUE4QixDQUFDLFVBQVUsRUFBRTtRQUMvRCxnQkFBZ0IsRUFBRSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRTtLQUNuRCxDQUFDLENBQUM7SUFDSCxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUM5QixFQUEwQztJQUUxQyxPQUFPO1FBQ0wsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUU7UUFDZCxHQUFHLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDbEMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ25ELEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztZQUNkLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xELENBQUMsQ0FBQztRQUNILElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2hDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUMsS0FBZ0I7U0FDOUUsQ0FBQyxDQUFDO0tBQ0osQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FDakMsS0FBYSxFQUNiLE9BQXdCLEVBQ3hCLGFBQWtDLFFBQVE7SUFFMUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FDOUYsQ0FBQztJQUNGLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQWdCLHlCQUF5QixDQUN2QyxPQUF3QixFQUN4QixRQUE0QixFQUM1QixhQUFxQjtJQUVyQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFVLE9BQU8sQ0FBQyxDQUFDO0lBQy9FLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNyQixNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDdEcsSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQWUsQ0FBWSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQVUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFVLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM5RyxPQUFPLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBUyx3Q0FBd0MsQ0FDL0MsT0FBd0IsRUFDeEIsUUFBNEIsRUFDNUIsTUFBZ0UsRUFDaEUsZ0JBQXdEO0lBRXhELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLENBQ3JFLGdCQUFnQixFQUNoQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQ3JELENBQUM7SUFDRixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFO1FBQ2pDLElBQUksZUFBZSxDQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEMsb0JBQW9CLENBQVUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQWdCLDJCQUEyQixDQUN6QyxPQUF3QixFQUN4QixRQUE0QixFQUM1QixhQUFxQixFQUNyQixNQUFnRSxFQUNoRSxRQUFpRDtJQUVqRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxRQUFRLEdBQUcseUJBQXlCLENBQVUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0QsT0FBTyx3Q0FBd0MsQ0FBVSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUNsSCxDQUFDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQ3pDLE9BQXdCLEVBQ3hCLFFBQTRCLEVBQzVCLGFBQXFCLEVBQ3JCLE1BQWdFLEVBQ2hFLFVBQW1EO0lBRW5ELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixVQUFVLEdBQUcsMkJBQTJCLENBQVUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUNELE9BQU8sd0NBQXdDLENBQzdDLE9BQU8sRUFDUCxRQUFRLEVBQ1IsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3hGLFVBQVUsQ0FDWCxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgRUNQYWlyLCBmaXhlZFNjcmlwdFdhbGxldCwgaGFzUHNidE1hZ2ljLCBhZGRyZXNzIGFzIHdhc21BZGRyZXNzIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IHRvV2FzbVV0eG9Db2luTmFtZSwgdHlwZSBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi8uLi9zcmMvbmFtZXMnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50IH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Vuc3BlbnQnO1xuXG5pbXBvcnQgeyBnZXRDb2luTmFtZUZvck5ldHdvcmsgfSBmcm9tICcuL3V0eG9Db2lucyc7XG5jb25zdCB7IGlzV2FsbGV0VW5zcGVudCwgc2lnbklucHV0V2l0aFVuc3BlbnQgfSA9IHV0eG9saWIuYml0Z287XG50eXBlIFV0eG9saWJSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG50eXBlIFdhc21Sb290V2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzO1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25PYmogPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGhleDogc3RyaW5nO1xuICBpbnM6IHtcbiAgICB0eGlkOiBzdHJpbmc7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBzY3JpcHRTaWc/OiBzdHJpbmc7XG4gICAgd2l0bmVzcz86IHN0cmluZ1tdO1xuICB9W107XG4gIG91dHM6IHtcbiAgICBzY3JpcHQ6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nO1xuICB9W107XG59O1xuXG5mdW5jdGlvbiB0b1R4T3V0cHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICB1OiBVbnNwZW50PFROdW1iZXI+LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IHV0eG9saWIuVHhPdXRwdXQ8VE51bWJlcj4ge1xuICByZXR1cm4ge1xuICAgIHNjcmlwdDogQnVmZmVyLmZyb20oXG4gICAgICB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKHUuYWRkcmVzcywgdG9XYXNtVXR4b0NvaW5OYW1lKGdldENvaW5OYW1lRm9yTmV0d29yayhuZXR3b3JrKSkpXG4gICAgKSxcbiAgICB2YWx1ZTogdS52YWx1ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEVxdWFsUGFyc2VkUHNidChcbiAgYTogQnVmZmVyLFxuICBiOiBCdWZmZXIsXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIHdhbGxldEtleXM6IFdhc21Sb290V2FsbGV0S2V5cyxcbiAgcmVwbGF5UHJvdGVjdGlvbjogRUNQYWlyW11cbik6IHZvaWQge1xuICBpZiAoIWhhc1BzYnRNYWdpYyhhKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYSBpcyBub3QgYSBwc2J0Jyk7XG4gIH1cbiAgaWYgKCFoYXNQc2J0TWFnaWMoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2IgaXMgbm90IGEgcHNidCcpO1xuICB9XG4gIGNvbnN0IGFQc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhhLCB0b1dhc21VdHhvQ29pbk5hbWUoY29pbk5hbWUpKTtcbiAgY29uc3QgYlBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKGIsIHRvV2FzbVV0eG9Db2luTmFtZShjb2luTmFtZSkpO1xuICBjb25zdCBhUGFyc2VkID0gYVBzYnQucGFyc2VUcmFuc2FjdGlvbldpdGhXYWxsZXRLZXlzKHdhbGxldEtleXMsIHtcbiAgICByZXBsYXlQcm90ZWN0aW9uOiB7IHB1YmxpY0tleXM6IHJlcGxheVByb3RlY3Rpb24gfSxcbiAgfSk7XG4gIGNvbnN0IGJQYXJzZWQgPSBiUHNidC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMod2FsbGV0S2V5cywge1xuICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogcmVwbGF5UHJvdGVjdGlvbiB9LFxuICB9KTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChhUGFyc2VkLCBiUGFyc2VkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uVG9PYmo8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogVHJhbnNhY3Rpb25PYmoge1xuICByZXR1cm4ge1xuICAgIGlkOiB0eC5nZXRJZCgpLFxuICAgIGhleDogdHgudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JyksXG4gICAgaW5zOiB0eC5pbnMubWFwKCh2KSA9PiAoe1xuICAgICAgdHhpZDogQnVmZmVyLmZyb20odi5oYXNoKS5yZXZlcnNlKCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgaW5kZXg6IHYuaW5kZXgsXG4gICAgICBzY3JpcHQ6IHYuc2NyaXB0Py50b1N0cmluZygnaGV4JyksXG4gICAgICB3aXRuZXNzOiB2LndpdG5lc3M/Lm1hcCgodikgPT4gdi50b1N0cmluZygnaGV4JykpLFxuICAgIH0pKSxcbiAgICBvdXRzOiB0eC5vdXRzLm1hcCgodikgPT4gKHtcbiAgICAgIHNjcmlwdDogdi5zY3JpcHQudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgdmFsdWU6IHR5cGVvZiB2LnZhbHVlID09PSAnYmlnaW50JyA/IHYudmFsdWUudG9TdHJpbmcoKSA6ICh2LnZhbHVlIGFzIG51bWJlciksXG4gICAgfSkpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25IZXhUb09iaihcbiAgdHhIZXg6IHN0cmluZyxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IFRyYW5zYWN0aW9uT2JqIHtcbiAgY29uc3Qgb2JqID0gdHJhbnNhY3Rpb25Ub09iaihcbiAgICB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihCdWZmZXIuZnJvbSh0eEhleCwgJ2hleCcpLCBuZXR3b3JrLCB7IGFtb3VudFR5cGUgfSlcbiAgKTtcbiAgaWYgKG9iai5oZXggIT09IHR4SGV4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzZXJpYWxpemVkIHR4SGV4IGRvZXMgbm90IG1hdGNoIGlucHV0YCk7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgb3V0cHV0QWRkcmVzczogc3RyaW5nXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIGNvbnN0IHR4YiA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRm9yTmV0d29yazxUTnVtYmVyPihuZXR3b3JrKTtcbiAgdW5zcGVudHMuZm9yRWFjaCgodSkgPT4ge1xuICAgIGNvbnN0IFt0eGlkLCB2aW5dID0gdS5pZC5zcGxpdCgnOicpO1xuICAgIHR4Yi5hZGRJbnB1dCh0eGlkLCBOdW1iZXIodmluKSk7XG4gIH0pO1xuICBjb25zdCBhbW91bnRUeXBlID0gdW5zcGVudHMubGVuZ3RoID4gMCAmJiB0eXBlb2YgdW5zcGVudHNbMF0udmFsdWUgPT09ICdiaWdpbnQnID8gJ2JpZ2ludCcgOiAnbnVtYmVyJztcbiAgaWYgKGFtb3VudFR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgdW5zcGVudHMuZm9yRWFjaCgodSkgPT4gKHUudmFsdWUgPSBNYXRoLnJvdW5kKHUudmFsdWUgYXMgbnVtYmVyKSBhcyBUTnVtYmVyKSk7XG4gIH1cbiAgY29uc3QgdW5zcGVudFN1bSA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bTxUTnVtYmVyPih1bnNwZW50cywgYW1vdW50VHlwZSk7XG4gIHR4Yi5hZGRPdXRwdXQob3V0cHV0QWRkcmVzcywgdXR4b2xpYi5iaXRnby50b1ROdW1iZXI8VE51bWJlcj4oQmlnSW50KHVuc3BlbnRTdW0pIC0gQmlnSW50KDEwMDApLCBhbW91bnRUeXBlKSk7XG4gIHJldHVybiB0eGIuYnVpbGRJbmNvbXBsZXRlKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlcldpdGhTaWduZWRJbnB1dHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgc2lnbmVyOiB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXI8VXR4b2xpYlJvb3RXYWxsZXRLZXlzPixcbiAgaW5wdXRUcmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj5cbik6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPiB7XG4gIGNvbnN0IHR4QnVpbGRlciA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRnJvbVRyYW5zYWN0aW9uPFROdW1iZXI+KFxuICAgIGlucHV0VHJhbnNhY3Rpb24sXG4gICAgdW5zcGVudHMubWFwKCh1KSA9PiB0b1R4T3V0cHV0PFROdW1iZXI+KHUsIG5ldHdvcmspKVxuICApO1xuICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgaWYgKGlzV2FsbGV0VW5zcGVudDxUTnVtYmVyPih1KSkge1xuICAgICAgc2lnbklucHV0V2l0aFVuc3BlbnQ8VE51bWJlcj4odHhCdWlsZGVyLCBpbnB1dEluZGV4LCB1LCBzaWduZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0eEJ1aWxkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgb3V0cHV0QWRkcmVzczogc3RyaW5nLFxuICBzaWduZXI6IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcjxVdHhvbGliUm9vdFdhbGxldEtleXM+LFxuICBwcmVidWlsZD86IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+XG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIGlmICghcHJlYnVpbGQpIHtcbiAgICBwcmVidWlsZCA9IGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb248VE51bWJlcj4obmV0d29yaywgdW5zcGVudHMsIG91dHB1dEFkZHJlc3MpO1xuICB9XG4gIHJldHVybiBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJXaXRoU2lnbmVkSW5wdXRzPFROdW1iZXI+KG5ldHdvcmssIHVuc3BlbnRzLCBzaWduZXIsIHByZWJ1aWxkKS5idWlsZEluY29tcGxldGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB1bnNwZW50czogVW5zcGVudDxUTnVtYmVyPltdLFxuICBvdXRwdXRBZGRyZXNzOiBzdHJpbmcsXG4gIHNpZ25lcjogdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50U2lnbmVyPFV0eG9saWJSb290V2FsbGV0S2V5cz4sXG4gIGhhbGZTaWduZWQ/OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBpZiAoIWhhbGZTaWduZWQpIHtcbiAgICBoYWxmU2lnbmVkID0gY3JlYXRlSGFsZlNpZ25lZFRyYW5zYWN0aW9uPFROdW1iZXI+KG5ldHdvcmssIHVuc3BlbnRzLCBvdXRwdXRBZGRyZXNzLCBzaWduZXIpO1xuICB9XG4gIHJldHVybiBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJXaXRoU2lnbmVkSW5wdXRzPFROdW1iZXI+KFxuICAgIG5ldHdvcmssXG4gICAgdW5zcGVudHMsXG4gICAgbmV3IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcihzaWduZXIud2FsbGV0S2V5cywgc2lnbmVyLmNvc2lnbmVyLCBzaWduZXIuc2lnbmVyKSxcbiAgICBoYWxmU2lnbmVkXG4gICkuYnVpbGQoKTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"unspents.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/unspents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unspents.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/unspents.ts"],"names":[],"mappings":"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"}
@@ -137,7 +137,7 @@ function toUnspent(input, index, network, rootWalletKeys) {
137
137
  */
138
138
  function createWasmWalletUnspent(address, chain, index, value, network) {
139
139
  // Get output script from address using correct wasm-utxo function
140
- const outputScript = wasmUtxo.address.toOutputScriptWithCoin(address, toCoinName(network));
140
+ const outputScript = wasmUtxo.address.toOutputScriptWithCoin(address, (0, names_1.toWasmUtxoCoinName)(toCoinName(network)));
141
141
  // Create a mock transaction with output at vout=0
142
142
  const { txid } = createMockPrevTx(0, outputScript, BigInt(value));
143
143
  return {
@@ -206,7 +206,7 @@ function toUnspentWithPrevTx(input, index, network, rootWalletKeys) {
206
206
  const chain = getInternalChainCode(scriptType);
207
207
  const coinName = toCoinName(network);
208
208
  // Get the output script for the wallet address
209
- const outputScript = wasmUtxo.fixedScriptWallet.outputScript(rootWalletKeys, chain, index, coinName);
209
+ const outputScript = wasmUtxo.fixedScriptWallet.outputScript(rootWalletKeys, chain, index, (0, names_1.toWasmUtxoCoinName)(coinName));
210
210
  // Create mock prevTx with output at vout=0
211
211
  const { prevTx, txid } = createMockPrevTx(0, outputScript, input.value);
212
212
  // Get the wallet address
@@ -221,4 +221,4 @@ function toUnspentWithPrevTx(input, index, network, rootWalletKeys) {
221
221
  prevTx,
222
222
  };
223
223
  }
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zcGVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC91bnNwZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDQSw4Q0E2QkM7QUFFRCxrRUFlQztBQUVELGtDQVlDO0FBTUQsOEJBYUM7QUFzQkQsMERBb0JDO0FBZUQsNENBaURDO0FBU0Qsa0RBNEJDO0FBN1FELHlEQUEyQztBQUMzQyw4Q0FBMEM7QUFDMUMsMkRBQTZDO0FBRTdDLHNDQUE0RDtBQUM1RCw4Q0FBdUU7QUFHdkUsMkNBQW9EO0FBQ3BELHVDQUE2QztBQUU3QyxNQUFNLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQVVyRixTQUFTLFVBQVUsQ0FBQyxPQUFtQjtJQUNyQyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFBLHNCQUFjLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0QsT0FBTyxJQUFBLGlDQUFxQixFQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFZRCxNQUFNLFlBQVksR0FBYyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVyRSxTQUFTLHNCQUFzQixDQUFDLE9BQWU7SUFDN0MsT0FBTyxJQUFBLGtCQUFPLEVBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLE9BQW1CLEVBQ25CLFVBQTBCLEVBQzFCLEVBQUUsRUFB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Q2hHLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVyQywrQ0FBK0M7SUFDL0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVyRywyQ0FBMkM7SUFDM0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RSx5QkFBeUI7SUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBQSwwQkFBZ0IsRUFBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVwRix3REFBd0Q7SUFDeEQsT0FBTztRQUNMLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSTtRQUNmLE9BQU87UUFDUCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBnZXRTZWVkIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCAqIGFzIHdhc21VdHhvIGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGlzVXR4b0NvaW5OYW1lLCB0eXBlIFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQsIFVuc3BlbnRXaXRoUHJldlR4LCBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Vuc3BlbnQnO1xuXG5pbXBvcnQgeyBnZXRDb2luTmFtZUZvck5ldHdvcmsgfSBmcm9tICcuL3V0eG9Db2lucyc7XG5pbXBvcnQgeyBnZXRXYWxsZXRBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzJztcblxuY29uc3QgeyBjaGFpbkNvZGVzUDJzaCwgZ2V0RXh0ZXJuYWxDaGFpbkNvZGUsIGdldEludGVybmFsQ2hhaW5Db2RlIH0gPSB1dHhvbGliLmJpdGdvO1xuXG5leHBvcnQgdHlwZSBVdHhvbGliUm9vdFdhbGxldEtleXMgPSB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuZXhwb3J0IHR5cGUgV2FzbVJvb3RXYWxsZXRLZXlzID0gd2FzbVV0eG8uZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG5leHBvcnQgdHlwZSBSb290V2FsbGV0S2V5cyA9IFV0eG9saWJSb290V2FsbGV0S2V5cyB8IFdhc21Sb290V2FsbGV0S2V5cztcbnR5cGUgQ2hhaW5Db2RlID0gdXR4b2xpYi5iaXRnby5DaGFpbkNvZGU7XG5cbi8qKiBBY2NlcHQgZWl0aGVyIGEgY29pbiBuYW1lIHN0cmluZyBvciBhIHV0eG9saWIuTmV0d29yayBvYmplY3QgKi9cbmV4cG9ydCB0eXBlIE5ldHdvcmtBcmcgPSBzdHJpbmcgfCB1dHhvbGliLk5ldHdvcms7XG5cbmZ1bmN0aW9uIHRvQ29pbk5hbWUobmV0d29yazogTmV0d29ya0FyZyk6IFV0eG9Db2luTmFtZSB7XG4gIGlmICh0eXBlb2YgbmV0d29yayA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIWlzVXR4b0NvaW5OYW1lKG5ldHdvcmspKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHZhbGlkIGNvaW4gbmFtZTogJHtuZXR3b3JrfWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV0d29yaztcbiAgfVxuICByZXR1cm4gZ2V0Q29pbk5hbWVGb3JOZXR3b3JrKG5ldHdvcmspO1xufVxuXG5leHBvcnQgdHlwZSBJbnB1dFNjcmlwdFR5cGUgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjMgfCAncmVwbGF5UHJvdGVjdGlvbic7XG5cbi8qKlxuICogSW5wdXQgZGVmaW5pdGlvbiBmb3IgdG9VbnNwZW50IGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIElucHV0ID0ge1xuICBzY3JpcHRUeXBlOiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjMgfCAndGFwcm9vdEtleVBhdGhTcGVuZCc7XG4gIHZhbHVlOiBiaWdpbnQ7XG59O1xuXG5jb25zdCBkZWZhdWx0Q2hhaW46IENoYWluQ29kZSA9IGdldEV4dGVybmFsQ2hhaW5Db2RlKGNoYWluQ29kZXNQMnNoKTtcblxuZnVuY3Rpb24gbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGdldFNlZWQoYWRkcmVzcykudG9TdHJpbmcoJ2hleCcpICsgJzoxJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBuZXR3b3JrOiBOZXR3b3JrQXJnLFxuICB3YWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgeyBpZCwgY2hhaW4gPSBkZWZhdWx0Q2hhaW4sIGluZGV4ID0gMCwgdmFsdWUsIGFkZHJlc3MgfTogUGFydGlhbDxXYWxsZXRVbnNwZW50PFROdW1iZXI+PlxuKTogV2FsbGV0VW5zcGVudDxUTnVtYmVyPiB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnNwZW50IHZhbHVlIG11c3QgYmUgc2V0YCk7XG4gIH1cbiAgaWYgKGNoYWluID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3BlbnQgY2hhaW4gbXVzdCBiZSBzZXRgKTtcbiAgfVxuICBjb25zdCBkZXJpdmVBZGRyZXNzID0gZ2V0V2FsbGV0QWRkcmVzcyh0b0NvaW5OYW1lKG5ldHdvcmspLCB3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuICBpZiAoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICE9PSBkZXJpdmVBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlcml2ZWRBZGRyZXNzIG1pc21hdGNoOiAke2FkZHJlc3N9IGRlcml2ZWQ9JHtkZXJpdmVBZGRyZXNzfWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhZGRyZXNzID0gZGVyaXZlQWRkcmVzcztcbiAgfVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBtb2NrT3V0cHV0SWRGb3JBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgYWRkcmVzcyxcbiAgICBjaGFpbixcbiAgICBpbmRleCxcbiAgICB2YWx1ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tVbnNwZW50UmVwbGF5UHJvdGVjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgdmFsdWU6IFROdW1iZXJcbik6IFVuc3BlbnQ8VE51bWJlcj4ge1xuICBjb25zdCBjb2luTmFtZSA9IHRvQ29pbk5hbWUobmV0d29yayk7XG4gIGNvbnN0IGFkZHJlc3NlcyA9IGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMoY29pbk5hbWUpO1xuICBpZiAoYWRkcmVzc2VzLmxlbmd0aCkge1xuICAgIGNvbnN0IGFkZHJlc3MgPSBhZGRyZXNzZXNbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBtb2NrT3V0cHV0SWRGb3JBZGRyZXNzKGFkZHJlc3MpLFxuICAgICAgYWRkcmVzcyxcbiAgICAgIHZhbHVlLFxuICAgIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGAke2NvaW5OYW1lfSBoYXMgbm8gcmVwbGF5IHByb3RlY3Rpb24gdW5zcGVudHNgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBuZXR3b3JrOiBOZXR3b3JrQXJnLFxuICB3YWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgY2hhaW46IENoYWluQ29kZSB8IElucHV0U2NyaXB0VHlwZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgdmFsdWU6IFROdW1iZXJcbik6IFVuc3BlbnQ8VE51bWJlcj4ge1xuICBpZiAoY2hhaW4gPT09ICdyZXBsYXlQcm90ZWN0aW9uJykge1xuICAgIHJldHVybiBtb2NrVW5zcGVudFJlcGxheVByb3RlY3Rpb24obmV0d29yaywgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgPyBCaWdJbnQoMTAwMCkgOiAxMDAwKSBhcyBUTnVtYmVyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbW9ja1dhbGxldFVuc3BlbnQobmV0d29yaywgd2FsbGV0S2V5cywgeyBjaGFpbjogZ2V0SW50ZXJuYWxDaGFpbkNvZGUoY2hhaW4pLCB2YWx1ZSwgaW5kZXggfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgdW5zcGVudCBvYmplY3QgZnJvbSBpbnB1dCBzY3JpcHQgdHlwZSwgaW5kZXgsIG5ldHdvcmsgYW5kIHJvb3Qgd2FsbGV0IGtleXMuXG4gKiBTdXBwb3J0cyBib3RoIHV0eG9saWIgYW5kIHdhc20tdXR4byBSb290V2FsbGV0S2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVW5zcGVudChcbiAgaW5wdXQ6IElucHV0LFxuICBpbmRleDogbnVtYmVyLFxuICBuZXR3b3JrOiBOZXR3b3JrQXJnLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXNcbik6IFdhbGxldFVuc3BlbnQ8YmlnaW50PiB7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBpbnB1dC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiBpbnB1dC5zY3JpcHRUeXBlO1xuICBjb25zdCBjaGFpbiA9IGdldEludGVybmFsQ2hhaW5Db2RlKHNjcmlwdFR5cGUpO1xuICByZXR1cm4gbW9ja1dhbGxldFVuc3BlbnQobmV0d29yaywgcm9vdFdhbGxldEtleXMsIHtcbiAgICBjaGFpbixcbiAgICBpbmRleCxcbiAgICB2YWx1ZTogaW5wdXQudmFsdWUsXG4gIH0pO1xufVxuXG4vKipcbiAqIFdhbGxldCB1bnNwZW50IHdpdGggcHJldlR4IC0gY29tYmluZXMgV2FsbGV0VW5zcGVudCBhbmQgVW5zcGVudFdpdGhQcmV2VHhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYWxsZXRVbnNwZW50V2l0aFByZXZUeDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIFdhbGxldFVuc3BlbnQ8VE51bWJlcj4sXG4gICAgVW5zcGVudFdpdGhQcmV2VHg8VE51bWJlcj4ge31cblxuLyoqXG4gKiBDcmVhdGUgYSBtb2NrIHdhbGxldCB1bnNwZW50IHVzaW5nIHdhc20tdXR4byBvbmx5IChubyB1dHhvbGliIGRlcGVuZGVuY3kpLlxuICogVXNlcyBjcmVhdGVNb2NrUHJldlR4IHRvIGdlbmVyYXRlIGEgcmVhbGlzdGljIHR4aWQgZm9yIHRoZSB1bnNwZW50LlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0cyB0aGF0IG5lZWQgYSB2YWxpZCB1bnNwZW50IGJ1dCBkb24ndCByZXF1aXJlIHRoZSBwcmV2VHggYnVmZmVyLlxuICpcbiAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIHdhbGxldCBhZGRyZXNzIGZvciB0aGUgdW5zcGVudFxuICogQHBhcmFtIGNoYWluIC0gVGhlIGRlcml2YXRpb24gY2hhaW5cbiAqIEBwYXJhbSBpbmRleCAtIFRoZSBkZXJpdmF0aW9uIGluZGV4XG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgaW4gc2F0b3NoaXMgKGJpZ2ludClcbiAqIEBwYXJhbSBuZXR3b3JrIC0gVGhlIG5ldHdvcmsgdG8gZ2V0IHRoZSBvdXRwdXQgc2NyaXB0XG4gKiBAcmV0dXJucyBXYWxsZXRVbnNwZW50IHdpdGggYSB2YWxpZCB0eGlkIGZyb20gYSB3YXNtLXV0eG8gZ2VuZXJhdGVkIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXYXNtV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gYmlnaW50PihcbiAgYWRkcmVzczogc3RyaW5nLFxuICBjaGFpbjogQ2hhaW5Db2RlLFxuICBpbmRleDogbnVtYmVyLFxuICB2YWx1ZTogVE51bWJlcixcbiAgbmV0d29yazogTmV0d29ya0FyZ1xuKTogV2FsbGV0VW5zcGVudDxUTnVtYmVyPiB7XG4gIC8vIEdldCBvdXRwdXQgc2NyaXB0IGZyb20gYWRkcmVzcyB1c2luZyBjb3JyZWN0IHdhc20tdXR4byBmdW5jdGlvblxuICBjb25zdCBvdXRwdXRTY3JpcHQgPSB3YXNtVXR4by5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4oYWRkcmVzcywgdG9Db2luTmFtZShuZXR3b3JrKSk7XG5cbiAgLy8gQ3JlYXRlIGEgbW9jayB0cmFuc2FjdGlvbiB3aXRoIG91dHB1dCBhdCB2b3V0PTBcbiAgY29uc3QgeyB0eGlkIH0gPSBjcmVhdGVNb2NrUHJldlR4KDAsIG91dHB1dFNjcmlwdCwgQmlnSW50KHZhbHVlKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogYCR7dHhpZH06MGAsXG4gICAgYWRkcmVzcyxcbiAgICBjaGFpbixcbiAgICBpbmRleCxcbiAgICB2YWx1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtb2NrIHByZXZpb3VzIHRyYW5zYWN0aW9uIHVzaW5nIHdhc20tdXR4bydzIGxvdy1sZXZlbCBQc2J0IGNsYXNzLlxuICpcbiAqIENyZWF0ZXMgYSB2YWxpZCB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmUgd2l0aDpcbiAqIC0gQSBwMndwa2ggaW5wdXQgKHNlZ3dpdCwgZWFzeSB0byBjb25zdHJ1Y3QpXG4gKiAtIE91dHB1dHMgaW5jbHVkaW5nIHRoZSB0YXJnZXQgb3V0cHV0IGF0IHRoZSBzcGVjaWZpZWQgdm91dFxuICogLSBSZWFzb25hYmxlIGZlZSByYXRlIChpbnB1dCB2YWx1ZSBzbGlnaHRseSBoaWdoZXIgdGhhbiBvdXRwdXQgc3VtKVxuICpcbiAqIEBwYXJhbSB2b3V0IC0gVGhlIG91dHB1dCBpbmRleCB3aGVyZSB0aGUgdGFyZ2V0IG91dHB1dCBzaG91bGQgYmUgcGxhY2VkXG4gKiBAcGFyYW0gb3V0cHV0U2NyaXB0IC0gVGhlIHNjcmlwdFB1YktleSBmb3IgdGhlIHRhcmdldCBvdXRwdXRcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSBpbiBzYXRvc2hpcyBmb3IgdGhlIHRhcmdldCBvdXRwdXRcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHByZXZUeCBidWZmZXIgYW5kIHRoZSB0cmFuc2FjdGlvbidzIHR4aWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tQcmV2VHgoXG4gIHZvdXQ6IG51bWJlcixcbiAgb3V0cHV0U2NyaXB0OiBVaW50OEFycmF5LFxuICB2YWx1ZTogYmlnaW50XG4pOiB7IHByZXZUeDogQnVmZmVyOyB0eGlkOiBzdHJpbmcgfSB7XG4gIC8vIENyZWF0ZSBhIHAyd3BraCBzY3JpcHQgZm9yIHRoZSBkdW1teSBpbnB1dFxuICAvLyBwMndwa2g6IE9QXzAgPDIwLWJ5dGUtaGFzaD4gLSB3ZSB1c2UgYSBkZXRlcm1pbmlzdGljIGhhc2hcbiAgY29uc3QgZHVtbXlIYXNoID0gZ2V0U2VlZCgnbW9jay1wcmV2LXR4LWlucHV0Jykuc3ViYXJyYXkoMCwgMjApO1xuICBjb25zdCBwMndwa2hTY3JpcHQgPSBuZXcgVWludDhBcnJheShbMHgwMCwgMHgxNCwgLi4uZHVtbXlIYXNoXSk7XG5cbiAgLy8gQ2FsY3VsYXRlIHRvdGFsIG91dHB1dCB2YWx1ZVxuICBjb25zdCBkdW1teU91dHB1dFZhbHVlID0gQmlnSW50KDEwMDApOyAvLyAxMDAwIHNhdG9zaGlzIHBlciBkdW1teSBvdXRwdXRcbiAgY29uc3QgdG90YWxPdXRwdXRWYWx1ZSA9IGR1bW15T3V0cHV0VmFsdWUgKiBCaWdJbnQodm91dCkgKyB2YWx1ZTtcblxuICAvLyBJbnB1dCB2YWx1ZSA9IG91dHB1dCB2YWx1ZSArIHNtYWxsIGZlZSAoMTAwMCBzYXQgLSByZWFzb25hYmxlIGZlZSlcbiAgY29uc3QgaW5wdXRWYWx1ZSA9IHRvdGFsT3V0cHV0VmFsdWUgKyBCaWdJbnQoMTAwMCk7XG5cbiAgLy8gQ3JlYXRlIFBTQlQgdXNpbmcgV3JhcFBzYnQgKGV4cG9ydGVkIGFzIFBzYnQpXG4gIGNvbnN0IHBzYnQgPSBuZXcgd2FzbVV0eG8uUHNidCgyLCAwKTtcblxuICAvLyBBZGQgZHVtbXkgc2Vnd2l0IGlucHV0IC0gcDJ3cGtoXG4gIHBzYnQuYWRkSW5wdXQoXG4gICAgJzAxJy5yZXBlYXQoMzIpLCAvLyBub24temVybyB0eGlkIHRvIGF2b2lkIGNvaW5iYXNlIGRldGVjdGlvblxuICAgIDAsXG4gICAgaW5wdXRWYWx1ZSxcbiAgICBwMndwa2hTY3JpcHRcbiAgKTtcblxuICAvLyBBZGQgZHVtbXkgb3V0cHV0cyBiZWZvcmUgdGhlIHRhcmdldCB2b3V0XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdm91dDsgaSsrKSB7XG4gICAgcHNidC5hZGRPdXRwdXQocDJ3cGtoU2NyaXB0LCBkdW1teU91dHB1dFZhbHVlKTtcbiAgfVxuXG4gIC8vIEFkZCB0aGUgdGFyZ2V0IG91dHB1dCBhdCB0aGUgc3BlY2lmaWVkIHZvdXRcbiAgcHNidC5hZGRPdXRwdXQob3V0cHV0U2NyaXB0LCB2YWx1ZSk7XG5cbiAgLy8gR2V0IHRoZSB1bnNpZ25lZCB0cmFuc2FjdGlvbiBieXRlc1xuICAvLyBOb3RlOiBUaGlzIGlzIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RydWN0dXJlIHdpdGhvdXQgc2lnbmF0dXJlc1xuICAvLyBGb3IgcHJldlR4IHB1cnBvc2VzLCB3ZSBqdXN0IG5lZWQgdGhlIG91dHB1dCBzY3JpcHRzIGFuZCB2YWx1ZXNcbiAgY29uc3QgdHhCeXRlcyA9IHBzYnQuZ2V0VW5zaWduZWRUeCgpO1xuXG4gIC8vIFBhcnNlIHdpdGggd2FzbS11dHhvIFRyYW5zYWN0aW9uIHRvIGdldCB0aGUgdHhpZFxuICBjb25zdCB0eCA9IHdhc21VdHhvLlRyYW5zYWN0aW9uLmZyb21CeXRlcyh0eEJ5dGVzKTtcbiAgY29uc3QgdHhpZCA9IHR4LmdldElkKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcmV2VHg6IEJ1ZmZlci5mcm9tKHR4Qnl0ZXMpLFxuICAgIHR4aWQsXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIHVuc3BlbnQgd2l0aCBwcmV2VHggdXNpbmcgd2FzbS11dHhvIG9ubHkgKG5vIHV0eG9saWIgZGVwZW5kZW5jeSkuXG4gKiBUaGUgcHJldlR4IGlzIGJ1aWx0IHVzaW5nIHdhc20tdXR4bydzIGxvdy1sZXZlbCBQc2J0IGNsYXNzLlxuICpcbiAqIEtleTogVGhlIHVuc3BlbnQgaWQgdXNlcyB0aGUgYWN0dWFsIHR4aWQgZnJvbSB0aGUgZ2VuZXJhdGVkIHByZXZUeCxcbiAqIGVuc3VyaW5nIHRoZSBNb2NrUmVjb3ZlcnlQcm92aWRlciByZXR1cm5zIHRoZSBjb3JyZWN0IHByZXZUeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVW5zcGVudFdpdGhQcmV2VHgoXG4gIGlucHV0OiBJbnB1dCxcbiAgaW5kZXg6IG51bWJlcixcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgcm9vdFdhbGxldEtleXM6IFdhc21Sb290V2FsbGV0S2V5c1xuKTogV2FsbGV0VW5zcGVudFdpdGhQcmV2VHg8YmlnaW50PiB7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBpbnB1dC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiBpbnB1dC5zY3JpcHRUeXBlO1xuICBjb25zdCBjaGFpbiA9IGdldEludGVybmFsQ2hhaW5Db2RlKHNjcmlwdFR5cGUpO1xuICBjb25zdCBjb2luTmFtZSA9IHRvQ29pbk5hbWUobmV0d29yayk7XG5cbiAgLy8gR2V0IHRoZSBvdXRwdXQgc2NyaXB0IGZvciB0aGUgd2FsbGV0IGFkZHJlc3NcbiAgY29uc3Qgb3V0cHV0U2NyaXB0ID0gd2FzbVV0eG8uZml4ZWRTY3JpcHRXYWxsZXQub3V0cHV0U2NyaXB0KHJvb3RXYWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgsIGNvaW5OYW1lKTtcblxuICAvLyBDcmVhdGUgbW9jayBwcmV2VHggd2l0aCBvdXRwdXQgYXQgdm91dD0wXG4gIGNvbnN0IHsgcHJldlR4LCB0eGlkIH0gPSBjcmVhdGVNb2NrUHJldlR4KDAsIG91dHB1dFNjcmlwdCwgaW5wdXQudmFsdWUpO1xuXG4gIC8vIEdldCB0aGUgd2FsbGV0IGFkZHJlc3NcbiAgY29uc3QgYWRkcmVzcyA9IGdldFdhbGxldEFkZHJlc3ModG9Db2luTmFtZShuZXR3b3JrKSwgcm9vdFdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgLy8gVXNlIHRoZSBhY3R1YWwgdHhpZCBmcm9tIHRoZSBwcmV2VHggaW4gdGhlIHVuc3BlbnQgaWRcbiAgcmV0dXJuIHtcbiAgICBpZDogYCR7dHhpZH06MGAsXG4gICAgYWRkcmVzcyxcbiAgICBjaGFpbixcbiAgICBpbmRleCxcbiAgICB2YWx1ZTogaW5wdXQudmFsdWUsXG4gICAgcHJldlR4LFxuICB9O1xufVxuIl19
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zcGVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC91bnNwZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDQSw4Q0E2QkM7QUFFRCxrRUFlQztBQUVELGtDQVlDO0FBTUQsOEJBYUM7QUFzQkQsMERBb0JDO0FBZUQsNENBaURDO0FBU0Qsa0RBaUNDO0FBbFJELHlEQUEyQztBQUMzQyw4Q0FBMEM7QUFDMUMsMkRBQTZDO0FBRTdDLHNDQUE0RDtBQUM1RCw4Q0FBMkY7QUFHM0YsMkNBQW9EO0FBQ3BELHVDQUE2QztBQUU3QyxNQUFNLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQVVyRixTQUFTLFVBQVUsQ0FBQyxPQUFtQjtJQUNyQyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFBLHNCQUFjLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0QsT0FBTyxJQUFBLGlDQUFxQixFQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFZRCxNQUFNLFlBQVksR0FBYyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVyRSxTQUFTLHNCQUFzQixDQUFDLE9BQWU7SUFDN0MsT0FBTyxJQUFBLGtCQUFPLEVBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLE9BQW1CLEVBQ25CLFVBQTBCLEVBQzFCLEVBQUUsRUFB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S0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNoRyxNQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckMsK0NBQStDO0lBQy9DLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQzFELGNBQWMsRUFDZCxLQUFLLEVBQ0wsS0FBSyxFQUNMLElBQUEsMEJBQWtCLEVBQUMsUUFBUSxDQUFDLENBQzdCLENBQUM7SUFFRiwyQ0FBMkM7SUFDM0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RSx5QkFBeUI7SUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBQSwwQkFBZ0IsRUFBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVwRix3REFBd0Q7SUFDeEQsT0FBTztRQUNMLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSTtRQUNmLE9BQU87UUFDUCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBnZXRTZWVkIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCAqIGFzIHdhc21VdHhvIGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGlzVXR4b0NvaW5OYW1lLCB0b1dhc21VdHhvQ29pbk5hbWUsIHR5cGUgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vc3JjL25hbWVzJztcbmltcG9ydCB0eXBlIHsgVW5zcGVudCwgVW5zcGVudFdpdGhQcmV2VHgsIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7IGdldENvaW5OYW1lRm9yTmV0d29yayB9IGZyb20gJy4vdXR4b0NvaW5zJztcbmltcG9ydCB7IGdldFdhbGxldEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuXG5jb25zdCB7IGNoYWluQ29kZXNQMnNoLCBnZXRFeHRlcm5hbENoYWluQ29kZSwgZ2V0SW50ZXJuYWxDaGFpbkNvZGUgfSA9IHV0eG9saWIuYml0Z287XG5cbmV4cG9ydCB0eXBlIFV0eG9saWJSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG5leHBvcnQgdHlwZSBXYXNtUm9vdFdhbGxldEtleXMgPSB3YXNtVXR4by5maXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cztcbmV4cG9ydCB0eXBlIFJvb3RXYWxsZXRLZXlzID0gVXR4b2xpYlJvb3RXYWxsZXRLZXlzIHwgV2FzbVJvb3RXYWxsZXRLZXlzO1xudHlwZSBDaGFpbkNvZGUgPSB1dHhvbGliLmJpdGdvLkNoYWluQ29kZTtcblxuLyoqIEFjY2VwdCBlaXRoZXIgYSBjb2luIG5hbWUgc3RyaW5nIG9yIGEgdXR4b2xpYi5OZXR3b3JrIG9iamVjdCAqL1xuZXhwb3J0IHR5cGUgTmV0d29ya0FyZyA9IHN0cmluZyB8IHV0eG9saWIuTmV0d29yaztcblxuZnVuY3Rpb24gdG9Db2luTmFtZShuZXR3b3JrOiBOZXR3b3JrQXJnKTogVXR4b0NvaW5OYW1lIHtcbiAgaWYgKHR5cGVvZiBuZXR3b3JrID09PSAnc3RyaW5nJykge1xuICAgIGlmICghaXNVdHhvQ29pbk5hbWUobmV0d29yaykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IGEgdmFsaWQgY29pbiBuYW1lOiAke25ldHdvcmt9YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXR3b3JrO1xuICB9XG4gIHJldHVybiBnZXRDb2luTmFtZUZvck5ldHdvcmsobmV0d29yayk7XG59XG5cbmV4cG9ydCB0eXBlIElucHV0U2NyaXB0VHlwZSA9IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMyB8ICdyZXBsYXlQcm90ZWN0aW9uJztcblxuLyoqXG4gKiBJbnB1dCBkZWZpbml0aW9uIGZvciB0b1Vuc3BlbnQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgSW5wdXQgPSB7XG4gIHNjcmlwdFR5cGU6IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMyB8ICd0YXByb290S2V5UGF0aFNwZW5kJztcbiAgdmFsdWU6IGJpZ2ludDtcbn07XG5cbmNvbnN0IGRlZmF1bHRDaGFpbjogQ2hhaW5Db2RlID0gZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoY2hhaW5Db2Rlc1Ayc2gpO1xuXG5mdW5jdGlvbiBtb2NrT3V0cHV0SWRGb3JBZGRyZXNzKGFkZHJlc3M6IHN0cmluZykge1xuICByZXR1cm4gZ2V0U2VlZChhZGRyZXNzKS50b1N0cmluZygnaGV4JykgKyAnOjEnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1dhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICB7IGlkLCBjaGFpbiA9IGRlZmF1bHRDaGFpbiwgaW5kZXggPSAwLCB2YWx1ZSwgYWRkcmVzcyB9OiBQYXJ0aWFsPFdhbGxldFVuc3BlbnQ8VE51bWJlcj4+XG4pOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+IHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3BlbnQgdmFsdWUgbXVzdCBiZSBzZXRgKTtcbiAgfVxuICBpZiAoY2hhaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5zcGVudCBjaGFpbiBtdXN0IGJlIHNldGApO1xuICB9XG4gIGNvbnN0IGRlcml2ZUFkZHJlc3MgPSBnZXRXYWxsZXRBZGRyZXNzKHRvQ29pbk5hbWUobmV0d29yayksIHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG4gIGlmIChhZGRyZXNzKSB7XG4gICAgaWYgKGFkZHJlc3MgIT09IGRlcml2ZUFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZGVyaXZlZEFkZHJlc3MgbWlzbWF0Y2g6ICR7YWRkcmVzc30gZGVyaXZlZD0ke2Rlcml2ZUFkZHJlc3N9YCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFkZHJlc3MgPSBkZXJpdmVBZGRyZXNzO1xuICB9XG4gIGlmICghaWQpIHtcbiAgICBpZCA9IG1vY2tPdXRwdXRJZEZvckFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICBhZGRyZXNzLFxuICAgIGNoYWluLFxuICAgIGluZGV4LFxuICAgIHZhbHVlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Vuc3BlbnRSZXBsYXlQcm90ZWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBuZXR3b3JrOiBOZXR3b3JrQXJnLFxuICB2YWx1ZTogVE51bWJlclxuKTogVW5zcGVudDxUTnVtYmVyPiB7XG4gIGNvbnN0IGNvaW5OYW1lID0gdG9Db2luTmFtZShuZXR3b3JrKTtcbiAgY29uc3QgYWRkcmVzc2VzID0gZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3Nlcyhjb2luTmFtZSk7XG4gIGlmIChhZGRyZXNzZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9IGFkZHJlc3Nlc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG1vY2tPdXRwdXRJZEZvckFkZHJlc3MoYWRkcmVzcyksXG4gICAgICBhZGRyZXNzLFxuICAgICAgdmFsdWUsXG4gICAgfTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYCR7Y29pbk5hbWV9IGhhcyBubyByZXBsYXkgcHJvdGVjdGlvbiB1bnNwZW50c2ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Vuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlIHwgSW5wdXRTY3JpcHRUeXBlLFxuICBpbmRleDogbnVtYmVyLFxuICB2YWx1ZTogVE51bWJlclxuKTogVW5zcGVudDxUTnVtYmVyPiB7XG4gIGlmIChjaGFpbiA9PT0gJ3JlcGxheVByb3RlY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1vY2tVbnNwZW50UmVwbGF5UHJvdGVjdGlvbihuZXR3b3JrLCAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyA/IEJpZ0ludCgxMDAwKSA6IDEwMDApIGFzIFROdW1iZXIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtb2NrV2FsbGV0VW5zcGVudChuZXR3b3JrLCB3YWxsZXRLZXlzLCB7IGNoYWluOiBnZXRJbnRlcm5hbENoYWluQ29kZShjaGFpbiksIHZhbHVlLCBpbmRleCB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSB1bnNwZW50IG9iamVjdCBmcm9tIGlucHV0IHNjcmlwdCB0eXBlLCBpbmRleCwgbmV0d29yayBhbmQgcm9vdCB3YWxsZXQga2V5cy5cbiAqIFN1cHBvcnRzIGJvdGggdXR4b2xpYiBhbmQgd2FzbS11dHhvIFJvb3RXYWxsZXRLZXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbnNwZW50KFxuICBpbnB1dDogSW5wdXQsXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5c1xuKTogV2FsbGV0VW5zcGVudDxiaWdpbnQ+IHtcbiAgY29uc3Qgc2NyaXB0VHlwZSA9IGlucHV0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyA/ICdwMnRyTXVzaWcyJyA6IGlucHV0LnNjcmlwdFR5cGU7XG4gIGNvbnN0IGNoYWluID0gZ2V0SW50ZXJuYWxDaGFpbkNvZGUoc2NyaXB0VHlwZSk7XG4gIHJldHVybiBtb2NrV2FsbGV0VW5zcGVudChuZXR3b3JrLCByb290V2FsbGV0S2V5cywge1xuICAgIGNoYWluLFxuICAgIGluZGV4LFxuICAgIHZhbHVlOiBpbnB1dC52YWx1ZSxcbiAgfSk7XG59XG5cbi8qKlxuICogV2FsbGV0IHVuc3BlbnQgd2l0aCBwcmV2VHggLSBjb21iaW5lcyBXYWxsZXRVbnNwZW50IGFuZCBVbnNwZW50V2l0aFByZXZUeFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhbGxldFVuc3BlbnRXaXRoUHJldlR4PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgV2FsbGV0VW5zcGVudDxUTnVtYmVyPixcbiAgICBVbnNwZW50V2l0aFByZXZUeDxUTnVtYmVyPiB7fVxuXG4vKipcbiAqIENyZWF0ZSBhIG1vY2sgd2FsbGV0IHVuc3BlbnQgdXNpbmcgd2FzbS11dHhvIG9ubHkgKG5vIHV0eG9saWIgZGVwZW5kZW5jeSkuXG4gKiBVc2VzIGNyZWF0ZU1vY2tQcmV2VHggdG8gZ2VuZXJhdGUgYSByZWFsaXN0aWMgdHhpZCBmb3IgdGhlIHVuc3BlbnQuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RzIHRoYXQgbmVlZCBhIHZhbGlkIHVuc3BlbnQgYnV0IGRvbid0IHJlcXVpcmUgdGhlIHByZXZUeCBidWZmZXIuXG4gKlxuICogQHBhcmFtIGFkZHJlc3MgLSBUaGUgd2FsbGV0IGFkZHJlc3MgZm9yIHRoZSB1bnNwZW50XG4gKiBAcGFyYW0gY2hhaW4gLSBUaGUgZGVyaXZhdGlvbiBjaGFpblxuICogQHBhcmFtIGluZGV4IC0gVGhlIGRlcml2YXRpb24gaW5kZXhcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSBpbiBzYXRvc2hpcyAoYmlnaW50KVxuICogQHBhcmFtIG5ldHdvcmsgLSBUaGUgbmV0d29yayB0byBnZXQgdGhlIG91dHB1dCBzY3JpcHRcbiAqIEByZXR1cm5zIFdhbGxldFVuc3BlbnQgd2l0aCBhIHZhbGlkIHR4aWQgZnJvbSBhIHdhc20tdXR4byBnZW5lcmF0ZWQgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhc21XYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBiaWdpbnQ+KFxuICBhZGRyZXNzOiBzdHJpbmcsXG4gIGNoYWluOiBDaGFpbkNvZGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIHZhbHVlOiBUTnVtYmVyLFxuICBuZXR3b3JrOiBOZXR3b3JrQXJnXG4pOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+IHtcbiAgLy8gR2V0IG91dHB1dCBzY3JpcHQgZnJvbSBhZGRyZXNzIHVzaW5nIGNvcnJlY3Qgd2FzbS11dHhvIGZ1bmN0aW9uXG4gIGNvbnN0IG91dHB1dFNjcmlwdCA9IHdhc21VdHhvLmFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbihhZGRyZXNzLCB0b1dhc21VdHhvQ29pbk5hbWUodG9Db2luTmFtZShuZXR3b3JrKSkpO1xuXG4gIC8vIENyZWF0ZSBhIG1vY2sgdHJhbnNhY3Rpb24gd2l0aCBvdXRwdXQgYXQgdm91dD0wXG4gIGNvbnN0IHsgdHhpZCB9ID0gY3JlYXRlTW9ja1ByZXZUeCgwLCBvdXRwdXRTY3JpcHQsIEJpZ0ludCh2YWx1ZSkpO1xuXG4gIHJldHVybiB7XG4gICAgaWQ6IGAke3R4aWR9OjBgLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9jayBwcmV2aW91cyB0cmFuc2FjdGlvbiB1c2luZyB3YXNtLXV0eG8ncyBsb3ctbGV2ZWwgUHNidCBjbGFzcy5cbiAqXG4gKiBDcmVhdGVzIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RydWN0dXJlIHdpdGg6XG4gKiAtIEEgcDJ3cGtoIGlucHV0IChzZWd3aXQsIGVhc3kgdG8gY29uc3RydWN0KVxuICogLSBPdXRwdXRzIGluY2x1ZGluZyB0aGUgdGFyZ2V0IG91dHB1dCBhdCB0aGUgc3BlY2lmaWVkIHZvdXRcbiAqIC0gUmVhc29uYWJsZSBmZWUgcmF0ZSAoaW5wdXQgdmFsdWUgc2xpZ2h0bHkgaGlnaGVyIHRoYW4gb3V0cHV0IHN1bSlcbiAqXG4gKiBAcGFyYW0gdm91dCAtIFRoZSBvdXRwdXQgaW5kZXggd2hlcmUgdGhlIHRhcmdldCBvdXRwdXQgc2hvdWxkIGJlIHBsYWNlZFxuICogQHBhcmFtIG91dHB1dFNjcmlwdCAtIFRoZSBzY3JpcHRQdWJLZXkgZm9yIHRoZSB0YXJnZXQgb3V0cHV0XG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgaW4gc2F0b3NoaXMgZm9yIHRoZSB0YXJnZXQgb3V0cHV0XG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBwcmV2VHggYnVmZmVyIGFuZCB0aGUgdHJhbnNhY3Rpb24ncyB0eGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrUHJldlR4KFxuICB2b3V0OiBudW1iZXIsXG4gIG91dHB1dFNjcmlwdDogVWludDhBcnJheSxcbiAgdmFsdWU6IGJpZ2ludFxuKTogeyBwcmV2VHg6IEJ1ZmZlcjsgdHhpZDogc3RyaW5nIH0ge1xuICAvLyBDcmVhdGUgYSBwMndwa2ggc2NyaXB0IGZvciB0aGUgZHVtbXkgaW5wdXRcbiAgLy8gcDJ3cGtoOiBPUF8wIDwyMC1ieXRlLWhhc2g+IC0gd2UgdXNlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoXG4gIGNvbnN0IGR1bW15SGFzaCA9IGdldFNlZWQoJ21vY2stcHJldi10eC1pbnB1dCcpLnN1YmFycmF5KDAsIDIwKTtcbiAgY29uc3QgcDJ3cGtoU2NyaXB0ID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MTQsIC4uLmR1bW15SGFzaF0pO1xuXG4gIC8vIENhbGN1bGF0ZSB0b3RhbCBvdXRwdXQgdmFsdWVcbiAgY29uc3QgZHVtbXlPdXRwdXRWYWx1ZSA9IEJpZ0ludCgxMDAwKTsgLy8gMTAwMCBzYXRvc2hpcyBwZXIgZHVtbXkgb3V0cHV0XG4gIGNvbnN0IHRvdGFsT3V0cHV0VmFsdWUgPSBkdW1teU91dHB1dFZhbHVlICogQmlnSW50KHZvdXQpICsgdmFsdWU7XG5cbiAgLy8gSW5wdXQgdmFsdWUgPSBvdXRwdXQgdmFsdWUgKyBzbWFsbCBmZWUgKDEwMDAgc2F0IC0gcmVhc29uYWJsZSBmZWUpXG4gIGNvbnN0IGlucHV0VmFsdWUgPSB0b3RhbE91dHB1dFZhbHVlICsgQmlnSW50KDEwMDApO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHVzaW5nIFdyYXBQc2J0IChleHBvcnRlZCBhcyBQc2J0KVxuICBjb25zdCBwc2J0ID0gbmV3IHdhc21VdHhvLlBzYnQoMiwgMCk7XG5cbiAgLy8gQWRkIGR1bW15IHNlZ3dpdCBpbnB1dCAtIHAyd3BraFxuICBwc2J0LmFkZElucHV0KFxuICAgICcwMScucmVwZWF0KDMyKSwgLy8gbm9uLXplcm8gdHhpZCB0byBhdm9pZCBjb2luYmFzZSBkZXRlY3Rpb25cbiAgICAwLFxuICAgIGlucHV0VmFsdWUsXG4gICAgcDJ3cGtoU2NyaXB0XG4gICk7XG5cbiAgLy8gQWRkIGR1bW15IG91dHB1dHMgYmVmb3JlIHRoZSB0YXJnZXQgdm91dFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZvdXQ7IGkrKykge1xuICAgIHBzYnQuYWRkT3V0cHV0KHAyd3BraFNjcmlwdCwgZHVtbXlPdXRwdXRWYWx1ZSk7XG4gIH1cblxuICAvLyBBZGQgdGhlIHRhcmdldCBvdXRwdXQgYXQgdGhlIHNwZWNpZmllZCB2b3V0XG4gIHBzYnQuYWRkT3V0cHV0KG91dHB1dFNjcmlwdCwgdmFsdWUpO1xuXG4gIC8vIEdldCB0aGUgdW5zaWduZWQgdHJhbnNhY3Rpb24gYnl0ZXNcbiAgLy8gTm90ZTogVGhpcyBpcyBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0cnVjdHVyZSB3aXRob3V0IHNpZ25hdHVyZXNcbiAgLy8gRm9yIHByZXZUeCBwdXJwb3Nlcywgd2UganVzdCBuZWVkIHRoZSBvdXRwdXQgc2NyaXB0cyBhbmQgdmFsdWVzXG4gIGNvbnN0IHR4Qnl0ZXMgPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcblxuICAvLyBQYXJzZSB3aXRoIHdhc20tdXR4byBUcmFuc2FjdGlvbiB0byBnZXQgdGhlIHR4aWRcbiAgY29uc3QgdHggPSB3YXNtVXR4by5UcmFuc2FjdGlvbi5mcm9tQnl0ZXModHhCeXRlcyk7XG4gIGNvbnN0IHR4aWQgPSB0eC5nZXRJZCgpO1xuXG4gIHJldHVybiB7XG4gICAgcHJldlR4OiBCdWZmZXIuZnJvbSh0eEJ5dGVzKSxcbiAgICB0eGlkLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB1bnNwZW50IHdpdGggcHJldlR4IHVzaW5nIHdhc20tdXR4byBvbmx5IChubyB1dHhvbGliIGRlcGVuZGVuY3kpLlxuICogVGhlIHByZXZUeCBpcyBidWlsdCB1c2luZyB3YXNtLXV0eG8ncyBsb3ctbGV2ZWwgUHNidCBjbGFzcy5cbiAqXG4gKiBLZXk6IFRoZSB1bnNwZW50IGlkIHVzZXMgdGhlIGFjdHVhbCB0eGlkIGZyb20gdGhlIGdlbmVyYXRlZCBwcmV2VHgsXG4gKiBlbnN1cmluZyB0aGUgTW9ja1JlY292ZXJ5UHJvdmlkZXIgcmV0dXJucyB0aGUgY29ycmVjdCBwcmV2VHguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Vuc3BlbnRXaXRoUHJldlR4KFxuICBpbnB1dDogSW5wdXQsXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHJvb3RXYWxsZXRLZXlzOiBXYXNtUm9vdFdhbGxldEtleXNcbik6IFdhbGxldFVuc3BlbnRXaXRoUHJldlR4PGJpZ2ludD4ge1xuICBjb25zdCBzY3JpcHRUeXBlID0gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogaW5wdXQuc2NyaXB0VHlwZTtcbiAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShzY3JpcHRUeXBlKTtcbiAgY29uc3QgY29pbk5hbWUgPSB0b0NvaW5OYW1lKG5ldHdvcmspO1xuXG4gIC8vIEdldCB0aGUgb3V0cHV0IHNjcmlwdCBmb3IgdGhlIHdhbGxldCBhZGRyZXNzXG4gIGNvbnN0IG91dHB1dFNjcmlwdCA9IHdhc21VdHhvLmZpeGVkU2NyaXB0V2FsbGV0Lm91dHB1dFNjcmlwdChcbiAgICByb290V2FsbGV0S2V5cyxcbiAgICBjaGFpbixcbiAgICBpbmRleCxcbiAgICB0b1dhc21VdHhvQ29pbk5hbWUoY29pbk5hbWUpXG4gICk7XG5cbiAgLy8gQ3JlYXRlIG1vY2sgcHJldlR4IHdpdGggb3V0cHV0IGF0IHZvdXQ9MFxuICBjb25zdCB7IHByZXZUeCwgdHhpZCB9ID0gY3JlYXRlTW9ja1ByZXZUeCgwLCBvdXRwdXRTY3JpcHQsIGlucHV0LnZhbHVlKTtcblxuICAvLyBHZXQgdGhlIHdhbGxldCBhZGRyZXNzXG4gIGNvbnN0IGFkZHJlc3MgPSBnZXRXYWxsZXRBZGRyZXNzKHRvQ29pbk5hbWUobmV0d29yayksIHJvb3RXYWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gIC8vIFVzZSB0aGUgYWN0dWFsIHR4aWQgZnJvbSB0aGUgcHJldlR4IGluIHRoZSB1bnNwZW50IGlkXG4gIHJldHVybiB7XG4gICAgaWQ6IGAke3R4aWR9OjBgLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWU6IGlucHV0LnZhbHVlLFxuICAgIHByZXZUeCxcbiAgfTtcbn1cbiJdfQ==
@@ -4,11 +4,11 @@ import { AbstractUtxoCoin } from '../../../src';
4
4
  import type { UtxoCoinName } from '../../../src/names';
5
5
  export declare const defaultBitGo: import("@bitgo/sdk-test").TestableBG & BitGoAPI;
6
6
  /**
7
- * Get utxolib Network for a coin name. For test infrastructure only.
7
+ * Get the utxolib network for a coin name from the canonical statics definition.
8
8
  */
9
9
  export declare function getNetworkForCoinName(coinName: string): utxolib.Network;
10
10
  /**
11
- * Get coin name for a utxolib Network. For test infrastructure only.
11
+ * Get the canonical test coin for a utxolib network.
12
12
  */
13
13
  export declare function getCoinNameForNetwork(network: utxolib.Network): UtxoCoinName;
14
14
  export declare const utxoCoins: AbstractUtxoCoin[];
@@ -1 +1 @@
1
- {"version":3,"file":"utxoCoins.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/utxoCoins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,gBAAgB,EAsBjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,YAAY,iDAAgD,CAAC;AA0B1E;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAMvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAO5E;AAwCD,eAAO,MAAM,SAAS,oBAAiB,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,gCAAiC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAEpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAO1D;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAO1E;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,CAiB7G"}
1
+ {"version":3,"file":"utxoCoins.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/utxoCoins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,OAAO,EACL,gBAAgB,EAsBjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,YAAY,iDAAgD,CAAC;AAM1E;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAYvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAO5E;AAwCD,eAAO,MAAM,SAAS,oBAAiB,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,gCAAiC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAEpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAO1D;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAO1E;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,CAiB7G"}
@@ -43,49 +43,33 @@ exports.getScriptTypes = getScriptTypes;
43
43
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
44
44
  const sdk_api_1 = require("@bitgo/sdk-api");
45
45
  const sdk_test_1 = require("@bitgo/sdk-test");
46
+ const statics_1 = require("@bitgo/statics");
46
47
  const src_1 = require("../../../src");
47
48
  exports.defaultBitGo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
48
- /** Map coin names to utxolib network objects for test infrastructure */
49
- const coinNameToNetwork = {
50
- btc: utxolib.networks.bitcoin,
51
- tbtc: utxolib.networks.testnet,
52
- tbtcsig: utxolib.networks.bitcoinPublicSignet,
53
- tbtc4: utxolib.networks.bitcoinTestnet4,
54
- tbtcbgsig: utxolib.networks.bitcoinBitGoSignet,
55
- bch: utxolib.networks.bitcoincash,
56
- tbch: utxolib.networks.bitcoincashTestnet,
57
- bcha: utxolib.networks.ecash,
58
- tbcha: utxolib.networks.ecashTest,
59
- bsv: utxolib.networks.bitcoinsv,
60
- tbsv: utxolib.networks.bitcoinsvTestnet,
61
- btg: utxolib.networks.bitcoingold,
62
- dash: utxolib.networks.dash,
63
- tdash: utxolib.networks.dashTest,
64
- doge: utxolib.networks.dogecoin,
65
- tdoge: utxolib.networks.dogecoinTest,
66
- ltc: utxolib.networks.litecoin,
67
- tltc: utxolib.networks.litecoinTest,
68
- zec: utxolib.networks.zcash,
69
- tzec: utxolib.networks.zcashTest,
70
- };
49
+ function isUtxolibNetworkName(name) {
50
+ return Object.prototype.hasOwnProperty.call(utxolib.networks, name);
51
+ }
71
52
  /**
72
- * Get utxolib Network for a coin name. For test infrastructure only.
53
+ * Get the utxolib network for a coin name from the canonical statics definition.
73
54
  */
74
55
  function getNetworkForCoinName(coinName) {
75
- const network = coinNameToNetwork[coinName];
76
- if (!network) {
56
+ const coin = statics_1.coins.getOrUndefined(coinName);
57
+ if (!(coin instanceof statics_1.UtxoCoin)) {
77
58
  throw new Error(`Unknown coin name: ${coinName}`);
78
59
  }
79
- return network;
60
+ const networkName = coin.network.utxolibName;
61
+ if (!isUtxolibNetworkName(networkName)) {
62
+ throw new Error(`Unknown utxolib network ${networkName} for coin ${coinName}`);
63
+ }
64
+ return utxolib.networks[networkName];
80
65
  }
81
66
  /**
82
- * Get coin name for a utxolib Network. For test infrastructure only.
67
+ * Get the canonical test coin for a utxolib network.
83
68
  */
84
69
  function getCoinNameForNetwork(network) {
85
- for (const [name, n] of Object.entries(coinNameToNetwork)) {
86
- if (n === network) {
87
- return name;
88
- }
70
+ const coin = exports.utxoCoins.find((coin) => getNetworkForCoinName(coin.name) === network);
71
+ if (coin) {
72
+ return coin.name;
89
73
  }
90
74
  throw new Error(`Unknown network: ${utxolib.getNetworkName(network)}`);
91
75
  }
@@ -172,4 +156,4 @@ function getScriptTypes(coin, txFormat) {
172
156
  return coin.supportsAddressType(t);
173
157
  });
174
158
  }
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0NvaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3V0aWwvdXR4b0NvaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJEQSxzREFNQztBQUtELHNEQU9DO0FBcURELDBDQUVDO0FBRUQsa0NBT0M7QUFFRCxzREFPQztBQUlELHdDQWlCQztBQTNLRCx5REFBMkM7QUFDM0MsNENBQTBDO0FBQzFDLDhDQUE0QztBQUU1QyxzQ0F1QnNCO0FBR1QsUUFBQSxZQUFZLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRTFFLHdFQUF3RTtBQUN4RSxNQUFNLGlCQUFpQixHQUFvQztJQUN6RCxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPO0lBQzdCLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU87SUFDOUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CO0lBQzdDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWU7SUFDdkMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCO0lBQzlDLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVc7SUFDakMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCO0lBQ3pDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7SUFDNUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUNqQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0lBQy9CLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtJQUN2QyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXO0lBQ2pDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUk7SUFDM0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUTtJQUNoQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRO0lBQy9CLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVk7SUFDcEMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUTtJQUM5QixJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBQ25DLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7SUFDM0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztDQUNqQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxPQUF3QjtJQUM1RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFvQixDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELE1BQU0sZUFBZSxHQUFHO0lBQ3RCLFNBQUc7SUFDSCxVQUFJO0lBQ0osV0FBSztJQUNMLGFBQU87SUFDUCxlQUFTO0lBQ1QsU0FBRztJQUNILFVBQUk7SUFDSixVQUFJO0lBQ0osV0FBSztJQUNMLFNBQUc7SUFDSCxVQUFJO0lBQ0osU0FBRztJQUNILFNBQUc7SUFDSCxVQUFJO0lBQ0osVUFBSTtJQUNKLFdBQUs7SUFDTCxVQUFJO0lBQ0osV0FBSztJQUNMLFNBQUc7SUFDSCxVQUFJO0NBQ0wsQ0FBQztBQUVGLFNBQVMsWUFBWSxDQUFDLFFBQWtCLG9CQUFZO0lBQ2xELE9BQU8sZUFBZTtTQUNuQixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQW9CLEVBQUU7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDYixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0MsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakgsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRVksUUFBQSxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUM7QUFFeEM7Ozs7O0dBS0c7QUFDVSxRQUFBLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQVUsQ0FBQztBQUUvRDs7R0FFRztBQUNILFNBQWdCLGVBQWU7SUFDN0IsT0FBTyx3QkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLEtBQUssTUFBTSxDQUFDLElBQUksaUJBQVMsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxDQUFrQjtJQUN0RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLGlCQUFTLEVBQUUsQ0FBQztRQUMxQixJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUlELFNBQWdCLGNBQWMsQ0FBQyxJQUFzQixFQUFFLFFBQWtCO0lBQ3ZFLE9BQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxxQkFBcUIsQ0FBVyxDQUFDLE1BQU0sQ0FDOUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNKLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBQSxrQ0FBNEIsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxLQUFLLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3RFLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbyB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0VXR4b0NvaW4sXG4gIEJ0YyxcbiAgVGJ0YyxcbiAgVGJ0YzQsXG4gIFRidGNzaWcsXG4gIFRidGNiZ3NpZyxcbiAgQmNoLFxuICBUYmNoLFxuICBCY2hhLFxuICBUYmNoYSxcbiAgQnN2LFxuICBUYnN2LFxuICBCdGcsXG4gIEx0YyxcbiAgVGx0YyxcbiAgRGFzaCxcbiAgVGRhc2gsXG4gIERvZ2UsXG4gIFRkb2dlLFxuICBaZWMsXG4gIFR6ZWMsXG4gIGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Qml0R28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG5cbi8qKiBNYXAgY29pbiBuYW1lcyB0byB1dHhvbGliIG5ldHdvcmsgb2JqZWN0cyBmb3IgdGVzdCBpbmZyYXN0cnVjdHVyZSAqL1xuY29uc3QgY29pbk5hbWVUb05ldHdvcms6IFJlY29yZDxzdHJpbmcsIHV0eG9saWIuTmV0d29yaz4gPSB7XG4gIGJ0YzogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICB0YnRjOiB1dHhvbGliLm5ldHdvcmtzLnRlc3RuZXQsXG4gIHRidGNzaWc6IHV0eG9saWIubmV0d29ya3MuYml0Y29pblB1YmxpY1NpZ25ldCxcbiAgdGJ0YzQ6IHV0eG9saWIubmV0d29ya3MuYml0Y29pblRlc3RuZXQ0LFxuICB0YnRjYmdzaWc6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbkJpdEdvU2lnbmV0LFxuICBiY2g6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbmNhc2gsXG4gIHRiY2g6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbmNhc2hUZXN0bmV0LFxuICBiY2hhOiB1dHhvbGliLm5ldHdvcmtzLmVjYXNoLFxuICB0YmNoYTogdXR4b2xpYi5uZXR3b3Jrcy5lY2FzaFRlc3QsXG4gIGJzdjogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luc3YsXG4gIHRic3Y6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbnN2VGVzdG5ldCxcbiAgYnRnOiB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5nb2xkLFxuICBkYXNoOiB1dHhvbGliLm5ldHdvcmtzLmRhc2gsXG4gIHRkYXNoOiB1dHhvbGliLm5ldHdvcmtzLmRhc2hUZXN0LFxuICBkb2dlOiB1dHhvbGliLm5ldHdvcmtzLmRvZ2Vjb2luLFxuICB0ZG9nZTogdXR4b2xpYi5uZXR3b3Jrcy5kb2dlY29pblRlc3QsXG4gIGx0YzogdXR4b2xpYi5uZXR3b3Jrcy5saXRlY29pbixcbiAgdGx0YzogdXR4b2xpYi5uZXR3b3Jrcy5saXRlY29pblRlc3QsXG4gIHplYzogdXR4b2xpYi5uZXR3b3Jrcy56Y2FzaCxcbiAgdHplYzogdXR4b2xpYi5uZXR3b3Jrcy56Y2FzaFRlc3QsXG59O1xuXG4vKipcbiAqIEdldCB1dHhvbGliIE5ldHdvcmsgZm9yIGEgY29pbiBuYW1lLiBGb3IgdGVzdCBpbmZyYXN0cnVjdHVyZSBvbmx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW5OYW1lOiBzdHJpbmcpOiB1dHhvbGliLk5ldHdvcmsge1xuICBjb25zdCBuZXR3b3JrID0gY29pbk5hbWVUb05ldHdvcmtbY29pbk5hbWVdO1xuICBpZiAoIW5ldHdvcmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29pbiBuYW1lOiAke2NvaW5OYW1lfWApO1xuICB9XG4gIHJldHVybiBuZXR3b3JrO1xufVxuXG4vKipcbiAqIEdldCBjb2luIG5hbWUgZm9yIGEgdXR4b2xpYiBOZXR3b3JrLiBGb3IgdGVzdCBpbmZyYXN0cnVjdHVyZSBvbmx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29pbk5hbWVGb3JOZXR3b3JrKG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IFV0eG9Db2luTmFtZSB7XG4gIGZvciAoY29uc3QgW25hbWUsIG5dIG9mIE9iamVjdC5lbnRyaWVzKGNvaW5OYW1lVG9OZXR3b3JrKSkge1xuICAgIGlmIChuID09PSBuZXR3b3JrKSB7XG4gICAgICByZXR1cm4gbmFtZSBhcyBVdHhvQ29pbk5hbWU7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBuZXR3b3JrOiAke3V0eG9saWIuZ2V0TmV0d29ya05hbWUobmV0d29yayl9YCk7XG59XG5cbmNvbnN0IHV0eG9Db2luQ2xhc3NlcyA9IFtcbiAgQnRjLFxuICBUYnRjLFxuICBUYnRjNCxcbiAgVGJ0Y3NpZyxcbiAgVGJ0Y2Jnc2lnLFxuICBCY2gsXG4gIFRiY2gsXG4gIEJjaGEsXG4gIFRiY2hhLFxuICBCc3YsXG4gIFRic3YsXG4gIEJ0ZyxcbiAgTHRjLFxuICBUbHRjLFxuICBEYXNoLFxuICBUZGFzaCxcbiAgRG9nZSxcbiAgVGRvZ2UsXG4gIFplYyxcbiAgVHplYyxcbl07XG5cbmZ1bmN0aW9uIGdldFV0eG9Db2lucyhiaXRnbzogQml0R29BUEkgPSBkZWZhdWx0Qml0R28pOiBBYnN0cmFjdFV0eG9Db2luW10ge1xuICByZXR1cm4gdXR4b0NvaW5DbGFzc2VzXG4gICAgLm1hcCgoY2xzKTogQWJzdHJhY3RVdHhvQ29pbiA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2xzLmNyZWF0ZUluc3RhbmNlKGJpdGdvKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlcnJvciBjcmVhdGluZyAke2Nscy5uYW1lfTogJHtlfWApO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IG5ldHdvcmtMaXN0ID0gdXR4b2xpYi5nZXROZXR3b3JrTGlzdCgpO1xuICAgICAgcmV0dXJuIG5ldHdvcmtMaXN0LmluZGV4T2YoZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGEubmFtZSkpIC0gbmV0d29ya0xpc3QuaW5kZXhPZihnZXROZXR3b3JrRm9yQ29pbk5hbWUoYi5uYW1lKSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dHhvQ29pbnMgPSBnZXRVdHhvQ29pbnMoKTtcblxuLyoqXG4gKiBNaW5pbWFsIHN1YnNldCBvZiBjb2lucyBmb3IgY29tcHJlaGVuc2l2ZSB0ZXN0IGNvdmVyYWdlLlxuICogLSBidGM6IEZ1bGwgZmVhdHVyZSBzZXQgKHNlZ3dpdCwgdGFwcm9vdCwgbXVzaWcyKVxuICogLSBiY2g6IHJlcGxheSBwcm90ZWN0aW9uIGFkZHJlc3Nlc1xuICogLSB6ZWM6IHNwZWNpYWwgdHJhbnNhY3Rpb24gZm9ybWF0IChPdmVyd2ludGVyL1NhcGxpbmcpXG4gKi9cbmV4cG9ydCBjb25zdCBtaW5VdHhvQ29pbk5hbWVzID0gWydidGMnLCAnYmNoJywgJ3plYyddIGFzIGNvbnN0O1xuXG4vKipcbiAqIEdldCBtaW5pbWFsIHNldCBvZiBjb2lucyBmb3IgdGVzdGluZy4gQ292ZXJzIH45OSUgb2YgZmVhdHVyZSBwYXRocy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pblV0eG9Db2lucygpOiBBYnN0cmFjdFV0eG9Db2luW10ge1xuICByZXR1cm4gbWluVXR4b0NvaW5OYW1lcy5tYXAoZ2V0VXR4b0NvaW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXR4b0NvaW4obmFtZTogc3RyaW5nKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5nZXRDaGFpbigpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIHdpdGggbmFtZSAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVdHhvQ29pbkZvck5ldHdvcmsobjogdXR4b2xpYi5OZXR3b3JrKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGMubmFtZSkgPT09IG4pIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYG5vIGNvaW4gZm9yIG5ldHdvcmsgJHt1dHhvbGliLmdldE5ldHdvcmtOYW1lKG4pfWApO1xufVxuXG5leHBvcnQgdHlwZSBUeEZvcm1hdCA9ICdsZWdhY3knIHwgJ3BzYnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyaXB0VHlwZXMoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgdHhGb3JtYXQ6IFR4Rm9ybWF0KTogdXR4b2xpYi50ZXN0dXRpbC5JbnB1dFNjcmlwdFR5cGVbXSB7XG4gIHJldHVybiAoWydwMnNoUDJwaycsICdwMnNoJywgJ3Ayc2hQMndzaCcsICdwMndzaCcsICdwMnRyJywgJ3AydHJNdXNpZzInLCAndGFwcm9vdEtleVBhdGhTcGVuZCddIGFzIGNvbnN0KS5maWx0ZXIoXG4gICAgKHQpID0+IHtcbiAgICAgIGlmICh0ID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgIHJldHVybiBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKGNvaW4ubmFtZSkubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICAgIGlmICh0eEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgICAgaWYgKHQgPT09ICdwMnRyJyB8fCB0ID09PSAncDJ0ck11c2lnMicgfHwgdCA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodCA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgICAgIHJldHVybiBjb2luLnN1cHBvcnRzQWRkcmVzc1R5cGUoJ3AydHJNdXNpZzInKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2luLnN1cHBvcnRzQWRkcmVzc1R5cGUodCk7XG4gICAgfVxuICApO1xufVxuIl19
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0NvaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3V0aWwvdXR4b0NvaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdDQSxzREFZQztBQUtELHNEQU9DO0FBcURELDBDQUVDO0FBRUQsa0NBT0M7QUFFRCxzREFPQztBQUlELHdDQWlCQztBQTlKRCx5REFBMkM7QUFDM0MsNENBQTBDO0FBQzFDLDhDQUE0QztBQUM1Qyw0Q0FBaUQ7QUFFakQsc0NBdUJzQjtBQUdULFFBQUEsWUFBWSxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUUxRSxTQUFTLG9CQUFvQixDQUFDLElBQVk7SUFDeEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxrQkFBUSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM3QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixXQUFXLGFBQWEsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNqRixDQUFDO0lB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QUFDLENBQUM7QUFDdEUsQ0FBQztBQUlELFNBQWdCLGNBQWMsQ0FBQyxJQUFzQixFQUFFLFFBQWtCO0lBQ3ZFLE9BQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxxQkFBcUIsQ0FBVyxDQUFDLE1BQU0sQ0FDOUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNKLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBQSxrQ0FBNEIsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxLQUFLLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3RFLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbyB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBjb2lucywgVXR4b0NvaW4gfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0VXR4b0NvaW4sXG4gIEJ0YyxcbiAgVGJ0YyxcbiAgVGJ0YzQsXG4gIFRidGNzaWcsXG4gIFRidGNiZ3NpZyxcbiAgQmNoLFxuICBUYmNoLFxuICBCY2hhLFxuICBUYmNoYSxcbiAgQnN2LFxuICBUYnN2LFxuICBCdGcsXG4gIEx0YyxcbiAgVGx0YyxcbiAgRGFzaCxcbiAgVGRhc2gsXG4gIERvZ2UsXG4gIFRkb2dlLFxuICBaZWMsXG4gIFR6ZWMsXG4gIGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Qml0R28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG5cbmZ1bmN0aW9uIGlzVXR4b2xpYk5ldHdvcmtOYW1lKG5hbWU6IHN0cmluZyk6IG5hbWUgaXMgdXR4b2xpYi5OZXR3b3JrTmFtZSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodXR4b2xpYi5uZXR3b3JrcywgbmFtZSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB1dHhvbGliIG5ldHdvcmsgZm9yIGEgY29pbiBuYW1lIGZyb20gdGhlIGNhbm9uaWNhbCBzdGF0aWNzIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbk5hbWU6IHN0cmluZyk6IHV0eG9saWIuTmV0d29yayB7XG4gIGNvbnN0IGNvaW4gPSBjb2lucy5nZXRPclVuZGVmaW5lZChjb2luTmFtZSk7XG4gIGlmICghKGNvaW4gaW5zdGFuY2VvZiBVdHhvQ29pbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29pbiBuYW1lOiAke2NvaW5OYW1lfWApO1xuICB9XG5cbiAgY29uc3QgbmV0d29ya05hbWUgPSBjb2luLm5ldHdvcmsudXR4b2xpYk5hbWU7XG4gIGlmICghaXNVdHhvbGliTmV0d29ya05hbWUobmV0d29ya05hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHV0eG9saWIgbmV0d29yayAke25ldHdvcmtOYW1lfSBmb3IgY29pbiAke2NvaW5OYW1lfWApO1xuICB9XG5cbiAgcmV0dXJuIHV0eG9saWIubmV0d29ya3NbbmV0d29ya05hbWVdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgY2Fub25pY2FsIHRlc3QgY29pbiBmb3IgYSB1dHhvbGliIG5ldHdvcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2luTmFtZUZvck5ldHdvcmsobmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogVXR4b0NvaW5OYW1lIHtcbiAgY29uc3QgY29pbiA9IHV0eG9Db2lucy5maW5kKChjb2luKSA9PiBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSA9PT0gbmV0d29yayk7XG4gIGlmIChjb2luKSB7XG4gICAgcmV0dXJuIGNvaW4ubmFtZTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBuZXR3b3JrOiAke3V0eG9saWIuZ2V0TmV0d29ya05hbWUobmV0d29yayl9YCk7XG59XG5cbmNvbnN0IHV0eG9Db2luQ2xhc3NlcyA9IFtcbiAgQnRjLFxuICBUYnRjLFxuICBUYnRjNCxcbiAgVGJ0Y3NpZyxcbiAgVGJ0Y2Jnc2lnLFxuICBCY2gsXG4gIFRiY2gsXG4gIEJjaGEsXG4gIFRiY2hhLFxuICBCc3YsXG4gIFRic3YsXG4gIEJ0ZyxcbiAgTHRjLFxuICBUbHRjLFxuICBEYXNoLFxuICBUZGFzaCxcbiAgRG9nZSxcbiAgVGRvZ2UsXG4gIFplYyxcbiAgVHplYyxcbl07XG5cbmZ1bmN0aW9uIGdldFV0eG9Db2lucyhiaXRnbzogQml0R29BUEkgPSBkZWZhdWx0Qml0R28pOiBBYnN0cmFjdFV0eG9Db2luW10ge1xuICByZXR1cm4gdXR4b0NvaW5DbGFzc2VzXG4gICAgLm1hcCgoY2xzKTogQWJzdHJhY3RVdHhvQ29pbiA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2xzLmNyZWF0ZUluc3RhbmNlKGJpdGdvKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlcnJvciBjcmVhdGluZyAke2Nscy5uYW1lfTogJHtlfWApO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IG5ldHdvcmtMaXN0ID0gdXR4b2xpYi5nZXROZXR3b3JrTGlzdCgpO1xuICAgICAgcmV0dXJuIG5ldHdvcmtMaXN0LmluZGV4T2YoZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGEubmFtZSkpIC0gbmV0d29ya0xpc3QuaW5kZXhPZihnZXROZXR3b3JrRm9yQ29pbk5hbWUoYi5uYW1lKSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dHhvQ29pbnMgPSBnZXRVdHhvQ29pbnMoKTtcblxuLyoqXG4gKiBNaW5pbWFsIHN1YnNldCBvZiBjb2lucyBmb3IgY29tcHJlaGVuc2l2ZSB0ZXN0IGNvdmVyYWdlLlxuICogLSBidGM6IEZ1bGwgZmVhdHVyZSBzZXQgKHNlZ3dpdCwgdGFwcm9vdCwgbXVzaWcyKVxuICogLSBiY2g6IHJlcGxheSBwcm90ZWN0aW9uIGFkZHJlc3Nlc1xuICogLSB6ZWM6IHNwZWNpYWwgdHJhbnNhY3Rpb24gZm9ybWF0IChPdmVyd2ludGVyL1NhcGxpbmcpXG4gKi9cbmV4cG9ydCBjb25zdCBtaW5VdHhvQ29pbk5hbWVzID0gWydidGMnLCAnYmNoJywgJ3plYyddIGFzIGNvbnN0O1xuXG4vKipcbiAqIEdldCBtaW5pbWFsIHNldCBvZiBjb2lucyBmb3IgdGVzdGluZy4gQ292ZXJzIH45OSUgb2YgZmVhdHVyZSBwYXRocy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pblV0eG9Db2lucygpOiBBYnN0cmFjdFV0eG9Db2luW10ge1xuICByZXR1cm4gbWluVXR4b0NvaW5OYW1lcy5tYXAoZ2V0VXR4b0NvaW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXR4b0NvaW4obmFtZTogc3RyaW5nKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5nZXRDaGFpbigpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIHdpdGggbmFtZSAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVdHhvQ29pbkZvck5ldHdvcmsobjogdXR4b2xpYi5OZXR3b3JrKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGMubmFtZSkgPT09IG4pIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYG5vIGNvaW4gZm9yIG5ldHdvcmsgJHt1dHhvbGliLmdldE5ldHdvcmtOYW1lKG4pfWApO1xufVxuXG5leHBvcnQgdHlwZSBUeEZvcm1hdCA9ICdsZWdhY3knIHwgJ3BzYnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyaXB0VHlwZXMoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgdHhGb3JtYXQ6IFR4Rm9ybWF0KTogdXR4b2xpYi50ZXN0dXRpbC5JbnB1dFNjcmlwdFR5cGVbXSB7XG4gIHJldHVybiAoWydwMnNoUDJwaycsICdwMnNoJywgJ3Ayc2hQMndzaCcsICdwMndzaCcsICdwMnRyJywgJ3AydHJNdXNpZzInLCAndGFwcm9vdEtleVBhdGhTcGVuZCddIGFzIGNvbnN0KS5maWx0ZXIoXG4gICAgKHQpID0+IHtcbiAgICAgIGlmICh0ID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgIHJldHVybiBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKGNvaW4ubmFtZSkubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICAgIGlmICh0eEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgICAgaWYgKHQgPT09ICdwMnRyJyB8fCB0ID09PSAncDJ0ck11c2lnMicgfHwgdCA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodCA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgICAgIHJldHVybiBjb2luLnN1cHBvcnRzQWRkcmVzc1R5cGUoJ3AydHJNdXNpZzInKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2luLnN1cHBvcnRzQWRkcmVzc1R5cGUodCk7XG4gICAgfVxuICApO1xufVxuIl19