@bitgo/abstract-utxo 11.6.1 → 11.7.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 (76) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +14 -17
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +54 -86
  4. package/dist/cjs/src/impl/doge/doge.d.ts +0 -2
  5. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
  6. package/dist/cjs/src/impl/doge/doge.js +1 -4
  7. package/dist/cjs/src/keychains.d.ts +1 -2
  8. package/dist/cjs/src/keychains.d.ts.map +1 -1
  9. package/dist/cjs/src/keychains.js +3 -4
  10. package/dist/cjs/src/names.d.ts +0 -23
  11. package/dist/cjs/src/names.d.ts.map +1 -1
  12. package/dist/cjs/src/names.js +2 -140
  13. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  14. package/dist/cjs/src/recovery/backupKeyRecovery.js +3 -3
  15. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  16. package/dist/cjs/src/transaction/decode.js +2 -45
  17. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +0 -2
  18. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  19. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +1 -1
  20. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  21. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +1 -17
  22. package/dist/cjs/src/transaction/index.d.ts +0 -1
  23. package/dist/cjs/src/transaction/index.d.ts.map +1 -1
  24. package/dist/cjs/src/transaction/index.js +1 -2
  25. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  26. package/dist/cjs/src/transaction/signTransaction.js +1 -2
  27. package/dist/cjs/test/unit/address.js +24 -1
  28. package/dist/cjs/test/unit/buildSignSendLegacyFormat.js +3 -3
  29. package/dist/cjs/test/unit/customSigner.js +3 -3
  30. package/dist/cjs/test/unit/prebuildAndSign.js +5 -5
  31. package/dist/cjs/test/unit/signTransaction.js +9 -9
  32. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +15 -1
  33. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -3
  34. package/dist/cjs/test/unit/transaction.js +9 -9
  35. package/dist/cjs/test/unit/verifyTransaction.js +1 -21
  36. package/dist/cjs/test/unit/wallet.js +3 -3
  37. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  38. package/dist/esm/abstractUtxoCoin.d.ts +14 -17
  39. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  40. package/dist/esm/abstractUtxoCoin.js +57 -56
  41. package/dist/esm/impl/doge/doge.d.ts +0 -2
  42. package/dist/esm/impl/doge/doge.d.ts.map +1 -1
  43. package/dist/esm/impl/doge/doge.js +1 -4
  44. package/dist/esm/keychains.d.ts +1 -2
  45. package/dist/esm/keychains.d.ts.map +1 -1
  46. package/dist/esm/keychains.js +3 -4
  47. package/dist/esm/names.d.ts +0 -23
  48. package/dist/esm/names.d.ts.map +1 -1
  49. package/dist/esm/names.js +1 -102
  50. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  51. package/dist/esm/recovery/backupKeyRecovery.js +4 -4
  52. package/dist/esm/transaction/decode.d.ts.map +1 -1
  53. package/dist/esm/transaction/decode.js +2 -12
  54. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +0 -2
  55. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  56. package/dist/esm/transaction/fixedScript/signTransaction.js +1 -1
  57. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  58. package/dist/esm/transaction/fixedScript/verifyTransaction.js +1 -17
  59. package/dist/esm/transaction/index.d.ts +0 -1
  60. package/dist/esm/transaction/index.d.ts.map +1 -1
  61. package/dist/esm/transaction/index.js +1 -2
  62. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  63. package/dist/esm/transaction/signTransaction.js +1 -2
  64. package/package.json +6 -5
  65. package/dist/cjs/src/transaction/fetchInputs.d.ts +0 -27
  66. package/dist/cjs/src/transaction/fetchInputs.d.ts.map +0 -1
  67. package/dist/cjs/src/transaction/fetchInputs.js +0 -111
  68. package/dist/cjs/src/wasmUtil.d.ts +0 -34
  69. package/dist/cjs/src/wasmUtil.d.ts.map +0 -1
  70. package/dist/cjs/src/wasmUtil.js +0 -95
  71. package/dist/esm/transaction/fetchInputs.d.ts +0 -27
  72. package/dist/esm/transaction/fetchInputs.d.ts.map +0 -1
  73. package/dist/esm/transaction/fetchInputs.js +0 -74
  74. package/dist/esm/wasmUtil.d.ts +0 -34
  75. package/dist/esm/wasmUtil.d.ts.map +0 -1
  76. package/dist/esm/wasmUtil.js +0 -54
@@ -49,7 +49,7 @@ describe('signTransaction', function () {
49
49
  const userPrv = rootWalletKeys.user.toBase58();
50
50
  const pubs = util_1.keychainsBase58.map((v) => v.pub);
51
51
  function validatePsbt(txHex, targetSigCount, targetNonceCount) {
52
- const psbt = utxolib.bitgo.createPsbtFromHex(txHex, coin.network);
52
+ const psbt = utxolib.bitgo.createPsbtFromHex(txHex, (0, util_1.getNetworkForCoinName)(coin.name));
53
53
  psbt.data.inputs.forEach((input, index) => {
54
54
  const parsed = utxolib.bitgo.parsePsbtInput(input);
55
55
  if (parsed.scriptType === 'taprootKeyPathSpend') {
@@ -65,7 +65,7 @@ describe('signTransaction', function () {
65
65
  });
66
66
  }
67
67
  function validateTx(txHex, unspents, targetSigCount) {
68
- const tx = utxolib.bitgo.createTransactionFromHex(txHex, coin.network);
68
+ const tx = utxolib.bitgo.createTransactionFromHex(txHex, (0, util_1.getNetworkForCoinName)(coin.name));
69
69
  unspents.forEach((u, i) => {
70
70
  const sigCount = utxolib.bitgo.getStrictSignatureCount(tx.ins[i]);
71
71
  const expectedSigCount = utxolib.bitgo.isWalletUnspent(u) && !!targetSigCount ? 1 : 0;
@@ -77,7 +77,7 @@ describe('signTransaction', function () {
77
77
  const isTxWithTaprootKeyPathSpend = isPsbt && utxolib.bitgo.isTransactionWithKeyPathSpendInput(tx);
78
78
  const txHex = tx.toHex();
79
79
  function nockSignPsbt(psbtHex) {
80
- const psbt = utxolib.bitgo.createPsbtFromHex(psbtHex, coin.network);
80
+ const psbt = utxolib.bitgo.createPsbtFromHex(psbtHex, (0, util_1.getNetworkForCoinName)(coin.name));
81
81
  return nock(bgUrl)
82
82
  .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/signpsbt`, (body) => body.psbt)
83
83
  .reply(200, { psbt: psbt.setAllInputsMusig2NonceHD(rootWalletKeys.bitgo).toHex() });
@@ -165,7 +165,7 @@ describe('signTransaction', function () {
165
165
  .map((scriptType) => ({ scriptType, value: BigInt(1000) }));
166
166
  const unspentSum = inputs.reduce((prev, curr) => prev + curr.value, BigInt(0));
167
167
  const outputs = [{ scriptType: 'p2sh', value: unspentSum - BigInt(1000) }];
168
- const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, coin.network, rootWalletKeys, 'unsigned', {
168
+ const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, (0, util_1.getNetworkForCoinName)(coin.name), rootWalletKeys, 'unsigned', {
169
169
  p2shP2pkKey: replayProtectionKey,
170
170
  });
171
171
  for (const v of [false, true]) {
@@ -179,7 +179,7 @@ describe('signTransaction', function () {
179
179
  .map((scriptType) => ({ scriptType, value: BigInt(1000) }));
180
180
  const unspentSum = inputs.reduce((prev, cur) => prev + cur.value, BigInt(0));
181
181
  const outputs = [{ scriptType: 'p2sh', value: unspentSum - BigInt(1000) }];
182
- const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, coin.network, rootWalletKeys, 'unsigned', {
182
+ const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, (0, util_1.getNetworkForCoinName)(coin.name), rootWalletKeys, 'unsigned', {
183
183
  p2shP2pkKey: replayProtectionKey,
184
184
  });
185
185
  for (const v of [false, true]) {
@@ -195,8 +195,8 @@ describe('signTransaction', function () {
195
195
  }));
196
196
  const unspentSum = inputs.reduce((prev, curr) => prev + curr.value, BigInt(0));
197
197
  const outputs = [{ scriptType: 'p2sh', value: unspentSum - BigInt(1000) }];
198
- const txBuilder = utxo_lib_1.testutil.constructTxnBuilder(inputs, outputs, coin.network, rootWalletKeys, 'unsigned');
199
- const unspents = inputs.map((v, i) => utxo_lib_1.testutil.toTxnUnspent(v, i, coin.network, rootWalletKeys));
198
+ const txBuilder = utxo_lib_1.testutil.constructTxnBuilder(inputs, outputs, (0, util_1.getNetworkForCoinName)(coin.name), rootWalletKeys, 'unsigned');
199
+ const unspents = inputs.map((v, i) => utxo_lib_1.testutil.toTxnUnspent(v, i, (0, util_1.getNetworkForCoinName)(coin.name), rootWalletKeys));
200
200
  // Legacy format transactions are now deprecated and should throw ErrorDeprecatedTxFormat
201
201
  await assert.rejects(async () => {
202
202
  await signTransaction(txBuilder.buildIncomplete(), false, unspents);
@@ -206,7 +206,7 @@ describe('signTransaction', function () {
206
206
  const inputs = [{ scriptType: 'taprootKeyPathSpend', value: BigInt(1000) }];
207
207
  const unspentSum = inputs.reduce((prev, curr) => prev + curr.value, BigInt(0));
208
208
  const outputs = [{ scriptType: 'p2sh', value: unspentSum - BigInt(1000) }];
209
- const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, coin.network, rootWalletKeys, 'unsigned');
209
+ const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, (0, util_1.getNetworkForCoinName)(coin.name), rootWalletKeys, 'unsigned');
210
210
  await assert.rejects(async () => {
211
211
  await coin.signTransaction({
212
212
  txPrebuild: { txHex: psbt.toHex() },
@@ -220,4 +220,4 @@ describe('signTransaction', function () {
220
220
  });
221
221
  });
222
222
  });
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3NpZ25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlCQUFlO0FBQ2YsK0NBQWlDO0FBRWpDLHlEQUEyQztBQUMzQyw2QkFBOEI7QUFDOUIsOENBQTJDO0FBQzNDLDhDQUFpRDtBQUVqRCxtQ0FBZ0Y7QUFHaEYsaUNBQXlHO0FBRXpHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixNQUFNLEtBQUssR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxtQkFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO0lBRTdELE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLGtDQUFrQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sY0FBYyxHQUFHLElBQUEsMkJBQW9CLEdBQUUsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLHNCQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFtQixDQUFDO0lBRWpFLFNBQVMsWUFBWSxDQUFDLEtBQWEsRUFBRSxjQUFxQixFQUFFLGdCQUF3QjtRQUNsRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLElB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S0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sT0FBTyxHQUFzQixDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUYsTUFBTSxJQUFJLEdBQUcsbUJBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUUvRixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLEtBQUssSUFBSSxFQUFFO1lBQ1QsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUN6QixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNuQyxHQUFHLEVBQUUsT0FBTztnQkFDWixJQUFJO2dCQUNKLFdBQVcsRUFBRSxpQkFBaUI7YUFDL0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUNEO1lBQ0UsT0FBTyxFQUFFO21JQUNrSDtTQUM1SCxDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBjb21tb24sIFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzLCBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQgfSBmcm9tICcuLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7IGdldFV0eG9XYWxsZXQsIGdldERlZmF1bHRXYWxsZXRLZXlzLCBnZXRVdHhvQ29pbiwga2V5Y2hhaW5zQmFzZTU4LCBkZWZhdWx0Qml0R28gfSBmcm9tICcuL3V0aWwnO1xuXG5kZXNjcmliZSgnc2lnblRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbZGVmYXVsdEJpdEdvLmdldEVudigpXS51cmk7XG5cbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCdidGMnKTtcbiAgY29uc3Qgd2FsbGV0ID0gZ2V0VXR4b1dhbGxldChjb2luLCB7IGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLCBjb2luOiBjb2luLmdldENoYWluKCkgfSk7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgY29uc3QgdXNlclBydiA9IHJvb3RXYWxsZXRLZXlzLnVzZXIudG9CYXNlNTgoKTtcbiAgY29uc3QgcHVicyA9IGtleWNoYWluc0Jhc2U1OC5tYXAoKHYpID0+IHYucHViKSBhcyBUcmlwbGU8c3RyaW5nPjtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZVBzYnQodHhIZXg6IHN0cmluZywgdGFyZ2V0U2lnQ291bnQ6IDAgfCAxLCB0YXJnZXROb25jZUNvdW50PzogMSB8IDIpIHtcbiAgICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eEhleCwgY29pbi5uZXR3b3JrKTtcbiAgICBwc2J0LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkID0gdXR4b2xpYi5iaXRnby5wYXJzZVBzYnRJbnB1dChpbnB1dCk7XG4gICAgICBpZiAocGFyc2VkLnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgICBhc3NlcnQub2sodGFyZ2V0Tm9uY2VDb3VudCk7XG4gICAgICAgIGNvbnN0IG5vbmNlID0gcHNidC5nZXRQcm9wcmlldGFyeUtleVZhbHMoaW5kZXgsIHtcbiAgICAgICAgICBpZGVudGlmaWVyOiB1dHhvbGliLmJpdGdvLlBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUixcbiAgICAgICAgICBzdWJ0eXBlOiB1dHhvbGliLmJpdGdvLlByb3ByaWV0YXJ5S2V5U3VidHlwZS5NVVNJRzJfUFVCX05PTkNFLFxuICAgICAgICB9KTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5vbmNlLmxlbmd0aCwgdGFyZ2V0Tm9uY2VDb3VudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBleHBlY3RlZFNpZ0NvdW50ID0gcGFyc2VkLnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycgfHwgdGFyZ2V0U2lnQ291bnQgPT09IDAgPyB1bmRlZmluZWQgOiAxO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5zaWduYXR1cmVzPy5sZW5ndGgsIGV4cGVjdGVkU2lnQ291bnQpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVUeCh0eEhleDogc3RyaW5nLCB1bnNwZW50czogVW5zcGVudDxiaWdpbnQ+W10sIHRhcmdldFNpZ0NvdW50OiAwIHwgMSkge1xuICAgIGNvbnN0IHR4ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXgodHhIZXgsIGNvaW4ubmV0d29yayk7XG4gICAgdW5zcGVudHMuZm9yRWFjaCgodSwgaSkgPT4ge1xuICAgICAgY29uc3Qgc2lnQ291bnQgPSB1dHhvbGliLmJpdGdvLmdldFN0cmljdFNpZ25hdHVyZUNvdW50KHR4Lmluc1tpXSk7XG4gICAgICBjb25zdCBleHBlY3RlZFNpZ0NvdW50ID0gdXR4b2xpYi5iaXRnby5pc1dhbGxldFVuc3BlbnQodSkgJiYgISF0YXJnZXRTaWdDb3VudCA/IDEgOiAwO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ0NvdW50LCBleHBlY3RlZFNpZ0NvdW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihcbiAgICB0eDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sXG4gICAgdXNlU2lnbmluZ1N0ZXBzOiBib29sZWFuLFxuICAgIHVuc3BlbnRzPzogVW5zcGVudDxiaWdpbnQ+W11cbiAgKSB7XG4gICAgY29uc3QgaXNQc2J0ID0gdHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgIGNvbnN0IGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCA9IGlzUHNidCAmJiB1dHhvbGliLmJpdGdvLmlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kSW5wdXQodHgpO1xuICAgIGNvbnN0IHR4SGV4ID0gdHgudG9IZXgoKTtcblxuICAgIGZ1bmN0aW9uIG5vY2tTaWduUHNidChwc2J0SGV4OiBzdHJpbmcpOiBub2NrLlNjb3BlIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHBzYnRIZXgsIGNvaW4ubmV0d29yayk7XG4gICAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2lnbnBzYnRgLCAoYm9keSkgPT4gYm9keS5wc2J0KVxuICAgICAgICAucmVwbHkoMjAwLCB7IHBzYnQ6IHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5cy5iaXRnbykudG9IZXgoKSB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZVNpZ25pbmdTdGVwcykge1xuICAgICAgbGV0IHNjb3BlOiBub2NrLlNjb3BlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCAmJiBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQpIHtcbiAgICAgICAgc2NvcGUgPSBub2NrU2lnblBzYnQodHguY2xvbmUoKS5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKS50b0hleCgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleCxcbiAgICAgICAgICB0eEluZm86IGlzUHNidCA/IHVuZGVmaW5lZCA6IHsgdW5zcGVudHMgfSxcbiAgICAgICAgICB3YWxsZXRJZDogaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gd2FsbGV0LmlkKCkgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogdXNlclBydixcbiAgICAgICAgcHVicyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gcHNidCk7XG4gICAgICBpZiAoaXNQc2J0KSB7XG4gICAgICAgIHZhbGlkYXRlUHNidChwc2J0LnR4SGV4LCAxLCAyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICAgIHZhbGlkYXRlVHgocHNidC50eEhleCwgdW5zcGVudHMsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY29wZS5pc0RvbmUoKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVyTm9uY2VQc2J0ID0gYXdhaXQgY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgcHVicyxcbiAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuICAgIGFzc2VydC5vaygndHhIZXgnIGluIHNpZ25lck5vbmNlUHNidCk7XG4gICAgaWYgKGlzUHNidCkge1xuICAgICAgdmFsaWRhdGVQc2J0KHNpZ25lck5vbmNlUHNidC50eEhleCwgMCwgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gMSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICB2YWxpZGF0ZVR4KHNpZ25lck5vbmNlUHNidC50eEhleCwgdW5zcGVudHMsIDApO1xuICAgIH1cblxuICAgIGxldCBzY29wZTogbm9jay5TY29wZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kKSB7XG4gICAgICBzY29wZSA9IG5vY2tTaWduUHNidChzaWduZXJOb25jZVBzYnQudHhIZXgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvc2lnbmVyTm9uY2VQc2J0ID0gYXdhaXQgY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduZXJOb25jZVBzYnQsIHdhbGxldElkOiB3YWxsZXQuaWQoKSB9LFxuICAgICAgcHVicyxcbiAgICAgIHNpZ25pbmdTdGVwOiAnY29zaWduZXJOb25jZScsXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gY29zaWduZXJOb25jZVBzYnQpO1xuICAgIGlmIChpc1BzYnQpIHtcbiAgICAgIHZhbGlkYXRlUHNidChjb3NpZ25lck5vbmNlUHNidC50eEhleCwgMCwgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gMiA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICB2YWxpZGF0ZVR4KGNvc2lnbmVyTm9uY2VQc2J0LnR4SGV4LCB1bnNwZW50cywgMCk7XG4gICAgfVxuXG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NvcGUuaXNEb25lKCksIHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25lclNpZ1BzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLmNvc2lnbmVyTm9uY2VQc2J0LCB0eEluZm86IGlzUHNidCA/IHVuZGVmaW5lZCA6IHsgdW5zcGVudHMgfSB9LFxuICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgcHVicyxcbiAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyU2lnbmF0dXJlJyxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBzaWduZXJTaWdQc2J0KTtcbiAgICBpZiAoaXNQc2J0KSB7XG4gICAgICB2YWxpZGF0ZVBzYnQoc2lnbmVyU2lnUHNidC50eEhleCwgMSwgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gMiA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICB2YWxpZGF0ZVR4KHNpZ25lclNpZ1BzYnQudHhIZXgsIHVuc3BlbnRzLCAxKTtcbiAgICB9XG4gIH1cblxuICBpdCgnY3VzdG9tU2lnbmluZ0Z1bmN0aW9uIGZsb3cgLSBQU0JUIHdpdGggdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVwbGF5UHJvdGVjdGlvbktleSA9IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW4ubmFtZSlbMF07XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5JbnB1dFtdID0gdGVzdHV0aWwuaW5wdXRTY3JpcHRUeXBlc1xuICAgICAgLmZpbHRlcigodCkgPT4gdCAhPT0gJ3Ayc2hQMnBrJyB8fCByZXBsYXlQcm90ZWN0aW9uS2V5ICE9PSB1bmRlZmluZWQpXG4gICAgICAubWFwKChzY3JpcHRUeXBlKSA9PiAoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDEwMDApIH0pKTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoMTAwMCkgfV07XG4gICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCAndW5zaWduZWQnLCB7XG4gICAgICBwMnNoUDJwa0tleTogcmVwbGF5UHJvdGVjdGlvbktleSxcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgdiBvZiBbZmFsc2UsIHRydWVdKSB7XG4gICAgICBhd2FpdCBzaWduVHJhbnNhY3Rpb24ocHNidCwgdik7XG4gICAgfVxuICB9KTtcblxuICBpdCgnY3VzdG9tU2lnbmluZ0Z1bmN0aW9uIGZsb3cgLSBQU0JUIHdpdGhvdXQgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVwbGF5UHJvdGVjdGlvbktleSA9IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW4ubmFtZSlbMF07XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5JbnB1dFtdID0gdGVzdHV0aWwuaW5wdXRTY3JpcHRUeXBlc1xuICAgICAgLmZpbHRlcigodikgPT4gdiAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmICh2ICE9PSAncDJzaFAycGsnIHx8IHJlcGxheVByb3RlY3Rpb25LZXkgIT09IHVuZGVmaW5lZCkpXG4gICAgICAubWFwKChzY3JpcHRUeXBlKSA9PiAoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDEwMDApIH0pKTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXIpID0+IHByZXYgKyBjdXIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0czogdGVzdHV0aWwuT3V0cHV0W10gPSBbeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH1dO1xuICAgIGNvbnN0IHBzYnQgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJywge1xuICAgICAgcDJzaFAycGtLZXk6IHJlcGxheVByb3RlY3Rpb25LZXksXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHYgb2YgW2ZhbHNlLCB0cnVlXSkge1xuICAgICAgYXdhaXQgc2lnblRyYW5zYWN0aW9uKHBzYnQsIHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ2N1c3RvbVNpZ25pbmdGdW5jdGlvbiBmbG93IC0gTmV0d29yayBUeCBzaG91bGQgcmVqZWN0IGxlZ2FjeSBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5UeG5JbnB1dDxiaWdpbnQ+W10gPSB0ZXN0dXRpbC50eG5JbnB1dFNjcmlwdFR5cGVzXG4gICAgICAuZmlsdGVyKCh2KSA9PiB2ICE9PSAncDJzaFAycGsnKVxuICAgICAgLm1hcCgoc2NyaXB0VHlwZSkgPT4gKHtcbiAgICAgICAgc2NyaXB0VHlwZSxcbiAgICAgICAgdmFsdWU6IEJpZ0ludCgxMDAwKSxcbiAgICAgIH0pKTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5UeG5PdXRwdXQ8YmlnaW50PltdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RUeG5CdWlsZGVyKGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJyk7XG4gICAgY29uc3QgdW5zcGVudHMgPSBpbnB1dHMubWFwKCh2LCBpKSA9PiB0ZXN0dXRpbC50b1R4blVuc3BlbnQodiwgaSwgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cykpO1xuXG4gICAgLy8gTGVnYWN5IGZvcm1hdCB0cmFuc2FjdGlvbnMgYXJlIG5vdyBkZXByZWNhdGVkIGFuZCBzaG91bGQgdGhyb3cgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXRcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzaWduVHJhbnNhY3Rpb24odHhCdWlsZGVyLmJ1aWxkSW5jb21wbGV0ZSgpLCBmYWxzZSwgdW5zcGVudHMpO1xuICAgIH0sIEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0KTtcbiAgfSk7XG5cbiAgaXQoJ2ZhaWxzIG9uIFBTQlQgY2FjaGUgbWlzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnB1dHM6IHRlc3R1dGlsLklucHV0W10gPSBbeyBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCcsIHZhbHVlOiBCaWdJbnQoMTAwMCkgfV07XG4gICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VycikgPT4gcHJldiArIGN1cnIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0czogdGVzdHV0aWwuT3V0cHV0W10gPSBbeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH1dO1xuICAgIGNvbnN0IHBzYnQgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJyk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHBzYnQudG9IZXgoKSB9LFxuICAgICAgICAgIHBydjogdXNlclBydixcbiAgICAgICAgICBwdWJzLFxuICAgICAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyU2lnbmF0dXJlJyxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtZXNzYWdlOiBgUHNidCBpcyBtaXNzaW5nIGZyb20gdHhDYWNoZSAoY2FjaGUgc2l6ZSAwKS5cbiAgICAgICAgICAgIFRoaXMgbWF5IGJlIGR1ZSB0byB0aGUgcmVxdWVzdCBiZWluZyByb3V0ZWQgdG8gYSBkaWZmZXJlbnQgQml0R28tRXhwcmVzcyBpbnN0YW5jZSB0aGF0IGZvciBzaWduaW5nIHN0ZXAgJ3NpZ25lck5vbmNlJy5gLFxuICAgICAgfVxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3NpZ25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlCQUFlO0FBQ2YsK0NBQWlDO0FBRWpDLHlEQUEyQztBQUMzQyw2QkFBOEI7QUFDOUIsOENBQTJDO0FBQzNDLDhDQUFpRDtBQUVqRCxtQ0FBZ0Y7QUFHaEYsaUNBT2dCO0FBRWhCLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixNQUFNLEtBQUssR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxtQkFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO0lBRTdELE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLGtDQUFrQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sY0FBYyxHQUFHLElBQUEsMkJBQW9CLEdBQUUsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLHNCQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFtQixDQUFDO0lBRWpFLFNBQVMsWUFBWSxDQUFDLEtBQWEsRUFBRSxjQUFxQixFQUFFLGdCQUF3QjtRQUNsRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFBLDRCQUFxQixFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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bW9jaGEnO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgdGVzdHV0aWwgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgY29tbW9uLCBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cywgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50IH0gZnJvbSAnLi4vLi4vc3JjL3Vuc3BlbnQnO1xuXG5pbXBvcnQge1xuICBnZXRVdHhvV2FsbGV0LFxuICBnZXREZWZhdWx0V2FsbGV0S2V5cyxcbiAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lLFxuICBnZXRVdHhvQ29pbixcbiAga2V5Y2hhaW5zQmFzZTU4LFxuICBkZWZhdWx0Qml0R28sXG59IGZyb20gJy4vdXRpbCc7XG5cbmRlc2NyaWJlKCdzaWduVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcblxuICBjb25zdCBjb2luID0gZ2V0VXR4b0NvaW4oJ2J0YycpO1xuICBjb25zdCB3YWxsZXQgPSBnZXRVdHhvV2FsbGV0KGNvaW4sIHsgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSB9KTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICBjb25zdCB1c2VyUHJ2ID0gcm9vdFdhbGxldEtleXMudXNlci50b0Jhc2U1OCgpO1xuICBjb25zdCBwdWJzID0ga2V5Y2hhaW5zQmFzZTU4Lm1hcCgodikgPT4gdi5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUHNidCh0eEhleDogc3RyaW5nLCB0YXJnZXRTaWdDb3VudDogMCB8IDEsIHRhcmdldE5vbmNlQ291bnQ/OiAxIHwgMikge1xuICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4SGV4LCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSk7XG4gICAgcHNidC5kYXRhLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHV0eG9saWIuYml0Z28ucGFyc2VQc2J0SW5wdXQoaW5wdXQpO1xuICAgICAgaWYgKHBhcnNlZC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpIHtcbiAgICAgICAgYXNzZXJ0Lm9rKHRhcmdldE5vbmNlQ291bnQpO1xuICAgICAgICBjb25zdCBub25jZSA9IHBzYnQuZ2V0UHJvcHJpZXRhcnlLZXlWYWxzKGluZGV4LCB7XG4gICAgICAgICAgaWRlbnRpZmllcjogdXR4b2xpYi5iaXRnby5QU0JUX1BST1BSSUVUQVJZX0lERU5USUZJRVIsXG4gICAgICAgICAgc3VidHlwZTogdXR4b2xpYi5iaXRnby5Qcm9wcmlldGFyeUtleVN1YnR5cGUuTVVTSUcyX1BVQl9OT05DRSxcbiAgICAgICAgfSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChub25jZS5sZW5ndGgsIHRhcmdldE5vbmNlQ291bnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhwZWN0ZWRTaWdDb3VudCA9IHBhcnNlZC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnIHx8IHRhcmdldFNpZ0NvdW50ID09PSAwID8gdW5kZWZpbmVkIDogMTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuc2lnbmF0dXJlcz8ubGVuZ3RoLCBleHBlY3RlZFNpZ0NvdW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlVHgodHhIZXg6IHN0cmluZywgdW5zcGVudHM6IFVuc3BlbnQ8YmlnaW50PltdLCB0YXJnZXRTaWdDb3VudDogMCB8IDEpIHtcbiAgICBjb25zdCB0eCA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4KHR4SGV4LCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSk7XG4gICAgdW5zcGVudHMuZm9yRWFjaCgodSwgaSkgPT4ge1xuICAgICAgY29uc3Qgc2lnQ291bnQgPSB1dHhvbGliLmJpdGdvLmdldFN0cmljdFNpZ25hdHVyZUNvdW50KHR4Lmluc1tpXSk7XG4gICAgICBjb25zdCBleHBlY3RlZFNpZ0NvdW50ID0gdXR4b2xpYi5iaXRnby5pc1dhbGxldFVuc3BlbnQodSkgJiYgISF0YXJnZXRTaWdDb3VudCA/IDEgOiAwO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ0NvdW50LCBleHBlY3RlZFNpZ0NvdW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihcbiAgICB0eDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sXG4gICAgdXNlU2lnbmluZ1N0ZXBzOiBib29sZWFuLFxuICAgIHVuc3BlbnRzPzogVW5zcGVudDxiaWdpbnQ+W11cbiAgKSB7XG4gICAgY29uc3QgaXNQc2J0ID0gdHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgIGNvbnN0IGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCA9IGlzUHNidCAmJiB1dHhvbGliLmJpdGdvLmlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kSW5wdXQodHgpO1xuICAgIGNvbnN0IHR4SGV4ID0gdHgudG9IZXgoKTtcblxuICAgIGZ1bmN0aW9uIG5vY2tTaWduUHNidChwc2J0SGV4OiBzdHJpbmcpOiBub2NrLlNjb3BlIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHBzYnRIZXgsIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpKTtcbiAgICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zaWducHNidGAsIChib2R5KSA9PiBib2R5LnBzYnQpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgcHNidDogcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKS50b0hleCgpIH0pO1xuICAgIH1cblxuICAgIGlmICghdXNlU2lnbmluZ1N0ZXBzKSB7XG4gICAgICBsZXQgc2NvcGU6IG5vY2suU2NvcGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0ICYmIGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCkge1xuICAgICAgICBzY29wZSA9IG5vY2tTaWduUHNidCh0eC5jbG9uZSgpLnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMuYml0Z28pLnRvSGV4KCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcHNidCA9IGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4LFxuICAgICAgICAgIHR4SW5mbzogaXNQc2J0ID8gdW5kZWZpbmVkIDogeyB1bnNwZW50cyB9LFxuICAgICAgICAgIHdhbGxldElkOiBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPyB3YWxsZXQuaWQoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgICBwdWJzLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBwc2J0KTtcbiAgICAgIGlmIChpc1BzYnQpIHtcbiAgICAgICAgdmFsaWRhdGVQc2J0KHBzYnQudHhIZXgsIDEsIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0Lm9rKHVuc3BlbnRzKTtcbiAgICAgICAgdmFsaWRhdGVUeChwc2J0LnR4SGV4LCB1bnNwZW50cywgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjb3BlLmlzRG9uZSgpLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduZXJOb25jZVBzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICBwdWJzLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gc2lnbmVyTm9uY2VQc2J0KTtcbiAgICBpZiAoaXNQc2J0KSB7XG4gICAgICB2YWxpZGF0ZVBzYnQoc2lnbmVyTm9uY2VQc2J0LnR4SGV4LCAwLCBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPyAxIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0Lm9rKHVuc3BlbnRzKTtcbiAgICAgIHZhbGlkYXRlVHgoc2lnbmVyTm9uY2VQc2J0LnR4SGV4LCB1bnNwZW50cywgMCk7XG4gICAgfVxuXG4gICAgbGV0IHNjb3BlOiBub2NrLlNjb3BlIHwgdW5kZWZpbmVkO1xuICAgIGlmIChpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQpIHtcbiAgICAgIHNjb3BlID0gbm9ja1NpZ25Qc2J0KHNpZ25lck5vbmNlUHNidC50eEhleCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29zaWduZXJOb25jZVBzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25lck5vbmNlUHNidCwgd2FsbGV0SWQ6IHdhbGxldC5pZCgpIH0sXG4gICAgICBwdWJzLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJyxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBjb3NpZ25lck5vbmNlUHNidCk7XG4gICAgaWYgKGlzUHNidCkge1xuICAgICAgdmFsaWRhdGVQc2J0KGNvc2lnbmVyTm9uY2VQc2J0LnR4SGV4LCAwLCBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPyAyIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0Lm9rKHVuc3BlbnRzKTtcbiAgICAgIHZhbGlkYXRlVHgoY29zaWduZXJOb25jZVBzYnQudHhIZXgsIHVuc3BlbnRzLCAwKTtcbiAgICB9XG5cbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY29wZS5pc0RvbmUoKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVyU2lnUHNidCA9IGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHsgLi4uY29zaWduZXJOb25jZVBzYnQsIHR4SW5mbzogaXNQc2J0ID8gdW5kZWZpbmVkIDogeyB1bnNwZW50cyB9IH0sXG4gICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICBwdWJzLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgIH0pO1xuICAgIGFzc2VydC5vaygndHhIZXgnIGluIHNpZ25lclNpZ1BzYnQpO1xuICAgIGlmIChpc1BzYnQpIHtcbiAgICAgIHZhbGlkYXRlUHNidChzaWduZXJTaWdQc2J0LnR4SGV4LCAxLCBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPyAyIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0Lm9rKHVuc3BlbnRzKTtcbiAgICAgIHZhbGlkYXRlVHgoc2lnbmVyU2lnUHNidC50eEhleCwgdW5zcGVudHMsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGl0KCdjdXN0b21TaWduaW5nRnVuY3Rpb24gZmxvdyAtIFBTQlQgd2l0aCB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXBsYXlQcm90ZWN0aW9uS2V5ID0gZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMoY29pbi5uYW1lKVswXTtcbiAgICBjb25zdCBpbnB1dHM6IHRlc3R1dGlsLklucHV0W10gPSB0ZXN0dXRpbC5pbnB1dFNjcmlwdFR5cGVzXG4gICAgICAuZmlsdGVyKCh0KSA9PiB0ICE9PSAncDJzaFAycGsnIHx8IHJlcGxheVByb3RlY3Rpb25LZXkgIT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKHNjcmlwdFR5cGUpID0+ICh7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoMTAwMCkgfSkpO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cnIpID0+IHByZXYgKyBjdXJyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJywge1xuICAgICAgcDJzaFAycGtLZXk6IHJlcGxheVByb3RlY3Rpb25LZXksXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHYgb2YgW2ZhbHNlLCB0cnVlXSkge1xuICAgICAgYXdhaXQgc2lnblRyYW5zYWN0aW9uKHBzYnQsIHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ2N1c3RvbVNpZ25pbmdGdW5jdGlvbiBmbG93IC0gUFNCVCB3aXRob3V0IHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlcGxheVByb3RlY3Rpb25LZXkgPSBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luLm5hbWUpWzBdO1xuICAgIGNvbnN0IGlucHV0czogdGVzdHV0aWwuSW5wdXRbXSA9IHRlc3R1dGlsLmlucHV0U2NyaXB0VHlwZXNcbiAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT09ICd0YXByb290S2V5UGF0aFNwZW5kJyAmJiAodiAhPT0gJ3Ayc2hQMnBrJyB8fCByZXBsYXlQcm90ZWN0aW9uS2V5ICE9PSB1bmRlZmluZWQpKVxuICAgICAgLm1hcCgoc2NyaXB0VHlwZSkgPT4gKHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgxMDAwKSB9KSk7XG4gICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VyKSA9PiBwcmV2ICsgY3VyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJywge1xuICAgICAgcDJzaFAycGtLZXk6IHJlcGxheVByb3RlY3Rpb25LZXksXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHYgb2YgW2ZhbHNlLCB0cnVlXSkge1xuICAgICAgYXdhaXQgc2lnblRyYW5zYWN0aW9uKHBzYnQsIHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ2N1c3RvbVNpZ25pbmdGdW5jdGlvbiBmbG93IC0gTmV0d29yayBUeCBzaG91bGQgcmVqZWN0IGxlZ2FjeSBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5UeG5JbnB1dDxiaWdpbnQ+W10gPSB0ZXN0dXRpbC50eG5JbnB1dFNjcmlwdFR5cGVzXG4gICAgICAuZmlsdGVyKCh2KSA9PiB2ICE9PSAncDJzaFAycGsnKVxuICAgICAgLm1hcCgoc2NyaXB0VHlwZSkgPT4gKHtcbiAgICAgICAgc2NyaXB0VHlwZSxcbiAgICAgICAgdmFsdWU6IEJpZ0ludCgxMDAwKSxcbiAgICAgIH0pKTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5UeG5PdXRwdXQ8YmlnaW50PltdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RUeG5CdWlsZGVyKFxuICAgICAgaW5wdXRzLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLFxuICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAndW5zaWduZWQnXG4gICAgKTtcbiAgICBjb25zdCB1bnNwZW50cyA9IGlucHV0cy5tYXAoKHYsIGkpID0+XG4gICAgICB0ZXN0dXRpbC50b1R4blVuc3BlbnQodiwgaSwgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksIHJvb3RXYWxsZXRLZXlzKVxuICAgICk7XG5cbiAgICAvLyBMZWdhY3kgZm9ybWF0IHRyYW5zYWN0aW9ucyBhcmUgbm93IGRlcHJlY2F0ZWQgYW5kIHNob3VsZCB0aHJvdyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdFxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNpZ25UcmFuc2FjdGlvbih0eEJ1aWxkZXIuYnVpbGRJbmNvbXBsZXRlKCksIGZhbHNlLCB1bnNwZW50cyk7XG4gICAgfSwgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQpO1xuICB9KTtcblxuICBpdCgnZmFpbHMgb24gUFNCVCBjYWNoZSBtaXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGlucHV0czogdGVzdHV0aWwuSW5wdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJywgdmFsdWU6IEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoMTAwMCkgfV07XG4gICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSwgcm9vdFdhbGxldEtleXMsICd1bnNpZ25lZCcpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBwc2J0LnRvSGV4KCkgfSxcbiAgICAgICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICAgICAgcHVicyxcbiAgICAgICAgICBzaWduaW5nU3RlcDogJ3NpZ25lclNpZ25hdHVyZScsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogYFBzYnQgaXMgbWlzc2luZyBmcm9tIHR4Q2FjaGUgKGNhY2hlIHNpemUgMCkuXG4gICAgICAgICAgICBUaGlzIG1heSBiZSBkdWUgdG8gdGhlIHJlcXVlc3QgYmVpbmcgcm91dGVkIHRvIGEgZGlmZmVyZW50IEJpdEdvLUV4cHJlc3MgaW5zdGFuY2UgdGhhdCBmb3Igc2lnbmluZyBzdGVwICdzaWduZXJOb25jZScuYCxcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn0pO1xuIl19
@@ -114,6 +114,20 @@ function describeTransactionWith(acidTest) {
114
114
  }
115
115
  describe('explainPsbt(Wasm)', function () {
116
116
  utxo_lib_1.testutil.AcidTest.suite().forEach((test) => describeTransactionWith(test));
117
+ it('explainPsbtWasmBigInt throws when total output value exceeds total input value', function () {
118
+ const network = utxolib.networks.bitcoin;
119
+ const rootWalletKeys = utxo_lib_1.testutil.getDefaultWalletKeys();
120
+ // Valid PSBT: one p2wsh input (5000 sat), one internal p2wsh output (3000 sat), fee = 2000
121
+ const psbt = utxo_lib_1.testutil.constructPsbt([{ scriptType: 'p2wsh', value: 5000n }], [{ scriptType: 'p2wsh', value: 3000n, isInternalAddress: true }], network, rootWalletKeys, 'unsigned');
122
+ // Tamper: reduce the witnessUtxo.value so that inputs (1000) < outputs (3000).
123
+ // Direct mutation avoids bip174's "duplicate data" guard on updateInput.
124
+ psbt.data.inputs[0].witnessUtxo.value = 1000n;
125
+ const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.toBuffer(), 'bitcoin');
126
+ const walletXpubs = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(rootWalletKeys);
127
+ strict_1.default.throws(() => (0, fixedScript_1.explainPsbtWasmBigInt)(wasmPsbt, walletXpubs, {
128
+ replayProtection: { publicKeys: [] },
129
+ }), /Fee calculation error: outputs exceed inputs/);
130
+ });
117
131
  });
118
132
  describe('aggregateTransactionExplanations', function () {
119
133
  utxo_lib_1.testutil.AcidTest.suite()
@@ -154,4 +168,4 @@ describe('aggregateTransactionExplanations', function () {
154
168
  });
155
169
  });
156
170
  });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMseURBQTJDO0FBQzNDLDhDQUEyQztBQUMzQyxnREFBcUQ7QUFFckQseUVBS2lEO0FBRWpELFNBQVMsdUJBQXVCLENBQUMsUUFBMkI7SUFDMUQsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzNCLElBQUksV0FBNkMsQ0FBQztRQUNsRCxJQUFJLHVCQUFxRSxDQUFDO1FBQzFFLElBQUksUUFBcUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BCLFdBQVcsR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM3RSx1QkFBdUIsR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMxRixRQUFRLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUU7WUFDeEQsTUFB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LENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzFELGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IHRlc3R1dGlsIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7XG4gIGV4cGxhaW5Qc2J0V2FzbSxcbiAgZXhwbGFpblBzYnRXYXNtQmlnSW50LFxuICBhZ2dyZWdhdGVUcmFuc2FjdGlvbkV4cGxhbmF0aW9ucyxcbiAgdHlwZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uQmlnSW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQnO1xuXG5mdW5jdGlvbiBkZXNjcmliZVRyYW5zYWN0aW9uV2l0aChhY2lkVGVzdDogdGVzdHV0aWwuQWNpZFRlc3QpIHtcbiAgZGVzY3JpYmUoYCR7YWNpZFRlc3QubmFtZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHdhbGxldFhwdWJzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cztcbiAgICBsZXQgY3VzdG9tQ2hhbmdlV2FsbGV0WHB1YnM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzIHwgdW5kZWZpbmVkO1xuICAgIGxldCB3YXNtUHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGJlZm9yZSgncHJlcGFyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSBhY2lkVGVzdC5jcmVhdGVQc2J0KCk7XG4gICAgICBjb25zdCBwc2J0Qnl0ZXMgPSBwc2J0LnRvQnVmZmVyKCk7XG4gICAgICBjb25zdCBuZXR3b3JrTmFtZSA9IHV0eG9saWIuZ2V0TmV0d29ya05hbWUoYWNpZFRlc3QubmV0d29yayk7XG4gICAgICBhc3NlcnQobmV0d29ya05hbWUpO1xuICAgICAgd2FsbGV0WHB1YnMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKTtcbiAgICAgIGN1c3RvbUNoYW5nZVdhbGxldFhwdWJzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbShhY2lkVGVzdC5vdGhlcldhbGxldEtleXMpO1xuICAgICAgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnRCeXRlcywgbmV0d29ya05hbWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZXhwZWN0ZWQgb3V0cHV0cyBmcm9tIGV4cGxhaW5Qc2J0V2FzbScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21FeHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0V2FzbSh3YXNtUHNidCwgd2FsbGV0WHB1YnMsIHtcbiAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjoge1xuICAgICAgICAgIHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3YXNtRXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGgsIGFjaWRUZXN0Lm91dHB1dHMubGVuZ3RoIC0gMyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLm91dHB1dEFtb3VudCwgJzE4MDAnKTtcbiAgICAgIHdhc21FeHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmZvckVhY2goKGNoYW5nZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2hhbmdlLmFtb3VudCwgJzkwMCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGNoYW5nZS5hZGRyZXNzLCAnc3RyaW5nJyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gdmVyaWZ5IG5ldyBmaWVsZHMgYXJlIHByZXNlbnQgYW5kIHN0cmluZ2lmaWVkXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHdhc21FeHBsYW5hdGlvbi5pbnB1dEFtb3VudCwgJ3N0cmluZycpO1xuICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkod2FzbUV4cGxhbmF0aW9uLmlucHV0cykpO1xuICAgICAgYXNzZXJ0Lm9rKHdhc21FeHBsYW5hdGlvbi5pbnB1dHMubGVuZ3RoID4gMCk7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHdhc21FeHBsYW5hdGlvbi5pbnB1dHMpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBpbnB1dC5hZGRyZXNzLCAnc3RyaW5nJyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaW5wdXQudmFsdWUsICdzdHJpbmcnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhY2lkVGVzdC5uZXR3b3JrICE9PSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpdCgnZXhwbGFpblBzYnRXYXNtQmlnSW50IHJldHVybnMgYmlnaW50IGFtb3VudHMgYW5kIGlucHV0cyBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV4cGxhaW5Qc2J0V2FzbUJpZ0ludCh3YXNtUHNidCwgd2FsbGV0WHB1YnMsIHtcbiAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSB9LFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHJlc3VsdC5mZWUsICdiaWdpbnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0Lm91dHB1dEFtb3VudCwgJ2JpZ2ludCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiByZXN1bHQuY2hhbmdlQW1vdW50LCAnYmlnaW50Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHJlc3VsdC5pbnB1dEFtb3VudCwgJ2JpZ2ludCcpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5pbnB1dHMubGVuZ3RoID4gMCk7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHJlc3VsdC5pbnB1dHMpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBpbnB1dC5hZGRyZXNzLCAnc3RyaW5nJyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaW5wdXQudmFsdWUsICdiaWdpbnQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1bUlucHV0cyA9IHJlc3VsdC5pbnB1dHMucmVkdWNlKChzLCBpKSA9PiBzICsgaS52YWx1ZSwgMG4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5pbnB1dEFtb3VudCwgc3VtSW5wdXRzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgcmVzdWx0LmZlZSxcbiAgICAgICAgcmVzdWx0LmlucHV0QW1vdW50IC0gcmVzdWx0Lm91dHB1dEFtb3VudCAtIHJlc3VsdC5jaGFuZ2VBbW91bnQgLSByZXN1bHQuY3VzdG9tQ2hhbmdlQW1vdW50XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gZXh0ZW5kZWQgdGVzdCBzdWl0ZSBmb3IgYml0Y29pblxuXG4gICAgaXQoJ3JldHVybnMgY3VzdG9tIGNoYW5nZSBvdXRwdXRzIHdoZW4gcGFyYW1ldGVyIGlzIHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21FeHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0V2FzbSh3YXNtUHNidCwgd2FsbGV0WHB1YnMsIHtcbiAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjoge1xuICAgICAgICAgIHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldLFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21DaGFuZ2VXYWxsZXRYcHVicyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm9rKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAyKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHNbMF0uYW1vdW50LCAnOTAwJyk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5kZXNjcmliZSgnZXhwbGFpblBzYnQoV2FzbSknLCBmdW5jdGlvbiAoKSB7XG4gIHRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKCkuZm9yRWFjaCgodGVzdCkgPT4gZGVzY3JpYmVUcmFuc2FjdGlvbldpdGgodGVzdCkpO1xufSk7XG5cbmRlc2NyaWJlKCdhZ2dyZWdhdGVUcmFuc2FjdGlvbkV4cGxhbmF0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgdGVzdHV0aWwuQWNpZFRlc3Quc3VpdGUoKVxuICAgIC5maWx0ZXIoKHQpID0+IHQubmV0d29yayA9PT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKVxuICAgIC5mb3JFYWNoKChhY2lkVGVzdCkgPT4ge1xuICAgICAgZGVzY3JpYmUoYWNpZFRlc3QubmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgZXhwOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uQmlnSW50O1xuXG4gICAgICAgIGJlZm9yZSgncHJlcGFyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBwc2J0Qnl0ZXMgPSBhY2lkVGVzdC5jcmVhdGVQc2J0KCkudG9CdWZmZXIoKTtcbiAgICAgICAgICBjb25zdCBuZXR3b3JrTmFtZSA9IHV0eG9saWIuZ2V0TmV0d29ya05hbWUoYWNpZFRlc3QubmV0d29yayk7XG4gICAgICAgICAgYXNzZXJ0KG5ldHdvcmtOYW1lKTtcbiAgICAgICAgICBjb25zdCB3YXNtUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidEJ5dGVzLCBuZXR3b3JrTmFtZSk7XG4gICAgICAgICAgY29uc3Qgd2FsbGV0WHB1YnMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgICBleHAgPSBleHBsYWluUHNidFdhc21CaWdJbnQod2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7IHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhZ2dyZWdhdGluZyBhIHNpbmdsZSBleHBsYW5hdGlvbiBpcyBpZGVudGl0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhZ2cgPSBhZ2dyZWdhdGVUcmFuc2FjdGlvbkV4cGxhbmF0aW9ucyhbZXhwXSk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5pbnB1dENvdW50LCBleHAuaW5wdXRzLmxlbmd0aCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5vdXRwdXRDb3VudCwgZXhwLm91dHB1dHMubGVuZ3RoKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmNoYW5nZU91dHB1dENvdW50LCBleHAuY2hhbmdlT3V0cHV0cy5sZW5ndGgpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuaW5wdXRBbW91bnQsIGV4cC5pbnB1dEFtb3VudCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5vdXRwdXRBbW91bnQsIGV4cC5vdXRwdXRBbW91bnQpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuY2hhbmdlQW1vdW50LCBleHAuY2hhbmdlQW1vdW50KTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmZlZSwgZXhwLmZlZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhZ2dyZWdhdGluZyB0d28gaWRlbnRpY2FsIGV4cGxhbmF0aW9ucyBkb3VibGVzIGFsbCBjb3VudHMgYW5kIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWdnID0gYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMoW2V4cCwgZXhwXSk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5pbnB1dENvdW50LCBleHAuaW5wdXRzLmxlbmd0aCAqIDIpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cub3V0cHV0Q291bnQsIGV4cC5vdXRwdXRzLmxlbmd0aCAqIDIpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuY2hhbmdlT3V0cHV0Q291bnQsIGV4cC5jaGFuZ2VPdXRwdXRzLmxlbmd0aCAqIDIpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuaW5wdXRBbW91bnQsIGV4cC5pbnB1dEFtb3VudCAqIDJuKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLm91dHB1dEFtb3VudCwgZXhwLm91dHB1dEFtb3VudCAqIDJuKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmNoYW5nZUFtb3VudCwgZXhwLmNoYW5nZUFtb3VudCAqIDJuKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmZlZSwgZXhwLmZlZSAqIDJuKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbn0pO1xuIl19
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMseURBQTJDO0FBQzNDLDhDQUEyQztBQUMzQyxnREFBcUQ7QUFFckQseUVBS2lEO0FBRWpELFNBQVMsdUJBQXVCLENBQUMsUUFBMkI7SUFDMUQsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzNCLElBQUksV0FBNkMsQ0FBQztRQUNsRCxJQUFJLHVCQUFxRSxDQUFDO1FBQzFFLElBQUksUUFBcUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BCLFdBQVcsR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM3RSx1QkFBdUIsR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMxRixRQUFRLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUU7WUFDeEQsTUFB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QUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzVELGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBleHBsYWluUHNidFdhc20sXG4gIGV4cGxhaW5Qc2J0V2FzbUJpZ0ludCxcbiAgYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMsXG4gIHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbkJpZ0ludCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcblxuZnVuY3Rpb24gZGVzY3JpYmVUcmFuc2FjdGlvbldpdGgoYWNpZFRlc3Q6IHRlc3R1dGlsLkFjaWRUZXN0KSB7XG4gIGRlc2NyaWJlKGAke2FjaWRUZXN0Lm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgIGxldCB3YWxsZXRYcHViczogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG4gICAgbGV0IGN1c3RvbUNoYW5nZVdhbGxldFhwdWJzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgd2FzbVBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwc2J0ID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpO1xuICAgICAgY29uc3QgcHNidEJ5dGVzID0gcHNidC50b0J1ZmZlcigpO1xuICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgYXNzZXJ0KG5ldHdvcmtOYW1lKTtcbiAgICAgIHdhbGxldFhwdWJzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbShhY2lkVGVzdC5yb290V2FsbGV0S2V5cyk7XG4gICAgICBjdXN0b21DaGFuZ2VXYWxsZXRYcHVicyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oYWNpZFRlc3Qub3RoZXJXYWxsZXRLZXlzKTtcbiAgICAgIHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0Qnl0ZXMsIG5ldHdvcmtOYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGV4cGVjdGVkIG91dHB1dHMgZnJvbSBleHBsYWluUHNidFdhc20nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtRXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20od2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHtcbiAgICAgICAgICBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCBhY2lkVGVzdC5vdXRwdXRzLmxlbmd0aCAtIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsICcxODAwJyk7XG4gICAgICB3YXNtRXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5mb3JFYWNoKChjaGFuZ2UpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNoYW5nZS5hbW91bnQsICc5MDAnKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBjaGFuZ2UuYWRkcmVzcywgJ3N0cmluZycpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHZlcmlmeSBuZXcgZmllbGRzIGFyZSBwcmVzZW50IGFuZCBzdHJpbmdpZmllZFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiB3YXNtRXhwbGFuYXRpb24uaW5wdXRBbW91bnQsICdzdHJpbmcnKTtcbiAgICAgIGFzc2VydC5vayhBcnJheS5pc0FycmF5KHdhc21FeHBsYW5hdGlvbi5pbnB1dHMpKTtcbiAgICAgIGFzc2VydC5vayh3YXNtRXhwbGFuYXRpb24uaW5wdXRzLmxlbmd0aCA+IDApO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB3YXNtRXhwbGFuYXRpb24uaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaW5wdXQuYWRkcmVzcywgJ3N0cmluZycpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGlucHV0LnZhbHVlLCAnc3RyaW5nJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYWNpZFRlc3QubmV0d29yayAhPT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaXQoJ2V4cGxhaW5Qc2J0V2FzbUJpZ0ludCByZXR1cm5zIGJpZ2ludCBhbW91bnRzIGFuZCBpbnB1dHMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBleHBsYWluUHNidFdhc21CaWdJbnQod2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW2FjaWRUZXN0LmdldFJlcGxheVByb3RlY3Rpb25QdWJsaWNLZXkoKV0gfSxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiByZXN1bHQuZmVlLCAnYmlnaW50Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHJlc3VsdC5vdXRwdXRBbW91bnQsICdiaWdpbnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0LmNoYW5nZUFtb3VudCwgJ2JpZ2ludCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiByZXN1bHQuaW5wdXRBbW91bnQsICdiaWdpbnQnKTtcbiAgICAgIGFzc2VydC5vayhyZXN1bHQuaW5wdXRzLmxlbmd0aCA+IDApO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiByZXN1bHQuaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaW5wdXQuYWRkcmVzcywgJ3N0cmluZycpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGlucHV0LnZhbHVlLCAnYmlnaW50Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdW1JbnB1dHMgPSByZXN1bHQuaW5wdXRzLnJlZHVjZSgocywgaSkgPT4gcyArIGkudmFsdWUsIDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuaW5wdXRBbW91bnQsIHN1bUlucHV0cyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgIHJlc3VsdC5mZWUsXG4gICAgICAgIHJlc3VsdC5pbnB1dEFtb3VudCAtIHJlc3VsdC5vdXRwdXRBbW91bnQgLSByZXN1bHQuY2hhbmdlQW1vdW50IC0gcmVzdWx0LmN1c3RvbUNoYW5nZUFtb3VudFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIGV4dGVuZGVkIHRlc3Qgc3VpdGUgZm9yIGJpdGNvaW5cblxuICAgIGl0KCdyZXR1cm5zIGN1c3RvbSBjaGFuZ2Ugb3V0cHV0cyB3aGVuIHBhcmFtZXRlciBpcyBzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtRXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20od2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHtcbiAgICAgICAgICBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSxcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlV2FsbGV0WHB1YnMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5vayh3YXNtRXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0cyk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMik7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzWzBdLmFtb3VudCwgJzkwMCcpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmUoJ2V4cGxhaW5Qc2J0KFdhc20pJywgZnVuY3Rpb24gKCkge1xuICB0ZXN0dXRpbC5BY2lkVGVzdC5zdWl0ZSgpLmZvckVhY2goKHRlc3QpID0+IGRlc2NyaWJlVHJhbnNhY3Rpb25XaXRoKHRlc3QpKTtcblxuICBpdCgnZXhwbGFpblBzYnRXYXNtQmlnSW50IHRocm93cyB3aGVuIHRvdGFsIG91dHB1dCB2YWx1ZSBleGNlZWRzIHRvdGFsIGlucHV0IHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG5ldHdvcmsgPSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW47XG4gICAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSB0ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICAgIC8vIFZhbGlkIFBTQlQ6IG9uZSBwMndzaCBpbnB1dCAoNTAwMCBzYXQpLCBvbmUgaW50ZXJuYWwgcDJ3c2ggb3V0cHV0ICgzMDAwIHNhdCksIGZlZSA9IDIwMDBcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChcbiAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMndzaCcsIHZhbHVlOiA1MDAwbiB9XSxcbiAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMndzaCcsIHZhbHVlOiAzMDAwbiwgaXNJbnRlcm5hbEFkZHJlc3M6IHRydWUgfV0sXG4gICAgICBuZXR3b3JrLFxuICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAndW5zaWduZWQnXG4gICAgKTtcbiAgICAvLyBUYW1wZXI6IHJlZHVjZSB0aGUgd2l0bmVzc1V0eG8udmFsdWUgc28gdGhhdCBpbnB1dHMgKDEwMDApIDwgb3V0cHV0cyAoMzAwMCkuXG4gICAgLy8gRGlyZWN0IG11dGF0aW9uIGF2b2lkcyBiaXAxNzQncyBcImR1cGxpY2F0ZSBkYXRhXCIgZ3VhcmQgb24gdXBkYXRlSW5wdXQuXG4gICAgcHNidC5kYXRhLmlucHV0c1swXS53aXRuZXNzVXR4byEudmFsdWUgPSAxMDAwbjtcblxuICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0LnRvQnVmZmVyKCksICdiaXRjb2luJyk7XG4gICAgY29uc3Qgd2FsbGV0WHB1YnMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHJvb3RXYWxsZXRLZXlzKTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBleHBsYWluUHNidFdhc21CaWdJbnQod2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9LFxuICAgICAgICB9KSxcbiAgICAgIC9GZWUgY2FsY3VsYXRpb24gZXJyb3I6IG91dHB1dHMgZXhjZWVkIGlucHV0cy9cbiAgICApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gIHRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKClcbiAgICAuZmlsdGVyKCh0KSA9PiB0Lm5ldHdvcmsgPT09IHV0eG9saWIubmV0d29ya3MuYml0Y29pbilcbiAgICAuZm9yRWFjaCgoYWNpZFRlc3QpID0+IHtcbiAgICAgIGRlc2NyaWJlKGFjaWRUZXN0Lm5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGV4cDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbkJpZ0ludDtcblxuICAgICAgICBiZWZvcmUoJ3ByZXBhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgcHNidEJ5dGVzID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpLnRvQnVmZmVyKCk7XG4gICAgICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgICAgIGFzc2VydChuZXR3b3JrTmFtZSk7XG4gICAgICAgICAgY29uc3Qgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnRCeXRlcywgbmV0d29ya05hbWUpO1xuICAgICAgICAgIGNvbnN0IHdhbGxldFhwdWJzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbShhY2lkVGVzdC5yb290V2FsbGV0S2V5cyk7XG4gICAgICAgICAgZXhwID0gZXhwbGFpblBzYnRXYXNtQmlnSW50KHdhc21Qc2J0LCB3YWxsZXRYcHVicywge1xuICAgICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWdncmVnYXRpbmcgYSBzaW5nbGUgZXhwbGFuYXRpb24gaXMgaWRlbnRpdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWdnID0gYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMoW2V4cF0pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuaW5wdXRDb3VudCwgZXhwLmlucHV0cy5sZW5ndGgpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cub3V0cHV0Q291bnQsIGV4cC5vdXRwdXRzLmxlbmd0aCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5jaGFuZ2VPdXRwdXRDb3VudCwgZXhwLmNoYW5nZU91dHB1dHMubGVuZ3RoKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmlucHV0QW1vdW50LCBleHAuaW5wdXRBbW91bnQpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cub3V0cHV0QW1vdW50LCBleHAub3V0cHV0QW1vdW50KTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmNoYW5nZUFtb3VudCwgZXhwLmNoYW5nZUFtb3VudCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5mZWUsIGV4cC5mZWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWdncmVnYXRpbmcgdHdvIGlkZW50aWNhbCBleHBsYW5hdGlvbnMgZG91YmxlcyBhbGwgY291bnRzIGFuZCBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFnZyA9IGFnZ3JlZ2F0ZVRyYW5zYWN0aW9uRXhwbGFuYXRpb25zKFtleHAsIGV4cF0pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuaW5wdXRDb3VudCwgZXhwLmlucHV0cy5sZW5ndGggKiAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLm91dHB1dENvdW50LCBleHAub3V0cHV0cy5sZW5ndGggKiAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmNoYW5nZU91dHB1dENvdW50LCBleHAuY2hhbmdlT3V0cHV0cy5sZW5ndGggKiAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmlucHV0QW1vdW50LCBleHAuaW5wdXRBbW91bnQgKiAybik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5vdXRwdXRBbW91bnQsIGV4cC5vdXRwdXRBbW91bnQgKiAybik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5jaGFuZ2VBbW91bnQsIGV4cC5jaGFuZ2VBbW91bnQgKiAybik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5mZWUsIGV4cC5mZWUgKiAybik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiJdfQ==
@@ -44,7 +44,6 @@ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
44
44
  const parseTransaction_1 = require("../../../../src/transaction/fixedScript/parseTransaction");
45
45
  const util_1 = require("../../util");
46
46
  const fixedScript_1 = require("../../../../src/transaction/fixedScript");
47
- const names_1 = require("../../../../src/names");
48
47
  function getTxParamsFromExplanation(explanation, { externalCustomChangeAddress }) {
49
48
  // The external outputs are the ones that are in outputs but not in changeOutputs
50
49
  const changeAddresses = new Set(explanation.changeOutputs.map((o) => o.address));
@@ -78,7 +77,7 @@ function describeParseTransactionWith(acidTest, label, { txParams, externalCusto
78
77
  let mockWallet;
79
78
  let stubExplainTransaction;
80
79
  before('prepare', async function () {
81
- const coinName = (0, names_1.getCoinName)(acidTest.network);
80
+ const coinName = (0, util_1.getCoinNameForNetwork)(acidTest.network);
82
81
  coin = (0, util_1.getUtxoCoin)(coinName);
83
82
  // Create PSBT and explanation
84
83
  const psbt = acidTest.createPsbt();
@@ -220,4 +219,4 @@ function describeTransaction(filter = () => true) {
220
219
  });
221
220
  }
222
221
  describeTransaction();
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3BhcnNlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2Q0FBK0I7QUFDL0IseURBQTJDO0FBQzNDLDhDQUE2RjtBQUM3RixnREFBcUQ7QUFFckQsK0ZBQTRGO0FBRzVGLHFDQUF5QztBQUN6Qyx5RUFBMEU7QUFFMUUsaURBQW9EO0FBR3BELFNBQVMsMEJBQTBCLENBQ2pDLFdBQW1DLEVBQ25DLEVBQUUsMkJBQTJCLEVBQTRDO0lBS3pFLGlGQUFpRjtJQUNqRixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakYsSUFBSSxlQUFlLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXRHLElBQUksYUFBaUMsQ0FBQztJQUN0QyxJQUFJLDJCQUEyQixFQUFFLENBQUM7UUFDaEMsZ0RBQWdEO1FBQ2hELEVBQUU7UUFDRiwwRUFBMEU7UUFDMUUsc0RBQXNEO1FBQ3RELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxhQUFhLEdBQUcsY0FBYyxDQUFD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QUM7WUFDRCxrQ0FBa0M7WUFFbEMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO2dCQUNyRCxRQUFRLEVBQUU7b0JBQ1IsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7Z0JBQ0QsbUNBQW1DLEVBQUUsRUFBRTtnQkFDdkMsbUNBQW1DLEVBQUUsS0FBSzthQUMzQyxDQUFDLENBQUM7WUFFSCw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUN4QyxRQUFRLEVBQUU7b0JBQ1IsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUMxQjtnQkFDRCxtQ0FBbUMsRUFBRSxLQUFLO2dCQUMxQyxtQ0FBbUMsRUFBRSxFQUFFO2FBQ3hDLENBQUMsQ0FBQztZQUVILDRCQUE0QixDQUFDLElBQUksRUFBRSw0QkFBNEIsRUFBRTtnQkFDL0QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsMkJBQTJCLEVBQUUsSUFBSTtnQkFDakMsbUNBQW1DLEVBQUUsS0FBSztnQkFDMUMsbUNBQW1DLEVBQUUsRUFBRTthQUN4QyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELG1CQUFtQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IFdhbGxldCwgVmVyaWZpY2F0aW9uT3B0aW9ucywgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgcGFyc2VUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3R5cGVzJztcbmltcG9ydCB7IFV0eG9XYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvd2FsbGV0JztcbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBleHBsYWluUHNidFdhc20gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblByZWJ1aWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2Fic3RyYWN0VXR4b0NvaW4nO1xuXG5mdW5jdGlvbiBnZXRUeFBhcmFtc0Zyb21FeHBsYW5hdGlvbihcbiAgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIHsgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzIH06IHsgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzOiBib29sZWFuIH1cbik6IHtcbiAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG59IHtcbiAgLy8gVGhlIGV4dGVybmFsIG91dHB1dHMgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGluIG91dHB1dHMgYnV0IG5vdCBpbiBjaGFuZ2VPdXRwdXRzXG4gIGNvbnN0IGNoYW5nZUFkZHJlc3NlcyA9IG5ldyBTZXQoZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5tYXAoKG8pID0+IG8uYWRkcmVzcykpO1xuICBsZXQgZXh0ZXJuYWxPdXRwdXRzID0gZXhwbGFuYXRpb24ub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uYWRkcmVzcyAmJiAhY2hhbmdlQWRkcmVzc2VzLmhhcyhvLmFkZHJlc3MpKTtcblxuICBsZXQgY2hhbmdlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzKSB7XG4gICAgLy8gY29udmVydCBhbiBleHRlcm5hbCBvdXRwdXQgdG8gYSBjaGFuZ2Ugb3V0cHV0XG4gICAgLy9cbiAgICAvLyBpbiBjb21iaW5hdGlvbiB3aXRoIGFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzLCB0aGlzIGFsbG93cyBhbiBleHRlcm5hbFxuICAgIC8vIG91dHB1dCBvbiB0aGUgdHJhbnNhY3Rpb24gd2l0aG91dCBhIHNpemUgY29uc3RyYWludFxuICAgIGNvbnN0IGV4dGVybmFsT3V0cHV0ID0gZXh0ZXJuYWxPdXRwdXRzWzBdO1xuICAgIGlmICghZXh0ZXJuYWxPdXRwdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZXh0ZXJuYWwgb3V0cHV0IGZvdW5kJyk7XG4gICAgfVxuICAgIGNoYW5nZUFkZHJlc3MgPSBleHRlcm5hbE91dHB1dC5hZGRyZXNzO1xuICAgIGV4dGVybmFsT3V0cHV0cyA9IGV4dGVybmFsT3V0cHV0cy5zbGljZSgxKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVjaXBpZW50czogZXh0ZXJuYWxPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzISxcbiAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudCxcbiAgICB9KSksXG4gICAgY2hhbmdlQWRkcmVzcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aChcbiAgYWNpZFRlc3Q6IHV0eG9saWIudGVzdHV0aWwuQWNpZFRlc3QsXG4gIGxhYmVsOiBzdHJpbmcsXG4gIHtcbiAgICB0eFBhcmFtcyxcbiAgICBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgPSBmYWxzZSxcbiAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgfToge1xuICAgIHR4UGFyYW1zOlxuICAgICAgfCB7XG4gICAgICAgICAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHJiZlR4SWRzOiBzdHJpbmdbXTtcbiAgICAgICAgfVxuICAgICAgfCAnaW5mZXJGcm9tRXhwbGFuYXRpb24nO1xuICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IGJpZ2ludDtcbiAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogYmlnaW50O1xuICB9XG4pIHtcbiAgZGVzY3JpYmUoYCR7YWNpZFRlc3QubmFtZX0vJHtsYWJlbH1gLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHJlZlBhcnNlZFRyYW5zYWN0aW9uOiBQYXJzZWRUcmFuc2FjdGlvbjxiaWdpbnQ+O1xuICAgIGxldCBjb2luOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRVdHhvQ29pbj47XG4gICAgbGV0IG1vY2tXYWxsZXQ6IHNpbm9uLlNpbm9uU3R1YmJlZEluc3RhbmNlPFdhbGxldD47XG4gICAgbGV0IHN0dWJFeHBsYWluVHJhbnNhY3Rpb246IHNpbm9uLlNpbm9uU3R1YjtcblxuICAgIGJlZm9yZSgncHJlcGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lID0gZ2V0Q29pbk5hbWUoYWNpZFRlc3QubmV0d29yayk7XG4gICAgICBjb2luID0gZ2V0VXR4b0NvaW4oY29pbk5hbWUpO1xuXG4gICAgICAvLyBDcmVhdGUgUFNCVCBhbmQgZXhwbGFuYXRpb25cbiAgICAgIGNvbnN0IHBzYnQgPSBhY2lkVGVzdC5jcmVhdGVQc2J0KCk7XG4gICAgICBjb25zdCB0eCA9IHBzYnQuZ2V0VW5zaWduZWRUeCgpO1xuICAgICAgY29uc3QgdHhIYXNoID0gdHguZ2V0SWQoKTtcblxuICAgICAgY29uc3Qgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKFxuICAgICAgICBwc2J0LnRvQnVmZmVyKCksXG4gICAgICAgIHV0eG9saWIuZ2V0TmV0d29ya05hbWUoYWNpZFRlc3QubmV0d29yaykhXG4gICAgICApO1xuICAgICAgY29uc3QgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20oXG4gICAgICAgIHdhc21Qc2J0LFxuICAgICAgICBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgICAgIHtcbiAgICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7XG4gICAgICAgICAgICBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgdHhQYXJhbXNcbiAgICAgIGxldCByZXNvbHZlZFR4UGFyYW1zO1xuICAgICAgaWYgKHR4UGFyYW1zID09PSAnaW5mZXJGcm9tRXhwbGFuYXRpb24nIHx8IHR4UGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcyA9IGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKGV4cGxhbmF0aW9uLCB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcyB9KTtcbiAgICAgIH0gZWxzZSBpZiAoJ3JiZlR4SWRzJyBpbiB0eFBhcmFtcykge1xuICAgICAgICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVyIHR4SGFzaCB3aXRoIGFjdHVhbCBjb21wdXRlZCB0eEhhc2hcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcyA9IHtcbiAgICAgICAgICByYmZUeElkczogdHhQYXJhbXMucmJmVHhJZHMubWFwKChoYXNoKSA9PiAoaGFzaCA9PT0gJ1BMQUNFSE9MREVSJyA/IHR4SGFzaCA6IGhhc2gpKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSB0eFBhcmFtcztcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcykge1xuICAgICAgICByZXNvbHZlZFR4UGFyYW1zLmFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG1vY2sgd2FsbGV0XG4gICAgICBtb2NrV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCk7XG4gICAgICBtb2NrV2FsbGV0LmlkLnJldHVybnMoJ3Rlc3Qtd2FsbGV0LWlkJyk7XG4gICAgICBtb2NrV2FsbGV0LmNvaW4ucmV0dXJucyhjb2luLmdldENoYWluKCkpO1xuICAgICAgbW9ja1dhbGxldC5jb2luU3BlY2lmaWMucmV0dXJucyh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBNb2NrIGdldFRyYW5zYWN0aW9uIGZvciBSQkYgY2FzZVxuICAgICAgaWYgKCdyYmZUeElkcycgaW4gcmVzb2x2ZWRUeFBhcmFtcykge1xuICAgICAgICBjb25zdCByYmZUeFBhcmFtcyA9IGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKGV4cGxhbmF0aW9uLCB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogZmFsc2UgfSk7XG4gICAgICAgIG1vY2tXYWxsZXQuZ2V0VHJhbnNhY3Rpb24ucmVzb2x2ZXMoe1xuICAgICAgICAgIG91dHB1dHM6IHJiZlR4UGFyYW1zLnJlY2lwaWVudHMubWFwKChyKSA9PiAoe1xuICAgICAgICAgICAgdmFsdWVTdHJpbmc6IHR5cGVvZiByLmFtb3VudCA9PT0gJ3N0cmluZycgPyByLmFtb3VudCA6IHIuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhZGRyZXNzOiByLmFkZHJlc3MsXG4gICAgICAgICAgICAvLyB3YWxsZXQgZmllbGQgaXMgdW5kZWZpbmVkIGZvciBleHRlcm5hbCBvdXRwdXRzIChub3Qgc2VsZi1zZW5kcylcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBNb2NrIHZlcmlmaWNhdGlvbiBvcHRpb25zIHdpdGgga2V5Y2hhaW5zIHRvIGRpc2FibGUgbmV0d29ya2luZ1xuICAgICAgLy8gVXNlIHRoZSBzYW1lIGtleWNoYWlucyB0aGF0IHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIFBTQlRcbiAgICAgIGNvbnN0IHB1YnMgPSBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb246IFZlcmlmaWNhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIGRpc2FibGVOZXR3b3JraW5nOiB0cnVlLFxuICAgICAgICBrZXljaGFpbnM6IHtcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnMCcsIHB1YjogcHVic1swXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgICAgIGJhY2t1cDogeyBpZDogJzEnLCBwdWI6IHB1YnNbMV0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgICBiaXRnbzogeyBpZDogJzInLCBwdWI6IHB1YnNbMl0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgZXhwbGFpblRyYW5zYWN0aW9uIHRvIHJldHVybiB0aGUgZXhwbGFuYXRpb24gd2l0aG91dCBtYWtpbmcgbmV0d29yayBjYWxsc1xuICAgICAgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbiA9IHNpbm9uLnN0dWIoY29pbiwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpLnJlc29sdmVzKGV4cGxhbmF0aW9uKTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxiaWdpbnQ+ID0ge1xuICAgICAgICB0eEhleDogcHNidC50b0hleCgpLFxuICAgICAgfTtcblxuICAgICAgcmVmUGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBwYXJzZVRyYW5zYWN0aW9uKGNvaW4sIHtcbiAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0IGFzIHVua25vd24gYXMgVXR4b1dhbGxldCxcbiAgICAgICAgdHhQYXJhbXM6IHJlc29sdmVkVHhQYXJhbXMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoJ2NsZWFudXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc3R1YkV4cGxhaW5UcmFuc2FjdGlvbikge1xuICAgICAgICBzdHViRXhwbGFpblRyYW5zYWN0aW9uLnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdHJhbnNhY3Rpb24gd2l0aG91dCBuZXR3b3JrIGNhbGxzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHZhbGlkIGtleWNoYWlucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMudXNlcik7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJhY2t1cCk7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJpdGdvKTtcbiAgICAgIGNvbnN0IHB1YnMgPSBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLnVzZXIucHViLCBwdWJzWzBdKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYmFja3VwLnB1YiwgcHVic1sxXSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJpdGdvLnB1YiwgcHVic1syXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgb3V0cHV0cyBjbGFzc2lmaWVkIGFzIGludGVybmFsIG9yIGV4dGVybmFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2luY2Ugd2UgZGlkbid0IHNwZWNpZnkgYW55IHJlY2lwaWVudHMsIG91dHB1dHMgd2lsbCBiZSBjbGFzc2lmaWVkIGJhc2VkIG9uIHdoZXRoZXIgdGhleSBjYW4gYmVcbiAgICAgIC8vIHZlcmlmaWVkIGFzIHdhbGxldCBhZGRyZXNzZXMuIFNvbWUgbWF5IGJlIGV4dGVybmFsIGlmIGFkZHJlc3MgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGhvdXQgYSBwcm9wZXIgd2FsbGV0IHNldHVwLlxuICAgICAgY29uc3QgdG90YWxPdXRwdXRzID0gcmVmUGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0cy5sZW5ndGg7XG4gICAgICBjb25zdCBjaGFuZ2VPdXRwdXRzID0gcmVmUGFyc2VkVHJhbnNhY3Rpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGg7XG4gICAgICBjb25zdCBleHRlcm5hbE91dHB1dHMgPSByZWZQYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzLmZpbHRlcigobykgPT4gby5leHRlcm5hbCA9PT0gdHJ1ZSkubGVuZ3RoO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4dGVybmFsT3V0cHV0cywgMyk7XG5cbiAgICAgIGFzc2VydC5vayh0b3RhbE91dHB1dHMgPiAwLCAnc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25lIG91dHB1dCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNoYW5nZU91dHB1dHMgKyBleHRlcm5hbE91dHB1dHMsIHRvdGFsT3V0cHV0cywgJ2FsbCBvdXRwdXRzIHNob3VsZCBiZSBjbGFzc2lmaWVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgZXhwZWN0ZWQgZXhwbGljaXQgYW5kIGltcGxpY2l0IGV4dGVybmFsIHNwZW5kIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQmlnSW50KHJlZlBhcnNlZFRyYW5zYWN0aW9uLmV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCksIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChCaWdJbnQocmVmUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSwgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVUcmFuc2FjdGlvbihmaWx0ZXI6ICh0ZXN0OiB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZSkge1xuICBkZXNjcmliZShgcGFyc2VUcmFuc2FjdGlvbmAsIGZ1bmN0aW9uICgpIHtcbiAgICB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKClcbiAgICAgIC5maWx0ZXIoZmlsdGVyKVxuICAgICAgLmZvckVhY2goKHRlc3QpID0+IHtcbiAgICAgICAgLy8gRGVmYXVsdCBjYXNlOiBwc2J0IGZvcm1hdCwgaW5mZXIgcmVjaXBpZW50cyBmcm9tIGV4cGxhbmF0aW9uXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2RlZmF1bHQnLCB7XG4gICAgICAgICAgdHhQYXJhbXM6ICdpbmZlckZyb21FeHBsYW5hdGlvbicsXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRlc3QubmV0d29yayAhPT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dGVuZGVkIHRlc3Qgc3VpdGUgZm9yIGJpdGNvaW5cblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdlbXB0eSByZWNpcGllbnRzJywge1xuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ3JiZicsIHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgcmJmVHhJZHM6IFsnUExBQ0VIT0xERVInXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxODAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2FsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzJywge1xuICAgICAgICAgIHR4UGFyYW1zOiAnaW5mZXJGcm9tRXhwbGFuYXRpb24nLFxuICAgICAgICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmVUcmFuc2FjdGlvbigpO1xuIl19
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3BhcnNlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2Q0FBK0I7QUFDL0IseURBQTJDO0FBQzNDLDhDQUE2RjtBQUM3RixnREFBcUQ7QUFFckQsK0ZBQTRGO0FBRzVGLHFDQUFnRTtBQUNoRSx5RUFBMEU7QUFJMUUsU0FBUywwQkFBMEIsQ0FDakMsV0FBbUMsRUFDbkMsRUFBRSwyQkFBMkIsRUFBNEM7SUFLekUsaUZBQWlGO0lBQ2pGLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRixJQUFJLGVBQWUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFdEcsSUFBSSxhQUFpQyxDQUFDO0lBQ3RDLElBQUksMkJBQTJCLEVBQUUsQ0FBQztRQUNoQyxnREFBZ0Q7UUFDaEQsRUFBRTtRQUNGLDBFQUEwRTtRQUMxRSxzREFBc0Q7UUFDdEQsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELGFBQWEsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLGVBQWUsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxPQUFPO1FBQ0wsVUFBVSxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0Msb0VBQW9FO1lBQ3BFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBUTtZQUN4QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FDbkMsUUFBbUMsRUFDbkMsS0FBYSxFQUNiLEVBQ0UsUUFBUSxFQUNSLDJCQUEyQixHQUFHLEtBQUssRUFDbkMsbUNBQW1DLEVBQ25DLG1DQUFtQyxHQWFwQztJQUVELFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7UUFDcEMsSUFBSSxvQkFBK0MsQ0FBQztRQUNwRCxJQUFJLElBQW9DLENBQUM7UUFDekMsSUFBSSxVQUE4QyxDQUFDO1FBQ25ELElBQUksc0JBQXVDLENBQUM7UUFFNUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUEsNEJBQXFCLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFFN0IsOEJBQThCO1lBQzlCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTFCLE1BQU0sUUFBUSxHQUFHLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQ3BELElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDZixPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUUsQ0FDMUMsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUEyQixJQUFBLDZCQUFlLEVBQ3pELFFBQVEsRUFDUixRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBbUIsRUFDcEY7Z0JBQ0UsZ0JBQWdCLEVBQUU7b0JBQ2hCLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO2lCQUN0RDthQUNGLENBQ0YsQ0FBQztZQUVGLHFCQUFxQjtZQUNyQixJQUFJLGdCQUFnQixDQUFDO1lBQ3JCLElBQUksUUFBUSxLQUFLLHNCQUFzQixJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbEUsZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUMsV0FBVyxFQUFFLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLENBQUM7aUJBQU0sSUFBSSxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2xDLHlEQUF5RDtnQkFDekQsZ0JBQWdCLEdBQUc7b0JBQ2pCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNwRixDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztZQUM5QixDQUFDO1lBRUQsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO2dCQUNoQyxnQkFBZ0IsQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7WUFDckQsQ0FBQztZQUVELHFCQUFxQjtZQUNyQixVQUFVLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGlCQUFNLENBQUMsQ0FBQztZQUM5QyxVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTNDLG1DQUFtQztZQUNuQyxJQUFJLFVBQVUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLFdBQVcsR0FBRywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRyxVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDakMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUMxQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7d0JBQzFFLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTzt3QkFDbEIsa0VBQWtFO3FCQUNuRSxDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELGlFQUFpRTtZQUNqRSwyREFBMkQ7WUFDM0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNoRixNQUFNLFlBQVksR0FBd0I7Z0JBQ3hDLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLFNBQVMsRUFBRTtvQkFDVCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtvQkFDcEQsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7b0JBQ3RELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO2lCQUN0RDthQUNGLENBQUM7WUFFRixpRkFBaUY7WUFDakYsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFdEYsTUFBTSxVQUFVLEdBQWdDO2dCQUM5QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTthQUNwQixDQUFDO1lBRUYsb0JBQW9CLEdBQUcsTUFBTSxJQUFBLG1DQUFnQixFQUFDLElBQUksRUFBRTtnQkFDbEQsTUFBTSxFQUFFLFVBQW1DO2dCQUMzQyxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixVQUFVO2dCQUNWLFlBQVk7YUFDYixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDZixJQUFJLHNCQUFzQixFQUFFLENBQUM7Z0JBQzNCLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRTtZQUNuRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ2hDLGdCQUFNLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLGdCQUFNLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZCQUE2QixFQUFFO1lBQ2hDLGdCQUFNLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDaEYsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUU7WUFDM0Qsa0dBQWtHO1lBQ2xHLGtIQUFrSDtZQUNsSCxNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3pELE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDaEUsTUFBTSxlQUFlLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDL0YsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXZDLGdCQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztZQUMvRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsZUFBZSxFQUFFLFlBQVksRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3hHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1FQUFtRSxFQUFFO1lBQ3RFLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDLENBQUM7WUFDbEgsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLDJCQUEyQixDQUFDLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztRQUNwSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsU0FBdUQsR0FBRyxFQUFFLENBQUMsSUFBSTtJQUM1RixRQUFRLENBQUMsa0JBQWtCLEVBQUU7UUFDM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO2FBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZCxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQiwrREFBK0Q7WUFDL0QsNEJBQTRCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDNUMsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsbUNBQW1DLEVBQUUsS0FBSztnQkFDMUMsbUNBQW1DLEVBQUUsRUFBRTthQUN4QyxDQUFDLENBQUM7WUFFSCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDOUMsT0FBTztZQUNULENBQUM7WUFDRCxrQ0FBa0M7WUFFbEMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO2dCQUNyRCxRQUFRLEVBQUU7b0JBQ1IsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7Z0JBQ0QsbUNBQW1DLEVBQUUsRUFBRTtnQkFDdkMsbUNBQW1DLEVBQUUsS0FBSzthQUMzQyxDQUFDLENBQUM7WUFFSCw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUN4QyxRQUFRLEVBQUU7b0JBQ1IsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUMxQjtnQkFDRCxtQ0FBbUMsRUFBRSxLQUFLO2dCQUMxQyxtQ0FBbUMsRUFBRSxFQUFFO2FBQ3hDLENBQUMsQ0FBQztZQUVILDRCQUE0QixDQUFDLElBQUksRUFBRSw0QkFBNEIsRUFBRTtnQkFDL0QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsMkJBQTJCLEVBQUUsSUFBSTtnQkFDakMsbUNBQW1DLEVBQUUsS0FBSztnQkFDMUMsbUNBQW1DLEVBQUUsRUFBRTthQUN4QyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELG1CQUFtQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IFdhbGxldCwgVmVyaWZpY2F0aW9uT3B0aW9ucywgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgcGFyc2VUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3R5cGVzJztcbmltcG9ydCB7IFV0eG9XYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvd2FsbGV0JztcbmltcG9ydCB7IGdldENvaW5OYW1lRm9yTmV0d29yaywgZ2V0VXR4b0NvaW4gfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IGV4cGxhaW5Qc2J0V2FzbSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uUHJlYnVpbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYWJzdHJhY3RVdHhvQ29pbic7XG5cbmZ1bmN0aW9uIGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKFxuICBleHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgfTogeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M6IGJvb2xlYW4gfVxuKToge1xuICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbiAgY2hhbmdlQWRkcmVzcz86IHN0cmluZztcbn0ge1xuICAvLyBUaGUgZXh0ZXJuYWwgb3V0cHV0cyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgaW4gb3V0cHV0cyBidXQgbm90IGluIGNoYW5nZU91dHB1dHNcbiAgY29uc3QgY2hhbmdlQWRkcmVzc2VzID0gbmV3IFNldChleHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLm1hcCgobykgPT4gby5hZGRyZXNzKSk7XG4gIGxldCBleHRlcm5hbE91dHB1dHMgPSBleHBsYW5hdGlvbi5vdXRwdXRzLmZpbHRlcigobykgPT4gby5hZGRyZXNzICYmICFjaGFuZ2VBZGRyZXNzZXMuaGFzKG8uYWRkcmVzcykpO1xuXG4gIGxldCBjaGFuZ2VBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmIChleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MpIHtcbiAgICAvLyBjb252ZXJ0IGFuIGV4dGVybmFsIG91dHB1dCB0byBhIGNoYW5nZSBvdXRwdXRcbiAgICAvL1xuICAgIC8vIGluIGNvbWJpbmF0aW9uIHdpdGggYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3MsIHRoaXMgYWxsb3dzIGFuIGV4dGVybmFsXG4gICAgLy8gb3V0cHV0IG9uIHRoZSB0cmFuc2FjdGlvbiB3aXRob3V0IGEgc2l6ZSBjb25zdHJhaW50XG4gICAgY29uc3QgZXh0ZXJuYWxPdXRwdXQgPSBleHRlcm5hbE91dHB1dHNbMF07XG4gICAgaWYgKCFleHRlcm5hbE91dHB1dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBleHRlcm5hbCBvdXRwdXQgZm91bmQnKTtcbiAgICB9XG4gICAgY2hhbmdlQWRkcmVzcyA9IGV4dGVybmFsT3V0cHV0LmFkZHJlc3M7XG4gICAgZXh0ZXJuYWxPdXRwdXRzID0gZXh0ZXJuYWxPdXRwdXRzLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZWNpcGllbnRzOiBleHRlcm5hbE91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MhLFxuICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LFxuICAgIH0pKSxcbiAgICBjaGFuZ2VBZGRyZXNzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKFxuICBhY2lkVGVzdDogdXR4b2xpYi50ZXN0dXRpbC5BY2lkVGVzdCxcbiAgbGFiZWw6IHN0cmluZyxcbiAge1xuICAgIHR4UGFyYW1zLFxuICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcyA9IGZhbHNlLFxuICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICB9OiB7XG4gICAgdHhQYXJhbXM6XG4gICAgICB8IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgcmJmVHhJZHM6IHN0cmluZ1tdO1xuICAgICAgICB9XG4gICAgICB8ICdpbmZlckZyb21FeHBsYW5hdGlvbic7XG4gICAgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzPzogYm9vbGVhbjtcbiAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogYmlnaW50O1xuICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiBiaWdpbnQ7XG4gIH1cbikge1xuICBkZXNjcmliZShgJHthY2lkVGVzdC5uYW1lfS8ke2xhYmVsfWAsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcmVmUGFyc2VkVHJhbnNhY3Rpb246IFBhcnNlZFRyYW5zYWN0aW9uPGJpZ2ludD47XG4gICAgbGV0IGNvaW46IFJldHVyblR5cGU8dHlwZW9mIGdldFV0eG9Db2luPjtcbiAgICBsZXQgbW9ja1dhbGxldDogc2lub24uU2lub25TdHViYmVkSW5zdGFuY2U8V2FsbGV0PjtcbiAgICBsZXQgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbjogc2lub24uU2lub25TdHViO1xuXG4gICAgYmVmb3JlKCdwcmVwYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29pbk5hbWUgPSBnZXRDb2luTmFtZUZvck5ldHdvcmsoYWNpZFRlc3QubmV0d29yayk7XG4gICAgICBjb2luID0gZ2V0VXR4b0NvaW4oY29pbk5hbWUpO1xuXG4gICAgICAvLyBDcmVhdGUgUFNCVCBhbmQgZXhwbGFuYXRpb25cbiAgICAgIGNvbnN0IHBzYnQgPSBhY2lkVGVzdC5jcmVhdGVQc2J0KCk7XG4gICAgICBjb25zdCB0eCA9IHBzYnQuZ2V0VW5zaWduZWRUeCgpO1xuICAgICAgY29uc3QgdHhIYXNoID0gdHguZ2V0SWQoKTtcblxuICAgICAgY29uc3Qgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKFxuICAgICAgICBwc2J0LnRvQnVmZmVyKCksXG4gICAgICAgIHV0eG9saWIuZ2V0TmV0d29ya05hbWUoYWNpZFRlc3QubmV0d29yaykhXG4gICAgICApO1xuICAgICAgY29uc3QgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20oXG4gICAgICAgIHdhc21Qc2J0LFxuICAgICAgICBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgICAgIHtcbiAgICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7XG4gICAgICAgICAgICBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgdHhQYXJhbXNcbiAgICAgIGxldCByZXNvbHZlZFR4UGFyYW1zO1xuICAgICAgaWYgKHR4UGFyYW1zID09PSAnaW5mZXJGcm9tRXhwbGFuYXRpb24nIHx8IHR4UGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcyA9IGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKGV4cGxhbmF0aW9uLCB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcyB9KTtcbiAgICAgIH0gZWxzZSBpZiAoJ3JiZlR4SWRzJyBpbiB0eFBhcmFtcykge1xuICAgICAgICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVyIHR4SGFzaCB3aXRoIGFjdHVhbCBjb21wdXRlZCB0eEhhc2hcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcyA9IHtcbiAgICAgICAgICByYmZUeElkczogdHhQYXJhbXMucmJmVHhJZHMubWFwKChoYXNoKSA9PiAoaGFzaCA9PT0gJ1BMQUNFSE9MREVSJyA/IHR4SGFzaCA6IGhhc2gpKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSB0eFBhcmFtcztcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcykge1xuICAgICAgICByZXNvbHZlZFR4UGFyYW1zLmFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG1vY2sgd2FsbGV0XG4gICAgICBtb2NrV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCk7XG4gICAgICBtb2NrV2FsbGV0LmlkLnJldHVybnMoJ3Rlc3Qtd2FsbGV0LWlkJyk7XG4gICAgICBtb2NrV2FsbGV0LmNvaW4ucmV0dXJucyhjb2luLmdldENoYWluKCkpO1xuICAgICAgbW9ja1dhbGxldC5jb2luU3BlY2lmaWMucmV0dXJucyh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBNb2NrIGdldFRyYW5zYWN0aW9uIGZvciBSQkYgY2FzZVxuICAgICAgaWYgKCdyYmZUeElkcycgaW4gcmVzb2x2ZWRUeFBhcmFtcykge1xuICAgICAgICBjb25zdCByYmZUeFBhcmFtcyA9IGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKGV4cGxhbmF0aW9uLCB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogZmFsc2UgfSk7XG4gICAgICAgIG1vY2tXYWxsZXQuZ2V0VHJhbnNhY3Rpb24ucmVzb2x2ZXMoe1xuICAgICAgICAgIG91dHB1dHM6IHJiZlR4UGFyYW1zLnJlY2lwaWVudHMubWFwKChyKSA9PiAoe1xuICAgICAgICAgICAgdmFsdWVTdHJpbmc6IHR5cGVvZiByLmFtb3VudCA9PT0gJ3N0cmluZycgPyByLmFtb3VudCA6IHIuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhZGRyZXNzOiByLmFkZHJlc3MsXG4gICAgICAgICAgICAvLyB3YWxsZXQgZmllbGQgaXMgdW5kZWZpbmVkIGZvciBleHRlcm5hbCBvdXRwdXRzIChub3Qgc2VsZi1zZW5kcylcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBNb2NrIHZlcmlmaWNhdGlvbiBvcHRpb25zIHdpdGgga2V5Y2hhaW5zIHRvIGRpc2FibGUgbmV0d29ya2luZ1xuICAgICAgLy8gVXNlIHRoZSBzYW1lIGtleWNoYWlucyB0aGF0IHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIFBTQlRcbiAgICAgIGNvbnN0IHB1YnMgPSBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb246IFZlcmlmaWNhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIGRpc2FibGVOZXR3b3JraW5nOiB0cnVlLFxuICAgICAgICBrZXljaGFpbnM6IHtcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnMCcsIHB1YjogcHVic1swXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgICAgIGJhY2t1cDogeyBpZDogJzEnLCBwdWI6IHB1YnNbMV0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgICBiaXRnbzogeyBpZDogJzInLCBwdWI6IHB1YnNbMl0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgZXhwbGFpblRyYW5zYWN0aW9uIHRvIHJldHVybiB0aGUgZXhwbGFuYXRpb24gd2l0aG91dCBtYWtpbmcgbmV0d29yayBjYWxsc1xuICAgICAgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbiA9IHNpbm9uLnN0dWIoY29pbiwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpLnJlc29sdmVzKGV4cGxhbmF0aW9uKTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxiaWdpbnQ+ID0ge1xuICAgICAgICB0eEhleDogcHNidC50b0hleCgpLFxuICAgICAgfTtcblxuICAgICAgcmVmUGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBwYXJzZVRyYW5zYWN0aW9uKGNvaW4sIHtcbiAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0IGFzIHVua25vd24gYXMgVXR4b1dhbGxldCxcbiAgICAgICAgdHhQYXJhbXM6IHJlc29sdmVkVHhQYXJhbXMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoJ2NsZWFudXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc3R1YkV4cGxhaW5UcmFuc2FjdGlvbikge1xuICAgICAgICBzdHViRXhwbGFpblRyYW5zYWN0aW9uLnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdHJhbnNhY3Rpb24gd2l0aG91dCBuZXR3b3JrIGNhbGxzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHZhbGlkIGtleWNoYWlucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMudXNlcik7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJhY2t1cCk7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJpdGdvKTtcbiAgICAgIGNvbnN0IHB1YnMgPSBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLnVzZXIucHViLCBwdWJzWzBdKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYmFja3VwLnB1YiwgcHVic1sxXSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJpdGdvLnB1YiwgcHVic1syXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgb3V0cHV0cyBjbGFzc2lmaWVkIGFzIGludGVybmFsIG9yIGV4dGVybmFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2luY2Ugd2UgZGlkbid0IHNwZWNpZnkgYW55IHJlY2lwaWVudHMsIG91dHB1dHMgd2lsbCBiZSBjbGFzc2lmaWVkIGJhc2VkIG9uIHdoZXRoZXIgdGhleSBjYW4gYmVcbiAgICAgIC8vIHZlcmlmaWVkIGFzIHdhbGxldCBhZGRyZXNzZXMuIFNvbWUgbWF5IGJlIGV4dGVybmFsIGlmIGFkZHJlc3MgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGhvdXQgYSBwcm9wZXIgd2FsbGV0IHNldHVwLlxuICAgICAgY29uc3QgdG90YWxPdXRwdXRzID0gcmVmUGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0cy5sZW5ndGg7XG4gICAgICBjb25zdCBjaGFuZ2VPdXRwdXRzID0gcmVmUGFyc2VkVHJhbnNhY3Rpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGg7XG4gICAgICBjb25zdCBleHRlcm5hbE91dHB1dHMgPSByZWZQYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzLmZpbHRlcigobykgPT4gby5leHRlcm5hbCA9PT0gdHJ1ZSkubGVuZ3RoO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4dGVybmFsT3V0cHV0cywgMyk7XG5cbiAgICAgIGFzc2VydC5vayh0b3RhbE91dHB1dHMgPiAwLCAnc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25lIG91dHB1dCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNoYW5nZU91dHB1dHMgKyBleHRlcm5hbE91dHB1dHMsIHRvdGFsT3V0cHV0cywgJ2FsbCBvdXRwdXRzIHNob3VsZCBiZSBjbGFzc2lmaWVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgZXhwZWN0ZWQgZXhwbGljaXQgYW5kIGltcGxpY2l0IGV4dGVybmFsIHNwZW5kIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQmlnSW50KHJlZlBhcnNlZFRyYW5zYWN0aW9uLmV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCksIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChCaWdJbnQocmVmUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSwgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVUcmFuc2FjdGlvbihmaWx0ZXI6ICh0ZXN0OiB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZSkge1xuICBkZXNjcmliZShgcGFyc2VUcmFuc2FjdGlvbmAsIGZ1bmN0aW9uICgpIHtcbiAgICB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKClcbiAgICAgIC5maWx0ZXIoZmlsdGVyKVxuICAgICAgLmZvckVhY2goKHRlc3QpID0+IHtcbiAgICAgICAgLy8gRGVmYXVsdCBjYXNlOiBwc2J0IGZvcm1hdCwgaW5mZXIgcmVjaXBpZW50cyBmcm9tIGV4cGxhbmF0aW9uXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2RlZmF1bHQnLCB7XG4gICAgICAgICAgdHhQYXJhbXM6ICdpbmZlckZyb21FeHBsYW5hdGlvbicsXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRlc3QubmV0d29yayAhPT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dGVuZGVkIHRlc3Qgc3VpdGUgZm9yIGJpdGNvaW5cblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdlbXB0eSByZWNpcGllbnRzJywge1xuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ3JiZicsIHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgcmJmVHhJZHM6IFsnUExBQ0VIT0xERVInXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxODAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2FsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzJywge1xuICAgICAgICAgIHR4UGFyYW1zOiAnaW5mZXJGcm9tRXhwbGFuYXRpb24nLFxuICAgICAgICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmVUcmFuc2FjdGlvbigpO1xuIl19