@bitgo/abstract-utxo 9.2.2 → 9.3.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 (34) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/src/abstractUtxoCoin.d.ts +6 -7
  3. package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
  4. package/dist/src/abstractUtxoCoin.js +53 -20
  5. package/dist/src/descriptor/assertDescriptorWalletAddress.js +2 -3
  6. package/dist/src/names.d.ts +13 -0
  7. package/dist/src/names.d.ts.map +1 -0
  8. package/dist/src/names.js +142 -0
  9. package/dist/src/parseOutput.js +2 -3
  10. package/dist/src/recovery/RecoveryProvider.js +2 -3
  11. package/dist/src/recovery/backupKeyRecovery.js +4 -5
  12. package/dist/src/recovery/baseApi.js +1 -1
  13. package/dist/src/recovery/coingeckoApi.js +1 -1
  14. package/dist/src/recovery/crossChainRecovery.js +5 -6
  15. package/dist/src/recovery/mempoolApi.js +1 -1
  16. package/dist/src/replayProtection.js +3 -4
  17. package/dist/src/sign.js +4 -4
  18. package/dist/src/transaction/explainTransaction.d.ts +14 -0
  19. package/dist/src/transaction/explainTransaction.d.ts.map +1 -0
  20. package/dist/src/transaction/explainTransaction.js +191 -0
  21. package/dist/src/transaction/fetchInputs.d.ts +26 -0
  22. package/dist/src/transaction/fetchInputs.d.ts.map +1 -0
  23. package/dist/src/transaction/fetchInputs.js +77 -0
  24. package/dist/src/transaction/index.d.ts +4 -0
  25. package/dist/src/transaction/index.d.ts.map +1 -0
  26. package/dist/src/transaction/index.js +20 -0
  27. package/dist/src/transaction/recipient.d.ts +28 -0
  28. package/dist/src/transaction/recipient.d.ts.map +1 -0
  29. package/dist/src/transaction/recipient.js +47 -0
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +7 -7
  32. package/dist/src/transaction.d.ts +0 -64
  33. package/dist/src/transaction.d.ts.map +0 -1
  34. package/dist/src/transaction.js +0 -323
@@ -44,4 +44,4 @@ class CoingeckoApi extends baseApi_1.BaseApi {
44
44
  }
45
45
  }
46
46
  exports.CoingeckoApi = CoingeckoApi;
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbmdlY2tvQXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2NvaW5nZWNrb0FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILHVDQUFvQztBQUVwQyxNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxFQUFFO0tBQ3hDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO0tBQ3JCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO0tBQ3RCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDO0tBQzFCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO0tBQ25CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLGtIQUFrSDtJQUNsSCx3RUFBd0U7S0FDdkUsR0FBRyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUM7S0FDM0IsR0FBRyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztBQUU5QixNQUFhLFlBQWEsU0FBUSxpQkFBTztJQUN2QztRQUNFLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQWtCO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDMUY7UUFDRCxNQUFNLFlBQVksR0FBRyxxQkFBcUIsV0FBVyxvQkFBb0IsQ0FBQztRQUMxRSxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQU0sWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUQsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIseUJBQXlCO1lBQ3pCLElBQUk7WUFDSixrQkFBa0I7WUFDbEIsb0JBQW9CO1lBQ3BCLE1BQU07WUFDTixJQUFJO1lBQ0osSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7YUFDbEU7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDN0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO2FBQzNFO1lBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE3QkQsb0NBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQmFzZUFwaSB9IGZyb20gJy4vYmFzZUFwaSc7XG5cbmNvbnN0IGZhbWlseU5hbWVzVG9Db2luR2Vja29JZHMgPSBuZXcgTWFwKClcbiAgLnNldCgnQlRDJywgJ2JpdGNvaW4nKVxuICAuc2V0KCdMVEMnLCAnbGl0ZWNvaW4nKVxuICAuc2V0KCdCQ0gnLCAnYml0Y29pbi1jYXNoJylcbiAgLnNldCgnWkVDJywgJ3pjYXNoJylcbiAgLnNldCgnREFTSCcsICdkYXNoJylcbiAgLy8gbm90ZTogd2UgZG9uJ3QgaGF2ZSBhIHNvdXJjZSBmb3IgcHJpY2UgZGF0YSBvZiBCQ0hBIGFuZCBCU1YsIGJ1dCB3ZSB3aWxsIHVzZSBCQ0ggYXMgYSBwcm94eS4gV2Ugd2lsbCBzdWJzdGl0dXRlXG4gIC8vIGl0IG91dCBmb3IgYSBiZXR0ZXIgc291cmNlIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUuICBUT0RPIEJHLTI2MzU5LlxuICAuc2V0KCdCQ0hBJywgJ2JpdGNvaW4tY2FzaCcpXG4gIC5zZXQoJ0JTVicsICdiaXRjb2luLWNhc2gnKTtcblxuZXhwb3J0IGNsYXNzIENvaW5nZWNrb0FwaSBleHRlbmRzIEJhc2VBcGkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignaHR0cHM6Ly9hcGkuY29pbmdlY2tvLmNvbS9hcGkvdjMnKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVTRFByaWNlKGNvaW5GYW1pbHk6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgY29pbkdlY2tvSWQgPSBmYW1pbHlOYW1lc1RvQ29pbkdlY2tvSWRzLmdldChjb2luRmFtaWx5LnRvVXBwZXJDYXNlKCkpO1xuICAgIGlmICghY29pbkdlY2tvSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gQ29pbkdlY2tvIGlkIGZvciBmYW1pbHkgbmFtZSAke2NvaW5GYW1pbHkudG9VcHBlckNhc2UoKX0uYCk7XG4gICAgfVxuICAgIGNvbnN0IGNvaW5HZWNrb1VybCA9IGAvc2ltcGxlL3ByaWNlP2lkcz0ke2NvaW5HZWNrb0lkfSZ2c19jdXJyZW5jaWVzPVVTRGA7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXQ8YW55Pihjb2luR2Vja29VcmwsIHsgcmV0cnk6IDIgfSk7XG4gICAgcmV0dXJuIHJlcy5tYXAoKGJvZHkpID0+IHtcbiAgICAgIC8vIEFuIGV4YW1wbGUgb2YgcmVzcG9uc2VcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgXCJldGhlcmV1bVwiOiB7XG4gICAgICAvLyAgICAgXCJ1c2RcIjogMjIwLjY0XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIGlmICghYm9keSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZWFjaCBDb2luIEdlY2tvIEFQSSBmb3IgcHJpY2UgZGF0YScpO1xuICAgICAgfVxuICAgICAgaWYgKCFib2R5W2NvaW5HZWNrb0lkXVsndXNkJ10gfHwgdHlwZW9mIGJvZHlbY29pbkdlY2tvSWRdWyd1c2QnXSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHJlc3BvbnNlIGZyb20gQ29pbiBHZWNrbyBBUEkgZm9yIHByaWNlIGRhdGEnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJvZHlbY29pbkdlY2tvSWRdWyd1c2QnXTtcbiAgICB9KTtcbiAgfVxufVxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbmdlY2tvQXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2NvaW5nZWNrb0FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILHVDQUFvQztBQUVwQyxNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxFQUFFO0tBQ3hDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO0tBQ3JCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO0tBQ3RCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDO0tBQzFCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO0tBQ25CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLGtIQUFrSDtJQUNsSCx3RUFBd0U7S0FDdkUsR0FBRyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUM7S0FDM0IsR0FBRyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztBQUU5QixNQUFhLFlBQWEsU0FBUSxpQkFBTztJQUN2QztRQUNFLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQWtCO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsVUFBVSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcscUJBQXFCLFdBQVcsb0JBQW9CLENBQUM7UUFDMUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFNLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RCLHlCQUF5QjtZQUN6QixJQUFJO1lBQ0osa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixNQUFNO1lBQ04sSUFBSTtZQUNKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztZQUM1RSxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE3QkQsb0NBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQmFzZUFwaSB9IGZyb20gJy4vYmFzZUFwaSc7XG5cbmNvbnN0IGZhbWlseU5hbWVzVG9Db2luR2Vja29JZHMgPSBuZXcgTWFwKClcbiAgLnNldCgnQlRDJywgJ2JpdGNvaW4nKVxuICAuc2V0KCdMVEMnLCAnbGl0ZWNvaW4nKVxuICAuc2V0KCdCQ0gnLCAnYml0Y29pbi1jYXNoJylcbiAgLnNldCgnWkVDJywgJ3pjYXNoJylcbiAgLnNldCgnREFTSCcsICdkYXNoJylcbiAgLy8gbm90ZTogd2UgZG9uJ3QgaGF2ZSBhIHNvdXJjZSBmb3IgcHJpY2UgZGF0YSBvZiBCQ0hBIGFuZCBCU1YsIGJ1dCB3ZSB3aWxsIHVzZSBCQ0ggYXMgYSBwcm94eS4gV2Ugd2lsbCBzdWJzdGl0dXRlXG4gIC8vIGl0IG91dCBmb3IgYSBiZXR0ZXIgc291cmNlIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUuICBUT0RPIEJHLTI2MzU5LlxuICAuc2V0KCdCQ0hBJywgJ2JpdGNvaW4tY2FzaCcpXG4gIC5zZXQoJ0JTVicsICdiaXRjb2luLWNhc2gnKTtcblxuZXhwb3J0IGNsYXNzIENvaW5nZWNrb0FwaSBleHRlbmRzIEJhc2VBcGkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignaHR0cHM6Ly9hcGkuY29pbmdlY2tvLmNvbS9hcGkvdjMnKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVTRFByaWNlKGNvaW5GYW1pbHk6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgY29pbkdlY2tvSWQgPSBmYW1pbHlOYW1lc1RvQ29pbkdlY2tvSWRzLmdldChjb2luRmFtaWx5LnRvVXBwZXJDYXNlKCkpO1xuICAgIGlmICghY29pbkdlY2tvSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gQ29pbkdlY2tvIGlkIGZvciBmYW1pbHkgbmFtZSAke2NvaW5GYW1pbHkudG9VcHBlckNhc2UoKX0uYCk7XG4gICAgfVxuICAgIGNvbnN0IGNvaW5HZWNrb1VybCA9IGAvc2ltcGxlL3ByaWNlP2lkcz0ke2NvaW5HZWNrb0lkfSZ2c19jdXJyZW5jaWVzPVVTRGA7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXQ8YW55Pihjb2luR2Vja29VcmwsIHsgcmV0cnk6IDIgfSk7XG4gICAgcmV0dXJuIHJlcy5tYXAoKGJvZHkpID0+IHtcbiAgICAgIC8vIEFuIGV4YW1wbGUgb2YgcmVzcG9uc2VcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgXCJldGhlcmV1bVwiOiB7XG4gICAgICAvLyAgICAgXCJ1c2RcIjogMjIwLjY0XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIGlmICghYm9keSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZWFjaCBDb2luIEdlY2tvIEFQSSBmb3IgcHJpY2UgZGF0YScpO1xuICAgICAgfVxuICAgICAgaWYgKCFib2R5W2NvaW5HZWNrb0lkXVsndXNkJ10gfHwgdHlwZW9mIGJvZHlbY29pbkdlY2tvSWRdWyd1c2QnXSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHJlc3BvbnNlIGZyb20gQ29pbiBHZWNrbyBBUEkgZm9yIHByaWNlIGRhdGEnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJvZHlbY29pbkdlY2tvSWRdWyd1c2QnXTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.recoverCrossChain = exports.isWalletAddress = exports.getWalletKeys = exports.getWallet = void 0;
3
+ exports.getWallet = getWallet;
4
+ exports.getWalletKeys = getWalletKeys;
5
+ exports.isWalletAddress = isWalletAddress;
6
+ exports.recoverCrossChain = recoverCrossChain;
4
7
  /**
5
8
  * @prettier
6
9
  */
@@ -30,7 +33,6 @@ async function getWallet(bitgo, coin, walletId) {
30
33
  throw new Error(`could not get wallet ${walletId} from v1 or v2: ${e.toString()}`);
31
34
  }
32
35
  }
33
- exports.getWallet = getWallet;
34
36
  /**
35
37
  * @param recoveryCoin
36
38
  * @param wallet
@@ -50,7 +52,6 @@ async function getWalletKeys(recoveryCoin, wallet) {
50
52
  }
51
53
  return new utxolib.bitgo.RootWalletKeys(xpubs.map((k) => utxo_lib_1.bip32.fromBase58(k)));
52
54
  }
53
- exports.getWalletKeys = getWalletKeys;
54
55
  async function isWalletAddress(wallet, address) {
55
56
  try {
56
57
  let addressData;
@@ -66,7 +67,6 @@ async function isWalletAddress(wallet, address) {
66
67
  return false;
67
68
  }
68
69
  }
69
- exports.isWalletAddress = isWalletAddress;
70
70
  /**
71
71
  * @param coin
72
72
  * @param txid
@@ -329,5 +329,4 @@ async function recoverCrossChain(bitgo, params) {
329
329
  };
330
330
  }
331
331
  }
332
- exports.recoverCrossChain = recoverCrossChain;
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILHFDQUFxQztBQUVyQywyQ0FBMkM7QUFDM0MsOENBQXdEO0FBRXhELE1BQU0sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQU14RSw4Q0FBNkM7QUFFN0MsOENBQStFO0FBRy9FLDRDQUF5QztBQUN6QyxrQ0FBeUQ7QUF5Q2xELEtBQUssVUFBVSxTQUFTLENBQzdCLEtBQWdCLEVBQ2hCLElBQXNCLEVBQ3RCLFFBQWdCO0lBRWhCLElBQUk7UUFDRixPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQ25EO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDViwrQ0FBK0M7UUFDL0Msa0pBQWtKO1FBQ2xKLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7WUFDbkIsTUFBTSxDQUFDLENBQUM7U0FDVDtLQUNGO0lBRUQsSUFBSTtRQUNGLE9BQU8sTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7S0FDcEQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFFBQVEsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDcEY7QUFDSCxDQUFDO0FBcEJELDhCQW9CQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxDQUNqQyxZQUE4QixFQUM5QixNQUEwQjtJQUUxQixJQUFJLEtBQXFCLENBQUM7SUFFMUIsSUFBSSxNQUFNLFlBQVksaUJBQU0sRUFBRTtRQUM1QixNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBMEIsQ0FBQztRQUMxRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQW1CLENBQUM7S0FDdkQ7U0FBTTtRQUNMLEtBQUssR0FBSSxNQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQW1CLENBQUM7S0FDN0U7SUFFRCxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQTJCLENBQUMsQ0FBQztBQUMzRyxDQUFDO0FBakJELHNDQWlCQztBQUVNLEtBQUssVUFBVSxlQUFlLENBQUMsTUFBMEIsRUFBRSxPQUFlO0lBQy9FLElBQUk7UUFDRixJQUFJLFdBQVcsQ0FBQztRQUNoQixJQUFJLE1BQU0sWUFBWSxpQkFBTSxFQUFFO1lBQzVCLFdBQVcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDTCxXQUFXLEdBQUcsTUFBTyxNQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDL0Q7UUFFRCxPQUFPLFdBQVcsS0FBSyxTQUFTLENBQUM7S0FDbEM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBYkQsMENBYUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsS0FBSyxVQUFVLHFCQUFxQixDQUNsQyxJQUFzQixFQUN0QixJQUFZLEVBQ1osYUFBa0MsUUFBUSxFQUMxQyxNQUEwQixFQUMxQixNQUFlO0lBRWYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLE1BQU0sZUFBZSxHQUFHLENBQ3RCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDOUIseUdBQXlHO1FBQ3pHLHlHQUF5RztRQUN6Ryw0REFBNEQ7UUFDNUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9ELE1BQU0sYUFBYSxHQUFHLE1BQU0sZUFBZSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBRXhDLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLHVCQUF1QixDQUFDLGVBQTJCLENBQUMsQ0FBQztJQUNoRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNoRDtJQUNELG1FQUFtRTtJQUNuRSxzREFBc0Q7SUFDdEQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7UUFDckMsT0FBTztZQUNMLEdBQUcsY0FBYztZQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDdEQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFVLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDO1NBQ2xGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFVRCxLQUFLLFVBQVUsV0FBVyxDQUFDLElBQXNCLEVBQUUsTUFBMEIsRUFBRSxNQUFjO0lBQzNGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RSxJQUFJLFdBQTZDLENBQUM7SUFDbEQsSUFBSSxNQUFNLFlBQVksaUJBQU0sRUFBRTtRQUM1QixXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNwRDtTQUFNO1FBQ0wsV0FBVyxHQUFHLE1BQU8sTUFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQy9EO0lBQ0QsSUFBSSxPQUFPLFdBQVcsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sV0FBVyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDbEYsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDL0Q7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsS0FBSyxVQUFVLGdCQUFnQixDQUM3QixVQUE0QixFQUM1QixZQUE4QixFQUM5QixRQUE0QixFQUM1QixNQUEwQjtJQUUxQixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRCxPQUFPLENBQ0wsTUFBTSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFxQyxFQUFFO1FBQ3ZGLElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSTtZQUNGLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNqSDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sUUFBUTthQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUM7YUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1gsR0FBRyxDQUFDO1lBQ0osR0FBRyxRQUFRO1NBQ1osQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDLENBQUMsQ0FDSCxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1gsQ0FBQztBQUVEOzs7R0FHRztBQUNILEtBQUssVUFBVSxlQUFlLENBQUMsSUFBc0I7SUFDbkQsd0JBQXdCO0lBQ3hCLE1BQU0sT0FBTyxHQUFHO1FBQ2QsR0FBRyxFQUFFLEVBQUU7UUFDUCxJQUFJLEVBQUUsRUFBRTtRQUNSLElBQUksRUFBRSxFQUFFO1FBQ1IsS0FBSyxFQUFFLEVBQUU7UUFDVCxHQUFHLEVBQUUsRUFBRTtRQUNQLElBQUksRUFBRSxFQUFFO1FBQ1IsR0FBRyxFQUFFLEVBQUU7UUFDUCxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxFQUFFO1FBQ1gsS0FBSyxFQUFFLEVBQUU7UUFDVCxTQUFTLEVBQUUsRUFBRTtRQUNiLEdBQUcsRUFBRSxHQUFHO1FBQ1IsSUFBSSxFQUFFLEdBQUc7UUFDVCxJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUVuQixJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN0RDtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxNQUFNLENBQUMsSUFBYSxFQUFFLFVBQW1CLEVBQUUsTUFBMkI7SUFDbkYsSUFBSSxJQUFJLEVBQUU7UUFDUixNQUFNLEdBQUcsR0FBRyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDdEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7S0FDMUU7SUFFRCxJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSxNQUFNLFlBQVksaUJBQU0sRUFBRTtRQUM1QixZQUFZLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDO0tBQ3ZFO1NBQU07UUFDTCxZQUFZLEdBQUcsQ0FBQyxNQUFPLE1BQW1CLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQztLQUN0RjtJQUVELE9BQU8sTUFBTSxDQUFDLElBQUEsaUJBQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixPQUF3QixFQUN4QixRQUFrQyxFQUNsQyxhQUFxQixFQUNyQixZQUFvQixFQUNwQixNQUEwRCxFQUMxRCxhQUFrQyxRQUFRO0lBRTFDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBVSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0QsTUFBTSxLQUFLLEdBQUcscUJBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1FBQzlDLElBQUksRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUU7UUFDNUIsVUFBVSxFQUFFLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRTtLQUMzQyxDQUFDO1NBQ0MsSUFBSSxDQUFDLHFCQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDL0YsUUFBUSxFQUFFLENBQUM7SUFDZCxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDO0lBRWpDLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBVSxPQUFPLENBQUMsQ0FBQztJQUM5RixrQkFBa0IsQ0FBQyxTQUFTLENBQzFCLGFBQWEsRUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBVSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUMvRSxDQUFDO0lBQ0YsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckUsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN2RCxJQUFJLE1BQU0sRUFBRTtRQUNWLFdBQVcsR0FBRyxJQUFBLHFDQUE4QixFQUFVLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7WUFDMUYsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQ2hCLFdBQW1ELEVBQ25ELFFBQWtDLEVBQ2xDLFFBQWdCLEVBQ2hCLFVBQTBCLEVBQzFCLGFBQWtDLFFBQVE7SUFFMUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQVUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUMxQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNyRSxVQUFVLENBQ1gsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFDL0IsTUFBTSxFQUFFLEtBQUs7S0FDZCxDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNoQyxRQUFRO1FBQ1IsK0ZBQStGO1FBQy9GLDZGQUE2RjtRQUM3RixnR0FBZ0c7UUFDaEcsV0FBVztRQUNYLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsR0FBRyxhQUFhLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVqSCxPQUFPO1lBQ0wsR0FBRyxDQUFDO1lBQ0osTUFBTSxFQUFFLFFBQVE7WUFDaEIsVUFBVSxFQUFFLFFBQVE7WUFDcEIsWUFBWSxFQUFFLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzNDLGFBQWEsRUFBRSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNkLENBQUM7SUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPO1FBQ0wsV0FBVztRQUNYLFlBQVk7UUFDWixRQUFRLEVBQUUsV0FBVyxHQUFHLFlBQVk7UUFDcEMsV0FBVyxFQUFFLFlBQVk7UUFDekIsTUFBTTtRQUNOLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLE9BQU87UUFDUCxlQUFlLEVBQUUsT0FBTztRQUN4QixhQUFhLEVBQUUsRUFBRTtRQUNqQixRQUFRLEVBQUUsQ0FBQztLQUNaLENBQUMsb0dBQWdJLENBQUM7QUFDckksQ0FBQztBQUVELFNBQVMsVUFBVSxDQUNqQixXQUFtRCxFQUNuRCxRQUFrQyxFQUNsQyxhQUFrQyxRQUFRO0lBRTFDLE1BQU0sS0FBSyxHQUFHLHFCQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtRQUM5QyxJQUFJLEVBQUUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFO1FBQzVCLFVBQVUsRUFBRSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7S0FDM0MsQ0FBQztTQUNDLElBQUksQ0FBQyxxQkFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUMsUUFBUSxFQUFFLENBQUM7SUFDZCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBVSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDNUUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQ3ZELE9BQU87UUFDTCxJQUFJLEVBQUUsS0FBSztRQUNYLEdBQUc7UUFDSCxPQUFPLEVBQUUsR0FBRyxHQUFHLEtBQUs7UUFDcEIsUUFBUSxFQUFFLENBQUM7S0FDWixDQUFDO0FBQ0osQ0FBQztBQXFCRDs7Ozs7Ozs7O0dBU0c7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLEtBQWdCLEVBQ2hCLE1BQXFCO0lBRXJCLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLHFCQUFxQixDQUMxQyxNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsSUFBSSxFQUNYLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUM1QixNQUFNLEVBQ04sTUFBTSxDQUFDLE1BQU0sQ0FDZCxDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBVSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pILE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEUsTUFBTSxHQUFHLEdBQ1AsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDbEgsTUFBTSxNQUFNLEdBQUcsR0FBRztRQUNoQixDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFpQixVQUFVLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDMUYsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNkLE1BQU0sWUFBWSxHQUFHLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5RCxNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FDeEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQ3pCLGNBQWMsRUFDZCxNQUFNLENBQUMsZUFBZSxFQUN0QixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUM3QixDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQ3RCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsTUFBTSxDQUFDLFFBQVEsRUFDZixVQUFVLEVBQ1YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQzdCLENBQUM7SUFDRixJQUFJLEdBQUcsRUFBRTtRQUNQLE9BQU87WUFDTCxPQUFPLEVBQUUsTUFBTSxZQUFZLGlCQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsS0FBSztZQUNMLE1BQU07WUFDTixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDeEMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQzVDLGNBQWM7U0FDZixDQUFDO0tBQ0g7U0FBTTtRQUNMLE9BQU87WUFDTCxLQUFLO1lBQ0wsTUFBTTtZQUNOLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDOUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxlQUFlO1lBQy9CLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtTQUNuQyxDQUFDO0tBQ0g7QUFDSCxDQUFDO0FBekRELDhDQXlEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIEJsdWViaXJkIGZyb20gJ2JsdWViaXJkJztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIsIEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuY29uc3QgeyB1bnNwZW50U3VtLCBzY3JpcHRUeXBlRm9yQ2hhaW4sIG91dHB1dFNjcmlwdHMgfSA9IHV0eG9saWIuYml0Z287XG5leHBvcnQgdHlwZSBSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG50eXBlIFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLlVuc3BlbnQ8VE51bWJlcj47XG50eXBlIFdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnQ8VE51bWJlcj47XG50eXBlIFdhbGxldFVuc3BlbnRMZWdhY3k8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRMZWdhY3k8VE51bWJlcj47XG5cbmltcG9ydCB7IERpbWVuc2lvbnMgfSBmcm9tICdAYml0Z28vdW5zcGVudHMnO1xuXG5pbXBvcnQgeyBCaXRHb0Jhc2UsIElXYWxsZXQsIEtleWNoYWluLCBUcmlwbGUsIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBUcmFuc2FjdGlvbkluZm8gfSBmcm9tICcuLi9hYnN0cmFjdFV0eG9Db2luJztcblxuaW1wb3J0IHsgZGVjcnlwdCB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IHNpZ25BbmRWZXJpZnlXYWxsZXRUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3NpZ24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkUmVjb3ZlcnlUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB3YWxsZXQ6IHN0cmluZztcbiAgZmF1bHR5VHhJZDogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M6IHN0cmluZztcbn1cblxudHlwZSBGZWVJbmZvID0ge1xuICBzaXplOiBudW1iZXI7XG4gIGZlZVJhdGU6IG51bWJlcjtcbiAgZmVlOiBudW1iZXI7XG4gIHBheUdvRmVlOiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvOiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIGZlZUluZm86IEZlZUluZm87XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIHZlcnNpb246IDEgfCAyO1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgc291cmNlQ29pbjogc3RyaW5nO1xuICByZWNvdmVyeUNvaW46IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzPzogc3RyaW5nO1xuICByZWNvdmVyeUFtb3VudD86IFROdW1iZXI7XG59XG5cbnR5cGUgV2FsbGV0VjEgPSB7XG4gIGtleWNoYWluczogeyB4cHViOiBzdHJpbmcgfVtdO1xuICBhZGRyZXNzKHsgYWRkcmVzcyB9OiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTx7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfT47XG4gIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpOiBQcm9taXNlPHsgZW5jcnlwdGVkWHBydjogc3RyaW5nIH0+O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdhbGxldChcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgd2FsbGV0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxJV2FsbGV0IHwgV2FsbGV0VjE+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgY29pbi53YWxsZXRzKCkuZ2V0KHsgaWQ6IHdhbGxldElkIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVE9ETzogQkctNDYzNjQgaGFuZGxlIGVycm9ycyBtb3JlIGdyYWNlZnVsbHlcbiAgICAvLyBUaGUgdjIgZW5kcG9pbnQgY29pbi53YWxsZXRzKCkuZ2V0KCkgbWF5IHRocm93IDQwNCBvciA0MDAgZXJyb3JzLCBidXQgdGhpcyBzaG91bGQgbm90IHByZXZlbnQgdXMgZnJvbSBzZWFyY2hpbmcgZm9yIHRoZSB3YWxsZXRJZCBpbiB2MSB3YWxsZXRzLlxuICAgIGlmIChlLnN0YXR1cyA+PSA1MDApIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgYml0Z28ud2FsbGV0cygpLmdldCh7IGlkOiB3YWxsZXRJZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IGdldCB3YWxsZXQgJHt3YWxsZXRJZH0gZnJvbSB2MSBvciB2MjogJHtlLnRvU3RyaW5nKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjb3ZlcnlDb2luXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcmV0dXJuIHdhbGxldCBwdWJrZXlzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXYWxsZXRLZXlzKFxuICByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxXG4pOiBQcm9taXNlPFJvb3RXYWxsZXRLZXlzPiB7XG4gIGxldCB4cHViczogVHJpcGxlPHN0cmluZz47XG5cbiAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IChhd2FpdCByZWNvdmVyeUNvaW4ua2V5Y2hhaW5zKCkuZ2V0S2V5c0ZvclNpZ25pbmcoeyB3YWxsZXQgfSkpIGFzIHVua25vd24gYXMgS2V5Y2hhaW5bXTtcbiAgICBpZiAoa2V5Y2hhaW5zLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCB0cmlwbGUgZ290ICR7a2V5Y2hhaW5zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgeHB1YnMgPSBrZXljaGFpbnMubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz47XG4gIH0gZWxzZSB7XG4gICAgeHB1YnMgPSAod2FsbGV0IGFzIFdhbGxldFYxKS5rZXljaGFpbnMubWFwKChrKSA9PiBrLnhwdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICB9XG5cbiAgcmV0dXJuIG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKHhwdWJzLm1hcCgoaykgPT4gYmlwMzIuZnJvbUJhc2U1OChrKSkgYXMgVHJpcGxlPEJJUDMySW50ZXJmYWNlPik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc1dhbGxldEFkZHJlc3Mod2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsIGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGxldCBhZGRyZXNzRGF0YTtcbiAgICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgICBhZGRyZXNzRGF0YSA9IGF3YWl0IHdhbGxldC5nZXRBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkcmVzc0RhdGEgPSBhd2FpdCAod2FsbGV0IGFzIFdhbGxldFYxKS5hZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkcmVzc0RhdGEgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gdHhpZFxuICogQHBhcmFtIGFtb3VudFR5cGVcbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEBwYXJhbSBhcGlLZXkgLSBhIGJsb2NrY2hhaXIgYXBpIGtleVxuICogQHJldHVybiBhbGwgdW5zcGVudHMgZm9yIHRyYW5zYWN0aW9uIG91dHB1dHMsIGluY2x1ZGluZyBvdXRwdXRzIGZyb20gb3RoZXIgdHJhbnNhY3Rpb25zXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFsbFJlY292ZXJ5T3V0cHV0czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgdHhpZDogc3RyaW5nLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcicsXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxLFxuICBhcGlLZXk/OiBzdHJpbmdcbik6IFByb21pc2U8VW5zcGVudDxUTnVtYmVyPltdPiB7XG4gIGNvbnN0IGFwaSA9IGNvaW4uZ2V0UmVjb3ZlcnlQcm92aWRlcihhcGlLZXkpO1xuICBjb25zdCB0eCA9IGF3YWl0IGFwaS5nZXRUcmFuc2FjdGlvbklPKHR4aWQpO1xuICBjb25zdCB3YWxsZXRBZGRyZXNzZXMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0eC5vdXRwdXRzLm1hcChhc3luYyAob3V0cHV0KSA9PiB7XG4gICAgICAgIC8vIEZvciBzb21lIGNvaW5zIChiY2gpIHdlIG5lZWQgdG8gY29udmVydCB0aGUgYWRkcmVzcyB0byBsZWdhY3kgZm9ybWF0IHNpbmNlIHRoZSBhcGkgcmV0dXJucyB0aGUgYWRkcmVzc1xuICAgICAgICAvLyBpbiBub24gbGVnYWN5IGZvcm1hdC4gSG93ZXZlciwgd2Ugd2FudCB0byBrZWVwIHRoZSBhZGRyZXNzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgcmVzcG9uc2Ugc2luY2Ugd2VcbiAgICAgICAgLy8gYXJlIGdvaW5nIHRvIGhpdCB0aGUgQVBJIGFnYWluIHRvIGZldGNoIGFkZHJlc3MgdW5zcGVudHMuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbEFkZHJlc3MgPSBjb2luLmNhbm9uaWNhbEFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpO1xuICAgICAgICBjb25zdCBpc1dhbGxldE93bmVkID0gYXdhaXQgaXNXYWxsZXRBZGRyZXNzKHdhbGxldCwgY2Fub25pY2FsQWRkcmVzcyk7XG4gICAgICAgIHJldHVybiBpc1dhbGxldE93bmVkID8gb3V0cHV0LmFkZHJlc3MgOiBudWxsO1xuICAgICAgfSlcbiAgICApXG4gICkuZmlsdGVyKChhZGRyZXNzKSA9PiBhZGRyZXNzICE9PSBudWxsKTtcblxuICBjb25zdCB1bnNwZW50cyA9IGF3YWl0IGFwaS5nZXRVbnNwZW50c0ZvckFkZHJlc3Nlcyh3YWxsZXRBZGRyZXNzZXMgYXMgc3RyaW5nW10pO1xuICBpZiAodW5zcGVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyByZWNvdmVyeSB1bnNwZW50cyBmb3VuZC5gKTtcbiAgfVxuICAvLyB0aGUgYXBpIG1heSByZXR1cm4gY2FzaGFkZHIncyBpbnN0ZWFkIG9mIGxlZ2FjeSBmb3IgQkNIIGFuZCBCQ0hBXG4gIC8vIGRvd25zdHJlYW0gcHJvY2Vzc2VzJ3Mgb25seSBleHBlY3QgbGVnYWN5IGFkZHJlc3Nlc1xuICByZXR1cm4gdW5zcGVudHMubWFwKChyZWNvdmVyeU91dHB1dCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZWNvdmVyeU91dHB1dCxcbiAgICAgIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhyZWNvdmVyeU91dHB1dC5hZGRyZXNzKSxcbiAgICAgIHZhbHVlOiB1dHhvbGliLmJpdGdvLnRvVE51bWJlcjxUTnVtYmVyPihCaWdJbnQocmVjb3ZlcnlPdXRwdXQudmFsdWUpLCBhbW91bnRUeXBlKSxcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBEYXRhIHJlcXVpcmVkIGZvciBhZGRyZXNzIGFuZCBzaWduYXR1cmUgZGVyaXZhdGlvblxuICovXG50eXBlIFNjcmlwdElkID0ge1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0U2NyaXB0SWQoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsIHNjcmlwdDogQnVmZmVyKTogUHJvbWlzZTxTY3JpcHRJZD4ge1xuICBjb25zdCBhZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0LCBjb2luLm5ldHdvcmspO1xuICBsZXQgYWRkcmVzc0RhdGE6IHsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9O1xuICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgYWRkcmVzc0RhdGEgPSBhd2FpdCB3YWxsZXQuZ2V0QWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gIH0gZWxzZSB7XG4gICAgYWRkcmVzc0RhdGEgPSBhd2FpdCAod2FsbGV0IGFzIFdhbGxldFYxKS5hZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgfVxuICBpZiAodHlwZW9mIGFkZHJlc3NEYXRhLmNoYWluID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYWRkcmVzc0RhdGEuaW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHsgY2hhaW46IGFkZHJlc3NEYXRhLmNoYWluLCBpbmRleDogYWRkcmVzc0RhdGEuaW5kZXggfTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhZGRyZXNzIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoYWRkcmVzc0RhdGEpfWApO1xufVxuXG4vKipcbiAqIExvb2t1cCBhZGRyZXNzIGRhdGEgZnJvbSB1bnNwZW50cyBvbiBzb3VyY2VDb2luIGluIGFkZHJlc3MgZGF0YWJhc2Ugb2YgcmVjb3ZlcnlDb2luLlxuICogUmV0dXJuIGZ1bGwgd2FsbGV0VW5zcGVudHMgaW5jbHVkaW5nIHNjcmlwdElkIGluIHNvdXJjZUNvaW4gZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBzb3VyY2VDb2luXG4gKiBAcGFyYW0gcmVjb3ZlcnlDb2luXG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEByZXR1cm4gd2FsbGV0VW5zcGVudHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9XYWxsZXRVbnNwZW50czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB1bnNwZW50czogVW5zcGVudDxUTnVtYmVyPltdLFxuICB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMVxuKTogUHJvbWlzZTxXYWxsZXRVbnNwZW50PFROdW1iZXI+W10+IHtcbiAgY29uc3QgYWRkcmVzc2VzID0gbmV3IFNldCh1bnNwZW50cy5tYXAoKHUpID0+IHUuYWRkcmVzcykpO1xuICByZXR1cm4gKFxuICAgIGF3YWl0IEJsdWViaXJkLm1hcFNlcmllcyhhZGRyZXNzZXMsIGFzeW5jIChhZGRyZXNzKTogUHJvbWlzZTxXYWxsZXRVbnNwZW50PFROdW1iZXI+W10+ID0+IHtcbiAgICAgIGxldCBzY3JpcHRJZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNjcmlwdElkID0gYXdhaXQgZ2V0U2NyaXB0SWQocmVjb3ZlcnlDb2luLCB3YWxsZXQsIHV0eG9saWIuYWRkcmVzcy50b091dHB1dFNjcmlwdChhZGRyZXNzLCBzb3VyY2VDb2luLm5ldHdvcmspKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgZXJyb3IgZ2V0dGluZyBzY3JpcHRJZCBmb3IgJHthZGRyZXNzfTpgLCBlKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuc3BlbnRzXG4gICAgICAgIC5maWx0ZXIoKHUpID0+IHUuYWRkcmVzcyA9PT0gYWRkcmVzcylcbiAgICAgICAgLm1hcCgodSkgPT4gKHtcbiAgICAgICAgICAuLi51LFxuICAgICAgICAgIC4uLnNjcmlwdElkLFxuICAgICAgICB9KSk7XG4gICAgfSlcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICogQHBhcmFtIGNvaW5cbiAqIEByZXR1cm4gZmVlUmF0ZSBmb3IgdHJhbnNhY3Rpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RmVlUmF0ZVNhdFZCKGNvaW46IEFic3RyYWN0VXR4b0NvaW4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAvLyBUT0RPOiB1c2UgZmVlUmF0ZSBBUElcbiAgY29uc3QgZmVlUmF0ZSA9IHtcbiAgICBiY2g6IDIwLFxuICAgIHRiY2g6IDIwLFxuICAgIGJjaGE6IDIwLFxuICAgIHRiY2hhOiAyMCxcbiAgICBic3Y6IDIwLFxuICAgIHRic3Y6IDIwLFxuICAgIGJ0YzogODAsXG4gICAgdGJ0YzogODAsXG4gICAgdGJ0Y3NpZzogODAsXG4gICAgdGJ0YzQ6IDgwLFxuICAgIHRidGNiZ3NpZzogODAsXG4gICAgbHRjOiAxMDAsXG4gICAgdGx0YzogMTAwLFxuICAgIGRvZ2U6IDEwMDAsXG4gICAgdGRvZ2U6IDEwMDAsXG4gIH1bY29pbi5nZXRDaGFpbigpXTtcblxuICBpZiAoIWZlZVJhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGZlZVJhdGUgZm9yICR7Y29pbi5nZXRDaGFpbigpfWApO1xuICB9XG5cbiAgcmV0dXJuIGZlZVJhdGU7XG59XG5cbi8qKlxuICogQHBhcmFtIHhwcnZcbiAqIEBwYXJhbSBwYXNzcGhyYXNlXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcmV0dXJuIHNpZ25pbmcga2V5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBydih4cHJ2Pzogc3RyaW5nLCBwYXNzcGhyYXNlPzogc3RyaW5nLCB3YWxsZXQ/OiBJV2FsbGV0IHwgV2FsbGV0VjEpOiBQcm9taXNlPEJJUDMySW50ZXJmYWNlPiB7XG4gIGlmICh4cHJ2KSB7XG4gICAgY29uc3Qga2V5ID0gYmlwMzIuZnJvbUJhc2U1OCh4cHJ2KTtcbiAgICBpZiAoa2V5LmlzTmV1dGVyZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3QgYSBwcml2YXRlIGtleWApO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgaWYgKCF3YWxsZXQgfHwgIXBhc3NwaHJhc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHhwcnYgZ2l2ZW46IG5lZWQgd2FsbGV0IGFuZCBwYXNzcGhyYXNlIHRvIGNvbnRpbnVlYCk7XG4gIH1cblxuICBsZXQgZW5jcnlwdGVkUHJ2OiBzdHJpbmc7XG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBlbmNyeXB0ZWRQcnYgPSAoYXdhaXQgd2FsbGV0LmdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpKS5lbmNyeXB0ZWRQcnY7XG4gIH0gZWxzZSB7XG4gICAgZW5jcnlwdGVkUHJ2ID0gKGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpKS5lbmNyeXB0ZWRYcHJ2O1xuICB9XG5cbiAgcmV0dXJuIGdldFBydihkZWNyeXB0KHBhc3NwaHJhc2UsIGVuY3J5cHRlZFBydikpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBuZXR3b3JrXG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSB0YXJnZXRBZGRyZXNzXG4gKiBAcGFyYW0gZmVlUmF0ZVNhdFZCXG4gKiBAcGFyYW0gc2lnbmVyIC0gaWYgc2V0LCBzaWduIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gYW1vdW50VHlwZVxuICogQHJldHVybiB0cmFuc2FjdGlvbiBzcGVuZGluZyBmdWxsIGlucHV0IGFtb3VudCB0byB0YXJnZXRBZGRyZXNzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVN3ZWVwVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgdGFyZ2V0QWRkcmVzczogc3RyaW5nLFxuICBmZWVSYXRlU2F0VkI6IG51bWJlcixcbiAgc2lnbmVyPzogdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPixcbiAgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIGNvbnN0IGlucHV0VmFsdWUgPSB1bnNwZW50U3VtPFROdW1iZXI+KHVuc3BlbnRzLCBhbW91bnRUeXBlKTtcbiAgY29uc3QgdnNpemUgPSBEaW1lbnNpb25zLmZyb21VbnNwZW50cyh1bnNwZW50cywge1xuICAgIHAydHI6IHsgc2NyaXB0UGF0aExldmVsOiAxIH0sXG4gICAgcDJ0ck11c2lnMjogeyBzY3JpcHRQYXRoTGV2ZWw6IHVuZGVmaW5lZCB9LFxuICB9KVxuICAgIC5wbHVzKERpbWVuc2lvbnMuZnJvbU91dHB1dCh7IHNjcmlwdDogdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KHRhcmdldEFkZHJlc3MsIG5ldHdvcmspIH0pKVxuICAgIC5nZXRWU2l6ZSgpO1xuICBjb25zdCBmZWUgPSB2c2l6ZSAqIGZlZVJhdGVTYXRWQjtcblxuICBjb25zdCB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlckZvck5ldHdvcms8VE51bWJlcj4obmV0d29yayk7XG4gIHRyYW5zYWN0aW9uQnVpbGRlci5hZGRPdXRwdXQoXG4gICAgdGFyZ2V0QWRkcmVzcyxcbiAgICB1dHhvbGliLmJpdGdvLnRvVE51bWJlcjxUTnVtYmVyPihCaWdJbnQoaW5wdXRWYWx1ZSkgLSBCaWdJbnQoZmVlKSwgYW1vdW50VHlwZSlcbiAgKTtcbiAgdW5zcGVudHMuZm9yRWFjaCgodW5zcGVudCkgPT4ge1xuICAgIHV0eG9saWIuYml0Z28uYWRkVG9UcmFuc2FjdGlvbkJ1aWxkZXIodHJhbnNhY3Rpb25CdWlsZGVyLCB1bnNwZW50KTtcbiAgfSk7XG4gIGxldCB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uQnVpbGRlci5idWlsZEluY29tcGxldGUoKTtcbiAgaWYgKHNpZ25lcikge1xuICAgIHRyYW5zYWN0aW9uID0gc2lnbkFuZFZlcmlmeVdhbGxldFRyYW5zYWN0aW9uPFROdW1iZXI+KHRyYW5zYWN0aW9uQnVpbGRlciwgdW5zcGVudHMsIHNpZ25lciwge1xuICAgICAgaXNMYXN0U2lnbmF0dXJlOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHJhbnNhY3Rpb247XG59XG5cbmZ1bmN0aW9uIGdldFR4SW5mbzxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgdHJhbnNhY3Rpb246IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxUTnVtYmVyPltdLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB3YWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInXG4pOiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj4ge1xuICBjb25zdCBpbnB1dEFtb3VudCA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bTxUTnVtYmVyPih1bnNwZW50cywgYW1vdW50VHlwZSk7XG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IHV0eG9saWIuYml0Z28udG9UTnVtYmVyPFROdW1iZXI+KFxuICAgIHRyYW5zYWN0aW9uLm91dHMucmVkdWNlKChzdW0sIG8pID0+IHN1bSArIEJpZ0ludChvLnZhbHVlKSwgQmlnSW50KDApKSxcbiAgICBhbW91bnRUeXBlXG4gICk7XG4gIGNvbnN0IG91dHB1dHMgPSB0cmFuc2FjdGlvbi5vdXRzLm1hcCgobykgPT4gKHtcbiAgICBhZGRyZXNzOiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChvLnNjcmlwdCwgdHJhbnNhY3Rpb24ubmV0d29yayksXG4gICAgdmFsdWVTdHJpbmc6IG8udmFsdWUudG9TdHJpbmcoKSxcbiAgICBjaGFuZ2U6IGZhbHNlLFxuICB9KSk7XG4gIGNvbnN0IGlucHV0cyA9IHVuc3BlbnRzLm1hcCgodSkgPT4ge1xuICAgIC8vIE5PVEU6XG4gICAgLy8gVGhlIGByZWRlZW1TY3JpcHRgIGFuZCBgd2FsbGV0U2NyaXB0YCBwcm9wZXJ0aWVzIGFyZSByZXF1aXJlZCBmb3IgbGVnYWN5IHZlcnNpb25zIG9mIEJpdEdvSlNcbiAgICAvLyB3aGljaCBtaWdodCByZXF1aXJlIHRoZXNlIHNjcmlwdHMgZm9yIHNpZ25pbmcuIFRoZSBXYWxsZXQgUmVjb3ZlcnkgV2l6YXJkIChXUlcpIGNhbiBjcmVhdGVcbiAgICAvLyB1bnNpZ25lZCBwcmVidWlsZHMgdGhhdCBhcmUgc3VibWl0dGVkIHRvIEJpdEdvSlMgaW5zdGFuY2VzIHdoaWNoIGFyZSBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWVcbiAgICAvLyB2ZXJzaW9uLlxuICAgIGNvbnN0IGFkZHJlc3NLZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHUuY2hhaW4sIHUuaW5kZXgpO1xuICAgIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlRm9yQ2hhaW4odS5jaGFpbik7XG4gICAgY29uc3QgeyByZWRlZW1TY3JpcHQsIHdpdG5lc3NTY3JpcHQgfSA9IG91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhhZGRyZXNzS2V5cy5wdWJsaWNLZXlzLCBzY3JpcHRUeXBlKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi51LFxuICAgICAgd2FsbGV0OiB3YWxsZXRJZCxcbiAgICAgIGZyb21XYWxsZXQ6IHdhbGxldElkLFxuICAgICAgcmVkZWVtU2NyaXB0OiByZWRlZW1TY3JpcHQ/LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHdpdG5lc3NTY3JpcHQ6IHdpdG5lc3NTY3JpcHQ/LnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9IGFzIFdhbGxldFVuc3BlbnRMZWdhY3k8VE51bWJlcj47XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGlucHV0QW1vdW50LFxuICAgIG91dHB1dEFtb3VudCxcbiAgICBtaW5lckZlZTogaW5wdXRBbW91bnQgLSBvdXRwdXRBbW91bnQsXG4gICAgc3BlbmRBbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICBpbnB1dHMsXG4gICAgdW5zcGVudHM6IGlucHV0cyxcbiAgICBvdXRwdXRzLFxuICAgIGV4dGVybmFsT3V0cHV0czogb3V0cHV0cyxcbiAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICBwYXlHb0ZlZTogMCxcbiAgfSAvKiBjYXN0IHRvIFRyYW5zYWN0aW9uSW5mbyB0byBhbGxvdyBleHRyYSBmaWVsZHMgbWF5IGJlIHJlcXVpcmVkIGJ5IGxlZ2FjeSBjb25zdW1lcnMgb2YgdGhpcyBkYXRhICovIGFzIFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbn1cblxuZnVuY3Rpb24gZ2V0RmVlSW5mbzxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgdHJhbnNhY3Rpb246IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxUTnVtYmVyPltdLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IEZlZUluZm8ge1xuICBjb25zdCB2c2l6ZSA9IERpbWVuc2lvbnMuZnJvbVVuc3BlbnRzKHVuc3BlbnRzLCB7XG4gICAgcDJ0cjogeyBzY3JpcHRQYXRoTGV2ZWw6IDEgfSxcbiAgICBwMnRyTXVzaWcyOiB7IHNjcmlwdFBhdGhMZXZlbDogdW5kZWZpbmVkIH0sXG4gIH0pXG4gICAgLnBsdXMoRGltZW5zaW9ucy5mcm9tT3V0cHV0cyh0cmFuc2FjdGlvbi5vdXRzKSlcbiAgICAuZ2V0VlNpemUoKTtcbiAgY29uc3QgaW5wdXRBbW91bnQgPSB1dHhvbGliLmJpdGdvLnVuc3BlbnRTdW08VE51bWJlcj4odW5zcGVudHMsIGFtb3VudFR5cGUpO1xuICBjb25zdCBvdXRwdXRBbW91bnQgPSB0cmFuc2FjdGlvbi5vdXRzLnJlZHVjZSgoc3VtLCBvKSA9PiBzdW0gKyBCaWdJbnQoby52YWx1ZSksIEJpZ0ludCgwKSk7XG4gIGNvbnN0IGZlZSA9IE51bWJlcihCaWdJbnQoaW5wdXRBbW91bnQpIC0gb3V0cHV0QW1vdW50KTtcbiAgcmV0dXJuIHtcbiAgICBzaXplOiB2c2l6ZSxcbiAgICBmZWUsXG4gICAgZmVlUmF0ZTogZmVlIC8gdnNpemUsXG4gICAgcGF5R29GZWU6IDAsXG4gIH07XG59XG5cbnR5cGUgUmVjb3ZlclBhcmFtcyA9IHtcbiAgLyoqIFdhbGxldCBJRCAoY2FuIGJlIHYxIHdhbGxldCBvciB2MiB3YWxsZXQpICovXG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIC8qKiBDb2luIHRvIGNyZWF0ZSB0aGUgdHJhbnNhY3Rpb24gZm9yICovXG4gIHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW47XG4gIC8qKiBDb2luIHRoYXQgd2FsbGV0IGtleXMgd2VyZSBzZXQgdXAgZm9yICovXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgLyoqIFNvdXJjZSBjb2luIHRyYW5zYWN0aW9uIHRvIHJlY292ZXIgb3V0cHV0cyBmcm9tIChzb3VyY2VDb2luKSAqL1xuICB0eGlkOiBzdHJpbmc7XG4gIC8qKiBTb3VyY2UgY29pbiBhZGRyZXNzIHRvIHNlbmQgdGhlIGZ1bmRzIHRvICovXG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xuICAvKiogSWYgc2V0LCBkZWNyeXB0cyBwcml2YXRlIGtleSBhbmQgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgLyoqIElmIHNldCwgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgeHBydj86IHN0cmluZztcbiAgLyoqIGZvciB1dHhvIGNvaW5zIG90aGVyIHRoYW4gW0JUQyxUQlRDXSB0aGlzIGlzIGEgQmxvY2sgQ2hhaXIgYXBpIGtleSAqKi9cbiAgYXBpS2V5Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZWNvdmVyIHdhbGxldCBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgb24gdGhlIHdyb25nIGJsb2NrY2hhaW5cbiAqIChmb3IgaW5zdGFuY2UgYml0Y29pbiBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgZm9yIGEgbGl0ZWNvaW4gd2FsbGV0KS5cbiAqXG4gKiBGZXRjaGVzIHRoZSB1bnNwZW50IGRhdGEgZnJvbSBCaXRHbydzIHB1YmxpYyBibG9ja2NoYWluIEFQSSBhbmQgdGhlIHNjcmlwdCBkYXRhIGZyb20gdGhlIHVzZXInc1xuICogd2FsbGV0LlxuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnb1xuICogQHBhcmFtIHtSZWNvdmVyUGFyYW1zfSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgZ2V0V2FsbGV0KGJpdGdvLCBwYXJhbXMucmVjb3ZlcnlDb2luLCBwYXJhbXMud2FsbGV0SWQpO1xuICBjb25zdCB1bnNwZW50cyA9IGF3YWl0IGdldEFsbFJlY292ZXJ5T3V0cHV0czxUTnVtYmVyPihcbiAgICBwYXJhbXMuc291cmNlQ29pbixcbiAgICBwYXJhbXMudHhpZCxcbiAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlLFxuICAgIHdhbGxldCxcbiAgICBwYXJhbXMuYXBpS2V5XG4gICk7XG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzID0gYXdhaXQgdG9XYWxsZXRVbnNwZW50czxUTnVtYmVyPihwYXJhbXMuc291cmNlQ29pbiwgcGFyYW1zLnJlY292ZXJ5Q29pbiwgdW5zcGVudHMsIHdhbGxldCk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBhd2FpdCBnZXRXYWxsZXRLZXlzKHBhcmFtcy5yZWNvdmVyeUNvaW4sIHdhbGxldCk7XG4gIGNvbnN0IHBydiA9XG4gICAgcGFyYW1zLnhwcnYgfHwgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyBhd2FpdCBnZXRQcnYocGFyYW1zLnhwcnYsIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLCB3YWxsZXQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBzaWduZXIgPSBwcnZcbiAgICA/IG5ldyB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXI8Um9vdFdhbGxldEtleXM+KHdhbGxldEtleXMsIHBydiwgd2FsbGV0S2V5cy5iaXRnbylcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZmVlUmF0ZVNhdFZCID0gYXdhaXQgZ2V0RmVlUmF0ZVNhdFZCKHBhcmFtcy5zb3VyY2VDb2luKTtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBjcmVhdGVTd2VlcFRyYW5zYWN0aW9uPFROdW1iZXI+KFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLm5ldHdvcmssXG4gICAgd2FsbGV0VW5zcGVudHMsXG4gICAgcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyxcbiAgICBmZWVSYXRlU2F0VkIsXG4gICAgc2lnbmVyLFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGVcbiAgKTtcbiAgY29uc3QgcmVjb3ZlcnlBbW91bnQgPSB0cmFuc2FjdGlvbi5vdXRzWzBdLnZhbHVlO1xuICBjb25zdCB0eEhleCA9IHRyYW5zYWN0aW9uLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCB0eEluZm8gPSBnZXRUeEluZm88VE51bWJlcj4oXG4gICAgdHJhbnNhY3Rpb24sXG4gICAgd2FsbGV0VW5zcGVudHMsXG4gICAgcGFyYW1zLndhbGxldElkLFxuICAgIHdhbGxldEtleXMsXG4gICAgcGFyYW1zLnNvdXJjZUNvaW4uYW1vdW50VHlwZVxuICApO1xuICBpZiAocHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246IHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCA/IDIgOiAxLFxuICAgICAgd2FsbGV0SWQ6IHBhcmFtcy53YWxsZXRJZCxcbiAgICAgIHR4SGV4LFxuICAgICAgdHhJbmZvLFxuICAgICAgc291cmNlQ29pbjogcGFyYW1zLnNvdXJjZUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgIHJlY292ZXJ5Q29pbjogcGFyYW1zLnJlY292ZXJ5Q29pbi5nZXRDaGFpbigpLFxuICAgICAgcmVjb3ZlcnlBbW91bnQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXgsXG4gICAgICB0eEluZm8sXG4gICAgICB3YWxsZXRJZDogcGFyYW1zLndhbGxldElkLFxuICAgICAgZmVlSW5mbzogZ2V0RmVlSW5mbyh0cmFuc2FjdGlvbiwgd2FsbGV0VW5zcGVudHMsIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGUpLFxuICAgICAgYWRkcmVzczogcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIGNvaW46IHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgfTtcbiAgfVxufVxuIl19
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZEQSw4QkFvQkM7QUFPRCxzQ0FpQkM7QUFFRCwwQ0FhQztBQXFURCw4Q0F5REM7QUF0ZUQ7O0dBRUc7QUFDSCxxQ0FBcUM7QUFFckMsMkNBQTJDO0FBQzNDLDhDQUF3RDtBQUV4RCxNQUFNLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFNeEUsOENBQTZDO0FBRTdDLDhDQUErRTtBQUcvRSw0Q0FBeUM7QUFDekMsa0NBQXlEO0FBeUNsRCxLQUFLLFVBQVUsU0FBUyxDQUM3QixLQUFnQixFQUNoQixJQUFzQixFQUN0QixRQUFnQjtJQUVoQixJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsK0NBQStDO1FBQy9DLGtKQUFrSjtRQUNsSixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixRQUFRLG1CQUFtQixDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7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TixNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FDN0IsQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2pELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUN0QixXQUFXLEVBQ1gsY0FBYyxFQUNkLE1BQU0sQ0FBQyxRQUFRLEVBQ2YsVUFBVSxFQUNWLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUM3QixDQUFDO0lBQ0YsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNSLE9BQU87WUFDTCxPQUFPLEVBQUUsTUFBTSxZQUFZLGlCQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsS0FBSztZQUNMLE1BQU07WUFDTixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDeEMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQzVDLGNBQWM7U0FDZixDQUFDO0lBQ0osQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPO1lBQ0wsS0FBSztZQUNMLE1BQU07WUFDTixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQzlFLE9BQU8sRUFBRSxNQUFNLENBQUMsZUFBZTtZQUMvQixJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7U0FDbkMsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICogYXMgQmx1ZWJpcmQgZnJvbSAnYmx1ZWJpcmQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMiwgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5jb25zdCB7IHVuc3BlbnRTdW0sIHNjcmlwdFR5cGVGb3JDaGFpbiwgb3V0cHV0U2NyaXB0cyB9ID0gdXR4b2xpYi5iaXRnbztcbmV4cG9ydCB0eXBlIFJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cztcbnR5cGUgVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IHV0eG9saWIuYml0Z28uVW5zcGVudDxUTnVtYmVyPjtcbnR5cGUgV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudDxUTnVtYmVyPjtcbnR5cGUgV2FsbGV0VW5zcGVudExlZ2FjeTxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudExlZ2FjeTxUTnVtYmVyPjtcblxuaW1wb3J0IHsgRGltZW5zaW9ucyB9IGZyb20gJ0BiaXRnby91bnNwZW50cyc7XG5cbmltcG9ydCB7IEJpdEdvQmFzZSwgSVdhbGxldCwgS2V5Y2hhaW4sIFRyaXBsZSwgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFRyYW5zYWN0aW9uSW5mbyB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuXG5pbXBvcnQgeyBkZWNyeXB0IH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgc2lnbkFuZFZlcmlmeVdhbGxldFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vc2lnbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRSZWNvdmVyeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHdhbGxldDogc3RyaW5nO1xuICBmYXVsdHlUeElkOiBzdHJpbmc7XG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xufVxuXG50eXBlIEZlZUluZm8gPSB7XG4gIHNpemU6IG51bWJlcjtcbiAgZmVlUmF0ZTogbnVtYmVyO1xuICBmZWU6IG51bWJlcjtcbiAgcGF5R29GZWU6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgZmVlSW5mbzogRmVlSW5mbztcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdmVyc2lvbjogMSB8IDI7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBzb3VyY2VDb2luOiBzdHJpbmc7XG4gIHJlY292ZXJ5Q29pbjogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M/OiBzdHJpbmc7XG4gIHJlY292ZXJ5QW1vdW50PzogVE51bWJlcjtcbn1cblxudHlwZSBXYWxsZXRWMSA9IHtcbiAga2V5Y2hhaW5zOiB7IHhwdWI6IHN0cmluZyB9W107XG4gIGFkZHJlc3MoeyBhZGRyZXNzIH06IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPHsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9PjtcbiAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCk6IFByb21pc2U8eyBlbmNyeXB0ZWRYcHJ2OiBzdHJpbmcgfT47XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V2FsbGV0KFxuICBiaXRnbzogQml0R29CYXNlLFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB3YWxsZXRJZDogc3RyaW5nXG4pOiBQcm9taXNlPElXYWxsZXQgfCBXYWxsZXRWMT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBjb2luLndhbGxldHMoKS5nZXQoeyBpZDogd2FsbGV0SWQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBCRy00NjM2NCBoYW5kbGUgZXJyb3JzIG1vcmUgZ3JhY2VmdWxseVxuICAgIC8vIFRoZSB2MiBlbmRwb2ludCBjb2luLndhbGxldHMoKS5nZXQoKSBtYXkgdGhyb3cgNDA0IG9yIDQwMCBlcnJvcnMsIGJ1dCB0aGlzIHNob3VsZCBub3QgcHJldmVudCB1cyBmcm9tIHNlYXJjaGluZyBmb3IgdGhlIHdhbGxldElkIGluIHYxIHdhbGxldHMuXG4gICAgaWYgKGUuc3RhdHVzID49IDUwMCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IHdhbGxldElkIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZ2V0IHdhbGxldCAke3dhbGxldElkfSBmcm9tIHYxIG9yIHYyOiAke2UudG9TdHJpbmcoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSByZWNvdmVyeUNvaW5cbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEByZXR1cm4gd2FsbGV0IHB1YmtleXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdhbGxldEtleXMoXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjFcbik6IFByb21pc2U8Um9vdFdhbGxldEtleXM+IHtcbiAgbGV0IHhwdWJzOiBUcmlwbGU8c3RyaW5nPjtcblxuICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgY29uc3Qga2V5Y2hhaW5zID0gKGF3YWl0IHJlY292ZXJ5Q29pbi5rZXljaGFpbnMoKS5nZXRLZXlzRm9yU2lnbmluZyh7IHdhbGxldCB9KSkgYXMgdW5rbm93biBhcyBLZXljaGFpbltdO1xuICAgIGlmIChrZXljaGFpbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIHRyaXBsZSBnb3QgJHtrZXljaGFpbnMubGVuZ3RofWApO1xuICAgIH1cbiAgICB4cHVicyA9IGtleWNoYWlucy5tYXAoKGspID0+IGsucHViKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgfSBlbHNlIHtcbiAgICB4cHVicyA9ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmtleWNoYWlucy5tYXAoKGspID0+IGsueHB1YikgYXMgVHJpcGxlPHN0cmluZz47XG4gIH1cblxuICByZXR1cm4gbmV3IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMoeHB1YnMubWFwKChrKSA9PiBiaXAzMi5mcm9tQmFzZTU4KGspKSBhcyBUcmlwbGU8QklQMzJJbnRlcmZhY2U+KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgbGV0IGFkZHJlc3NEYXRhO1xuICAgIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgd2FsbGV0LmdldEFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRyZXNzRGF0YSAhPT0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSB0eGlkXG4gKiBAcGFyYW0gYW1vdW50VHlwZVxuICogQHBhcmFtIHdhbGxldFxuICogQHBhcmFtIGFwaUtleSAtIGEgYmxvY2tjaGFpciBhcGkga2V5XG4gKiBAcmV0dXJuIGFsbCB1bnNwZW50cyBmb3IgdHJhbnNhY3Rpb24gb3V0cHV0cywgaW5jbHVkaW5nIG91dHB1dHMgZnJvbSBvdGhlciB0cmFuc2FjdGlvbnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QWxsUmVjb3ZlcnlPdXRwdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB0eGlkOiBzdHJpbmcsXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJyxcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsXG4gIGFwaUtleT86IHN0cmluZ1xuKTogUHJvbWlzZTxVbnNwZW50PFROdW1iZXI+W10+IHtcbiAgY29uc3QgYXBpID0gY29pbi5nZXRSZWNvdmVyeVByb3ZpZGVyKGFwaUtleSk7XG4gIGNvbnN0IHR4ID0gYXdhaXQgYXBpLmdldFRyYW5zYWN0aW9uSU8odHhpZCk7XG4gIGNvbnN0IHdhbGxldEFkZHJlc3NlcyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHR4Lm91dHB1dHMubWFwKGFzeW5jIChvdXRwdXQpID0+IHtcbiAgICAgICAgLy8gRm9yIHNvbWUgY29pbnMgKGJjaCkgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBhZGRyZXNzIHRvIGxlZ2FjeSBmb3JtYXQgc2luY2UgdGhlIGFwaSByZXR1cm5zIHRoZSBhZGRyZXNzXG4gICAgICAgIC8vIGluIG5vbiBsZWdhY3kgZm9ybWF0LiBIb3dldmVyLCB3ZSB3YW50IHRvIGtlZXAgdGhlIGFkZHJlc3MgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSByZXNwb25zZSBzaW5jZSB3ZVxuICAgICAgICAvLyBhcmUgZ29pbmcgdG8gaGl0IHRoZSBBUEkgYWdhaW4gdG8gZmV0Y2ggYWRkcmVzcyB1bnNwZW50cy5cbiAgICAgICAgY29uc3QgY2Fub25pY2FsQWRkcmVzcyA9IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcyk7XG4gICAgICAgIGNvbnN0IGlzV2FsbGV0T3duZWQgPSBhd2FpdCBpc1dhbGxldEFkZHJlc3Mod2FsbGV0LCBjYW5vbmljYWxBZGRyZXNzKTtcbiAgICAgICAgcmV0dXJuIGlzV2FsbGV0T3duZWQgPyBvdXRwdXQuYWRkcmVzcyA6IG51bGw7XG4gICAgICB9KVxuICAgIClcbiAgKS5maWx0ZXIoKGFkZHJlc3MpID0+IGFkZHJlc3MgIT09IG51bGwpO1xuXG4gIGNvbnN0IHVuc3BlbnRzID0gYXdhaXQgYXBpLmdldFVuc3BlbnRzRm9yQWRkcmVzc2VzKHdhbGxldEFkZHJlc3NlcyBhcyBzdHJpbmdbXSk7XG4gIGlmICh1bnNwZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlY292ZXJ5IHVuc3BlbnRzIGZvdW5kLmApO1xuICB9XG4gIC8vIHRoZSBhcGkgbWF5IHJldHVybiBjYXNoYWRkcidzIGluc3RlYWQgb2YgbGVnYWN5IGZvciBCQ0ggYW5kIEJDSEFcbiAgLy8gZG93bnN0cmVhbSBwcm9jZXNzZXMncyBvbmx5IGV4cGVjdCBsZWdhY3kgYWRkcmVzc2VzXG4gIHJldHVybiB1bnNwZW50cy5tYXAoKHJlY292ZXJ5T3V0cHV0KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlY292ZXJ5T3V0cHV0LFxuICAgICAgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKHJlY292ZXJ5T3V0cHV0LmFkZHJlc3MpLFxuICAgICAgdmFsdWU6IHV0eG9saWIuYml0Z28udG9UTnVtYmVyPFROdW1iZXI+KEJpZ0ludChyZWNvdmVyeU91dHB1dC52YWx1ZSksIGFtb3VudFR5cGUpLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIERhdGEgcmVxdWlyZWQgZm9yIGFkZHJlc3MgYW5kIHNpZ25hdHVyZSBkZXJpdmF0aW9uXG4gKi9cbnR5cGUgU2NyaXB0SWQgPSB7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRTY3JpcHRJZChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgc2NyaXB0OiBCdWZmZXIpOiBQcm9taXNlPFNjcmlwdElkPiB7XG4gIGNvbnN0IGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChzY3JpcHQsIGNvaW4ubmV0d29yayk7XG4gIGxldCBhZGRyZXNzRGF0YTogeyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH07XG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0IHdhbGxldC5nZXRBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgfSBlbHNlIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICB9XG4gIGlmICh0eXBlb2YgYWRkcmVzc0RhdGEuY2hhaW4gPT09ICdudW1iZXInICYmIHR5cGVvZiBhZGRyZXNzRGF0YS5pbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4geyBjaGFpbjogYWRkcmVzc0RhdGEuY2hhaW4sIGluZGV4OiBhZGRyZXNzRGF0YS5pbmRleCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFkZHJlc3MgZGF0YTogJHtKU09OLnN0cmluZ2lmeShhZGRyZXNzRGF0YSl9YCk7XG59XG5cbi8qKlxuICogTG9va3VwIGFkZHJlc3MgZGF0YSBmcm9tIHVuc3BlbnRzIG9uIHNvdXJjZUNvaW4gaW4gYWRkcmVzcyBkYXRhYmFzZSBvZiByZWNvdmVyeUNvaW4uXG4gKiBSZXR1cm4gZnVsbCB3YWxsZXRVbnNwZW50cyBpbmNsdWRpbmcgc2NyaXB0SWQgaW4gc291cmNlQ29pbiBmb3JtYXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZUNvaW5cbiAqIEBwYXJhbSByZWNvdmVyeUNvaW5cbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiB3YWxsZXRVbnNwZW50c1xuICovXG5hc3luYyBmdW5jdGlvbiB0b1dhbGxldFVuc3BlbnRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBzb3VyY2VDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxXG4pOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXT4ge1xuICBjb25zdCBhZGRyZXNzZXMgPSBuZXcgU2V0KHVuc3BlbnRzLm1hcCgodSkgPT4gdS5hZGRyZXNzKSk7XG4gIHJldHVybiAoXG4gICAgYXdhaXQgQmx1ZWJpcmQubWFwU2VyaWVzKGFkZHJlc3NlcywgYXN5bmMgKGFkZHJlc3MpOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXT4gPT4ge1xuICAgICAgbGV0IHNjcmlwdElkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2NyaXB0SWQgPSBhd2FpdCBnZXRTY3JpcHRJZChyZWNvdmVyeUNvaW4sIHdhbGxldCwgdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGFkZHJlc3MsIHNvdXJjZUNvaW4ubmV0d29yaykpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBlcnJvciBnZXR0aW5nIHNjcmlwdElkIGZvciAke2FkZHJlc3N9OmAsIGUpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5zcGVudHNcbiAgICAgICAgLmZpbHRlcigodSkgPT4gdS5hZGRyZXNzID09PSBhZGRyZXNzKVxuICAgICAgICAubWFwKCh1KSA9PiAoe1xuICAgICAgICAgIC4uLnUsXG4gICAgICAgICAgLi4uc2NyaXB0SWQsXG4gICAgICAgIH0pKTtcbiAgICB9KVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gY29pblxuICogQHJldHVybiBmZWVSYXRlIGZvciB0cmFuc2FjdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRGZWVSYXRlU2F0VkIoY29pbjogQWJzdHJhY3RVdHhvQ29pbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIC8vIFRPRE86IHVzZSBmZWVSYXRlIEFQSVxuICBjb25zdCBmZWVSYXRlID0ge1xuICAgIGJjaDogMjAsXG4gICAgdGJjaDogMjAsXG4gICAgYmNoYTogMjAsXG4gICAgdGJjaGE6IDIwLFxuICAgIGJzdjogMjAsXG4gICAgdGJzdjogMjAsXG4gICAgYnRjOiA4MCxcbiAgICB0YnRjOiA4MCxcbiAgICB0YnRjc2lnOiA4MCxcbiAgICB0YnRjNDogODAsXG4gICAgdGJ0Y2Jnc2lnOiA4MCxcbiAgICBsdGM6IDEwMCxcbiAgICB0bHRjOiAxMDAsXG4gICAgZG9nZTogMTAwMCxcbiAgICB0ZG9nZTogMTAwMCxcbiAgfVtjb2luLmdldENoYWluKCldO1xuXG4gIGlmICghZmVlUmF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gZmVlUmF0ZSBmb3IgJHtjb2luLmdldENoYWluKCl9YCk7XG4gIH1cblxuICByZXR1cm4gZmVlUmF0ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geHBydlxuICogQHBhcmFtIHBhc3NwaHJhc2VcbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEByZXR1cm4gc2lnbmluZyBrZXlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UHJ2KHhwcnY/OiBzdHJpbmcsIHBhc3NwaHJhc2U/OiBzdHJpbmcsIHdhbGxldD86IElXYWxsZXQgfCBXYWxsZXRWMSk6IFByb21pc2U8QklQMzJJbnRlcmZhY2U+IHtcbiAgaWYgKHhwcnYpIHtcbiAgICBjb25zdCBrZXkgPSBiaXAzMi5mcm9tQmFzZTU4KHhwcnYpO1xuICAgIGlmIChrZXkuaXNOZXV0ZXJlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBpZiAoIXdhbGxldCB8fCAhcGFzc3BocmFzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8geHBydiBnaXZlbjogbmVlZCB3YWxsZXQgYW5kIHBhc3NwaHJhc2UgdG8gY29udGludWVgKTtcbiAgfVxuXG4gIGxldCBlbmNyeXB0ZWRQcnY6IHN0cmluZztcbiAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgIGVuY3J5cHRlZFBydiA9IChhd2FpdCB3YWxsZXQuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCkpLmVuY3J5cHRlZFBydjtcbiAgfSBlbHNlIHtcbiAgICBlbmNyeXB0ZWRQcnYgPSAoYXdhaXQgKHdhbGxldCBhcyBXYWxsZXRWMSkuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCkpLmVuY3J5cHRlZFhwcnY7XG4gIH1cblxuICByZXR1cm4gZ2V0UHJ2KGRlY3J5cHQocGFzc3BocmFzZSwgZW5jcnlwdGVkUHJ2KSk7XG59XG5cbi8qKlxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHRhcmdldEFkZHJlc3NcbiAqIEBwYXJhbSBmZWVSYXRlU2F0VkJcbiAqIEBwYXJhbSBzaWduZXIgLSBpZiBzZXQsIHNpZ24gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBhbW91bnRUeXBlXG4gKiBAcmV0dXJuIHRyYW5zYWN0aW9uIHNwZW5kaW5nIGZ1bGwgaW5wdXQgYW1vdW50IHRvIHRhcmdldEFkZHJlc3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3dlZXBUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxUTnVtYmVyPltdLFxuICB0YXJnZXRBZGRyZXNzOiBzdHJpbmcsXG4gIGZlZVJhdGVTYXRWQjogbnVtYmVyLFxuICBzaWduZXI/OiB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXI8Um9vdFdhbGxldEtleXM+LFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgY29uc3QgaW5wdXRWYWx1ZSA9IHVuc3BlbnRTdW08VE51bWJlcj4odW5zcGVudHMsIGFtb3VudFR5cGUpO1xuICBjb25zdCB2c2l6ZSA9IERpbWVuc2lvbnMuZnJvbVVuc3BlbnRzKHVuc3BlbnRzLCB7XG4gICAgcDJ0cjogeyBzY3JpcHRQYXRoTGV2ZWw6IDEgfSxcbiAgICBwMnRyTXVzaWcyOiB7IHNjcmlwdFBhdGhMZXZlbDogdW5kZWZpbmVkIH0sXG4gIH0pXG4gICAgLnBsdXMoRGltZW5zaW9ucy5mcm9tT3V0cHV0KHsgc2NyaXB0OiB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQodGFyZ2V0QWRkcmVzcywgbmV0d29yaykgfSkpXG4gICAgLmdldFZTaXplKCk7XG4gIGNvbnN0IGZlZSA9IHZzaXplICogZmVlUmF0ZVNhdFZCO1xuXG4gIGNvbnN0IHRyYW5zYWN0aW9uQnVpbGRlciA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRm9yTmV0d29yazxUTnVtYmVyPihuZXR3b3JrKTtcbiAgdHJhbnNhY3Rpb25CdWlsZGVyLmFkZE91dHB1dChcbiAgICB0YXJnZXRBZGRyZXNzLFxuICAgIHV0eG9saWIuYml0Z28udG9UTnVtYmVyPFROdW1iZXI+KEJpZ0ludChpbnB1dFZhbHVlKSAtIEJpZ0ludChmZWUpLCBhbW91bnRUeXBlKVxuICApO1xuICB1bnNwZW50cy5mb3JFYWNoKCh1bnNwZW50KSA9PiB7XG4gICAgdXR4b2xpYi5iaXRnby5hZGRUb1RyYW5zYWN0aW9uQnVpbGRlcih0cmFuc2FjdGlvbkJ1aWxkZXIsIHVuc3BlbnQpO1xuICB9KTtcbiAgbGV0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25CdWlsZGVyLmJ1aWxkSW5jb21wbGV0ZSgpO1xuICBpZiAoc2lnbmVyKSB7XG4gICAgdHJhbnNhY3Rpb24gPSBzaWduQW5kVmVyaWZ5V2FsbGV0VHJhbnNhY3Rpb248VE51bWJlcj4odHJhbnNhY3Rpb25CdWlsZGVyLCB1bnNwZW50cywgc2lnbmVyLCB7XG4gICAgICBpc0xhc3RTaWduYXR1cmU6IGZhbHNlLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0cmFuc2FjdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0VHhJbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICB0cmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPiB7XG4gIGNvbnN0IGlucHV0QW1vdW50ID0gdXR4b2xpYi5iaXRnby51bnNwZW50U3VtPFROdW1iZXI+KHVuc3BlbnRzLCBhbW91bnRUeXBlKTtcbiAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdXR4b2xpYi5iaXRnby50b1ROdW1iZXI8VE51bWJlcj4oXG4gICAgdHJhbnNhY3Rpb24ub3V0cy5yZWR1Y2UoKHN1bSwgbykgPT4gc3VtICsgQmlnSW50KG8udmFsdWUpLCBCaWdJbnQoMCkpLFxuICAgIGFtb3VudFR5cGVcbiAgKTtcbiAgY29uc3Qgb3V0cHV0cyA9IHRyYW5zYWN0aW9uLm91dHMubWFwKChvKSA9PiAoe1xuICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG8uc2NyaXB0LCB0cmFuc2FjdGlvbi5uZXR3b3JrKSxcbiAgICB2YWx1ZVN0cmluZzogby52YWx1ZS50b1N0cmluZygpLFxuICAgIGNoYW5nZTogZmFsc2UsXG4gIH0pKTtcbiAgY29uc3QgaW5wdXRzID0gdW5zcGVudHMubWFwKCh1KSA9PiB7XG4gICAgLy8gTk9URTpcbiAgICAvLyBUaGUgYHJlZGVlbVNjcmlwdGAgYW5kIGB3YWxsZXRTY3JpcHRgIHByb3BlcnRpZXMgYXJlIHJlcXVpcmVkIGZvciBsZWdhY3kgdmVyc2lvbnMgb2YgQml0R29KU1xuICAgIC8vIHdoaWNoIG1pZ2h0IHJlcXVpcmUgdGhlc2Ugc2NyaXB0cyBmb3Igc2lnbmluZy4gVGhlIFdhbGxldCBSZWNvdmVyeSBXaXphcmQgKFdSVykgY2FuIGNyZWF0ZVxuICAgIC8vIHVuc2lnbmVkIHByZWJ1aWxkcyB0aGF0IGFyZSBzdWJtaXR0ZWQgdG8gQml0R29KUyBpbnN0YW5jZXMgd2hpY2ggYXJlIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZVxuICAgIC8vIHZlcnNpb24uXG4gICAgY29uc3QgYWRkcmVzc0tleXMgPSB3YWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgodS5jaGFpbiwgdS5pbmRleCk7XG4gICAgY29uc3Qgc2NyaXB0VHlwZSA9IHNjcmlwdFR5cGVGb3JDaGFpbih1LmNoYWluKTtcbiAgICBjb25zdCB7IHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCB9ID0gb3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKGFkZHJlc3NLZXlzLnB1YmxpY0tleXMsIHNjcmlwdFR5cGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnUsXG4gICAgICB3YWxsZXQ6IHdhbGxldElkLFxuICAgICAgZnJvbVdhbGxldDogd2FsbGV0SWQsXG4gICAgICByZWRlZW1TY3JpcHQ6IHJlZGVlbVNjcmlwdD8udG9TdHJpbmcoJ2hleCcpLFxuICAgICAgd2l0bmVzc1NjcmlwdDogd2l0bmVzc1NjcmlwdD8udG9TdHJpbmcoJ2hleCcpLFxuICAgIH0gYXMgV2FsbGV0VW5zcGVudExlZ2FjeTxUTnVtYmVyPjtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaW5wdXRBbW91bnQsXG4gICAgb3V0cHV0QW1vdW50LFxuICAgIG1pbmVyRmVlOiBpbnB1dEFtb3VudCAtIG91dHB1dEFtb3VudCxcbiAgICBzcGVuZEFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgIGlucHV0cyxcbiAgICB1bnNwZW50czogaW5wdXRzLFxuICAgIG91dHB1dHMsXG4gICAgZXh0ZXJuYWxPdXRwdXRzOiBvdXRwdXRzLFxuICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgIHBheUdvRmVlOiAwLFxuICB9IC8qIGNhc3QgdG8gVHJhbnNhY3Rpb25JbmZvIHRvIGFsbG93IGV4dHJhIGZpZWxkcyBtYXkgYmUgcmVxdWlyZWQgYnkgbGVnYWN5IGNvbnN1bWVycyBvZiB0aGlzIGRhdGEgKi8gYXMgVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xufVxuXG5mdW5jdGlvbiBnZXRGZWVJbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICB0cmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+W10sXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogRmVlSW5mbyB7XG4gIGNvbnN0IHZzaXplID0gRGltZW5zaW9ucy5mcm9tVW5zcGVudHModW5zcGVudHMsIHtcbiAgICBwMnRyOiB7IHNjcmlwdFBhdGhMZXZlbDogMSB9LFxuICAgIHAydHJNdXNpZzI6IHsgc2NyaXB0UGF0aExldmVsOiB1bmRlZmluZWQgfSxcbiAgfSlcbiAgICAucGx1cyhEaW1lbnNpb25zLmZyb21PdXRwdXRzKHRyYW5zYWN0aW9uLm91dHMpKVxuICAgIC5nZXRWU2l6ZSgpO1xuICBjb25zdCBpbnB1dEFtb3VudCA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bTxUTnVtYmVyPih1bnNwZW50cywgYW1vdW50VHlwZSk7XG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IHRyYW5zYWN0aW9uLm91dHMucmVkdWNlKChzdW0sIG8pID0+IHN1bSArIEJpZ0ludChvLnZhbHVlKSwgQmlnSW50KDApKTtcbiAgY29uc3QgZmVlID0gTnVtYmVyKEJpZ0ludChpbnB1dEFtb3VudCkgLSBvdXRwdXRBbW91bnQpO1xuICByZXR1cm4ge1xuICAgIHNpemU6IHZzaXplLFxuICAgIGZlZSxcbiAgICBmZWVSYXRlOiBmZWUgLyB2c2l6ZSxcbiAgICBwYXlHb0ZlZTogMCxcbiAgfTtcbn1cblxudHlwZSBSZWNvdmVyUGFyYW1zID0ge1xuICAvKiogV2FsbGV0IElEIChjYW4gYmUgdjEgd2FsbGV0IG9yIHYyIHdhbGxldCkgKi9cbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgLyoqIENvaW4gdG8gY3JlYXRlIHRoZSB0cmFuc2FjdGlvbiBmb3IgKi9cbiAgc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgLyoqIENvaW4gdGhhdCB3YWxsZXQga2V5cyB3ZXJlIHNldCB1cCBmb3IgKi9cbiAgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luO1xuICAvKiogU291cmNlIGNvaW4gdHJhbnNhY3Rpb24gdG8gcmVjb3ZlciBvdXRwdXRzIGZyb20gKHNvdXJjZUNvaW4pICovXG4gIHR4aWQ6IHN0cmluZztcbiAgLyoqIFNvdXJjZSBjb2luIGFkZHJlc3MgdG8gc2VuZCB0aGUgZnVuZHMgdG8gKi9cbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBJZiBzZXQsIGRlY3J5cHRzIHByaXZhdGUga2V5IGFuZCBzaWducyB0cmFuc2FjdGlvbiAqL1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICAvKiogSWYgc2V0LCBzaWducyB0cmFuc2FjdGlvbiAqL1xuICB4cHJ2Pzogc3RyaW5nO1xuICAvKiogZm9yIHV0eG8gY29pbnMgb3RoZXIgdGhhbiBbQlRDLFRCVENdIHRoaXMgaXMgYSBCbG9jayBDaGFpciBhcGkga2V5ICoqL1xuICBhcGlLZXk/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJlY292ZXIgd2FsbGV0IGRlcG9zaXRzIHRoYXQgd2VyZSByZWNlaXZlZCBvbiB0aGUgd3JvbmcgYmxvY2tjaGFpblxuICogKGZvciBpbnN0YW5jZSBiaXRjb2luIGRlcG9zaXRzIHRoYXQgd2VyZSByZWNlaXZlZCBmb3IgYSBsaXRlY29pbiB3YWxsZXQpLlxuICpcbiAqIEZldGNoZXMgdGhlIHVuc3BlbnQgZGF0YSBmcm9tIEJpdEdvJ3MgcHVibGljIGJsb2NrY2hhaW4gQVBJIGFuZCB0aGUgc2NyaXB0IGRhdGEgZnJvbSB0aGUgdXNlcidzXG4gKiB3YWxsZXQuXG4gKlxuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvXG4gKiBAcGFyYW0ge1JlY292ZXJQYXJhbXN9IHBhcmFtc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3ZlckNyb3NzQ2hhaW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj4gfCBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPj4ge1xuICBjb25zdCB3YWxsZXQgPSBhd2FpdCBnZXRXYWxsZXQoYml0Z28sIHBhcmFtcy5yZWNvdmVyeUNvaW4sIHBhcmFtcy53YWxsZXRJZCk7XG4gIGNvbnN0IHVuc3BlbnRzID0gYXdhaXQgZ2V0QWxsUmVjb3ZlcnlPdXRwdXRzPFROdW1iZXI+KFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLFxuICAgIHBhcmFtcy50eGlkLFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGUsXG4gICAgd2FsbGV0LFxuICAgIHBhcmFtcy5hcGlLZXlcbiAgKTtcbiAgY29uc3Qgd2FsbGV0VW5zcGVudHMgPSBhd2FpdCB0b1dhbGxldFVuc3BlbnRzPFROdW1iZXI+KHBhcmFtcy5zb3VyY2VDb2luLCBwYXJhbXMucmVjb3ZlcnlDb2luLCB1bnNwZW50cywgd2FsbGV0KTtcbiAgY29uc3Qgd2FsbGV0S2V5cyA9IGF3YWl0IGdldFdhbGxldEtleXMocGFyYW1zLnJlY292ZXJ5Q29pbiwgd2FsbGV0KTtcbiAgY29uc3QgcHJ2ID1cbiAgICBwYXJhbXMueHBydiB8fCBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSA/IGF3YWl0IGdldFBydihwYXJhbXMueHBydiwgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsIHdhbGxldCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHNpZ25lciA9IHBydlxuICAgID8gbmV3IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcjxSb290V2FsbGV0S2V5cz4od2FsbGV0S2V5cywgcHJ2LCB3YWxsZXRLZXlzLmJpdGdvKVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBmZWVSYXRlU2F0VkIgPSBhd2FpdCBnZXRGZWVSYXRlU2F0VkIocGFyYW1zLnNvdXJjZUNvaW4pO1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IGNyZWF0ZVN3ZWVwVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgcGFyYW1zLnNvdXJjZUNvaW4ubmV0d29yayxcbiAgICB3YWxsZXRVbnNwZW50cyxcbiAgICBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzLFxuICAgIGZlZVJhdGVTYXRWQixcbiAgICBzaWduZXIsXG4gICAgcGFyYW1zLnNvdXJjZUNvaW4uYW1vdW50VHlwZVxuICApO1xuICBjb25zdCByZWNvdmVyeUFtb3VudCA9IHRyYW5zYWN0aW9uLm91dHNbMF0udmFsdWU7XG4gIGNvbnN0IHR4SGV4ID0gdHJhbnNhY3Rpb24udG9CdWZmZXIoKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHR4SW5mbyA9IGdldFR4SW5mbzxUTnVtYmVyPihcbiAgICB0cmFuc2FjdGlvbixcbiAgICB3YWxsZXRVbnNwZW50cyxcbiAgICBwYXJhbXMud2FsbGV0SWQsXG4gICAgd2FsbGV0S2V5cyxcbiAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlXG4gICk7XG4gIGlmIChwcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbjogd2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0ID8gMiA6IDEsXG4gICAgICB3YWxsZXRJZDogcGFyYW1zLndhbGxldElkLFxuICAgICAgdHhIZXgsXG4gICAgICB0eEluZm8sXG4gICAgICBzb3VyY2VDb2luOiBwYXJhbXMuc291cmNlQ29pbi5nZXRDaGFpbigpLFxuICAgICAgcmVjb3ZlcnlDb2luOiBwYXJhbXMucmVjb3ZlcnlDb2luLmdldENoYWluKCksXG4gICAgICByZWNvdmVyeUFtb3VudCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICB0eEhleCxcbiAgICAgIHR4SW5mbyxcbiAgICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgICBmZWVJbmZvOiBnZXRGZWVJbmZvKHRyYW5zYWN0aW9uLCB3YWxsZXRVbnNwZW50cywgcGFyYW1zLnNvdXJjZUNvaW4uYW1vdW50VHlwZSksXG4gICAgICBhZGRyZXNzOiBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgY29pbjogcGFyYW1zLnNvdXJjZUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -33,4 +33,4 @@ class MempoolApi extends baseApi_1.BaseApi {
33
33
  }
34
34
  }
35
35
  exports.MempoolApi = MempoolApi;
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtcG9vbEFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWNvdmVyeS9tZW1wb29sQXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsNEJBQTRCO0FBRTVCLHVDQUE0RDtBQUU1RCxNQUFhLFVBQVcsU0FBUSxpQkFBTztJQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQWdCO1FBQzdCLFFBQVEsUUFBUSxFQUFFO1lBQ2hCLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxNQUFNO2dCQUNULGtEQUFrRDtnQkFDbEQsT0FBTyxJQUFJLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsTUFBTSxJQUFJLGdDQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCO1FBQzFCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBTSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbkQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ3hCO2lCQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDcEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3JCO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBMUJELGdDQTBCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgQXBpTm90SW1wbGVtZW50ZWRFcnJvciwgQmFzZUFwaSB9IGZyb20gJy4vYmFzZUFwaSc7XG5cbmV4cG9ydCBjbGFzcyBNZW1wb29sQXBpIGV4dGVuZHMgQmFzZUFwaSB7XG4gIHN0YXRpYyBmb3JDb2luKGNvaW5OYW1lOiBzdHJpbmcpOiBNZW1wb29sQXBpIHtcbiAgICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgICBjYXNlICdidGMnOlxuICAgICAgY2FzZSAndGJ0Yyc6XG4gICAgICAgIC8vIEZJWE1FOiB0YnRjIGlzIGVuYWJsZWQgaGVyZSBmb3IgbGVnYWN5IHJlYXNvbnM7XG4gICAgICAgIHJldHVybiBuZXcgTWVtcG9vbEFwaSgnaHR0cHM6Ly9tZW1wb29sLnNwYWNlL2FwaS92MScpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXBpTm90SW1wbGVtZW50ZWRFcnJvcihjb2luTmFtZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICBzdXBlcihiYXNlVXJsKTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldDxhbnk+KCcvZmVlcy9yZWNvbW1lbmRlZCcpO1xuICAgIHJldHVybiByZXMubWFwKChib2R5KSA9PiB7XG4gICAgICBpZiAoYm9keS5mYXN0ZXN0RmVlICYmIF8uaXNJbnRlZ2VyKGJvZHkuZmFzdGVzdEZlZSkpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkuZmFzdGVzdEZlZTtcbiAgICAgIH0gZWxzZSBpZiAoYm9keS5ob3VyRmVlICYmIF8uaXNJbnRlZ2VyKGJvZHkuaG91ckZlZSkpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkuaG91ckZlZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCByZXNwb25zZScpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtcG9vbEFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWNvdmVyeS9tZW1wb29sQXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsNEJBQTRCO0FBRTVCLHVDQUE0RDtBQUU1RCxNQUFhLFVBQVcsU0FBUSxpQkFBTztJQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQWdCO1FBQzdCLFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE1BQU07Z0JBQ1Qsa0RBQWtEO2dCQUNsRCxPQUFPLElBQUksVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE1BQU0sSUFBSSxnQ0FBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQjtRQUMxQixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQU0sbUJBQW1CLENBQUMsQ0FBQztRQUNyRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0QixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBMUJELGdDQTBCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgQXBpTm90SW1wbGVtZW50ZWRFcnJvciwgQmFzZUFwaSB9IGZyb20gJy4vYmFzZUFwaSc7XG5cbmV4cG9ydCBjbGFzcyBNZW1wb29sQXBpIGV4dGVuZHMgQmFzZUFwaSB7XG4gIHN0YXRpYyBmb3JDb2luKGNvaW5OYW1lOiBzdHJpbmcpOiBNZW1wb29sQXBpIHtcbiAgICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgICBjYXNlICdidGMnOlxuICAgICAgY2FzZSAndGJ0Yyc6XG4gICAgICAgIC8vIEZJWE1FOiB0YnRjIGlzIGVuYWJsZWQgaGVyZSBmb3IgbGVnYWN5IHJlYXNvbnM7XG4gICAgICAgIHJldHVybiBuZXcgTWVtcG9vbEFwaSgnaHR0cHM6Ly9tZW1wb29sLnNwYWNlL2FwaS92MScpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXBpTm90SW1wbGVtZW50ZWRFcnJvcihjb2luTmFtZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICBzdXBlcihiYXNlVXJsKTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldDxhbnk+KCcvZmVlcy9yZWNvbW1lbmRlZCcpO1xuICAgIHJldHVybiByZXMubWFwKChib2R5KSA9PiB7XG4gICAgICBpZiAoYm9keS5mYXN0ZXN0RmVlICYmIF8uaXNJbnRlZ2VyKGJvZHkuZmFzdGVzdEZlZSkpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkuZmFzdGVzdEZlZTtcbiAgICAgIH0gZWxzZSBpZiAoYm9keS5ob3VyRmVlICYmIF8uaXNJbnRlZ2VyKGJvZHkuaG91ckZlZSkpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkuaG91ckZlZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCByZXNwb25zZScpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isReplayProtectionUnspent = exports.getReplayProtectionAddresses = void 0;
3
+ exports.getReplayProtectionAddresses = getReplayProtectionAddresses;
4
+ exports.isReplayProtectionUnspent = isReplayProtectionUnspent;
4
5
  const utxolib = require("@bitgo/utxo-lib");
5
6
  function getReplayProtectionAddresses(network) {
6
7
  switch (network) {
@@ -13,9 +14,7 @@ function getReplayProtectionAddresses(network) {
13
14
  }
14
15
  return [];
15
16
  }
16
- exports.getReplayProtectionAddresses = getReplayProtectionAddresses;
17
17
  function isReplayProtectionUnspent(u, network) {
18
18
  return getReplayProtectionAddresses(network).includes(u.address);
19
19
  }
20
- exports.isReplayProtectionUnspent = isReplayProtectionUnspent;
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5UHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBsYXlQcm90ZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUEyQztBQUUzQyxTQUFnQiw0QkFBNEIsQ0FBQyxPQUF3QjtJQUNuRSxRQUFRLE9BQU8sRUFBRTtRQUNmLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDbEMsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7WUFDN0IsT0FBTyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDaEQsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7WUFDcEMsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7S0FDbEQ7SUFFRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFYRCxvRUFXQztBQUVELFNBQWdCLHlCQUF5QixDQUN2QyxDQUFpQyxFQUNqQyxPQUF3QjtJQUV4QixPQUFPLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUxELDhEQUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyhuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAobmV0d29yaykge1xuICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luY2FzaDpcbiAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuYml0Y29pbnN2OlxuICAgICAgcmV0dXJuIFsnMzNwMXE3bVRHeWVNNVVuWkVSR2lNY1ZVa1kxMlNDc2F0QSddO1xuICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luY2FzaFRlc3RuZXQ6XG4gICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5zdlRlc3RuZXQ6XG4gICAgICByZXR1cm4gWycyTXVNblBvU0RnV0VwTldIMjhYMm5MdFlNWFFKQ3lUNjFlWSddO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXBsYXlQcm90ZWN0aW9uVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdTogdXR4b2xpYi5iaXRnby5VbnNwZW50PFROdW1iZXI+LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyhuZXR3b3JrKS5pbmNsdWRlcyh1LmFkZHJlc3MpO1xufVxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5UHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBsYXlQcm90ZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsb0VBV0M7QUFFRCw4REFLQztBQXBCRCwyQ0FBMkM7QUFFM0MsU0FBZ0IsNEJBQTRCLENBQUMsT0FBd0I7SUFDbkUsUUFBUSxPQUFPLEVBQUUsQ0FBQztRQUNoQixLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ2xDLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO1lBQzdCLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ2hELEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztRQUN6QyxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1lBQ3BDLE9BQU8sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxTQUFnQix5QkFBeUIsQ0FDdkMsQ0FBaUMsRUFDakMsT0FBd0I7SUFFeEIsT0FBTyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChuZXR3b3JrKSB7XG4gICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5jYXNoOlxuICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luc3Y6XG4gICAgICByZXR1cm4gWyczM3AxcTdtVEd5ZU01VW5aRVJHaU1jVlVrWTEyU0NzYXRBJ107XG4gICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5jYXNoVGVzdG5ldDpcbiAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuYml0Y29pbnN2VGVzdG5ldDpcbiAgICAgIHJldHVybiBbJzJNdU1uUG9TRGdXRXBOV0gyOFgybkx0WU1YUUpDeVQ2MWVZJ107XG4gIH1cblxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB1OiB1dHhvbGliLmJpdGdvLlVuc3BlbnQ8VE51bWJlcj4sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKG5ldHdvcmspLmluY2x1ZGVzKHUuYWRkcmVzcyk7XG59XG4iXX0=
package/dist/src/sign.js CHANGED
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.signAndVerifyWalletTransaction = exports.signAndVerifyPsbt = exports.TransactionSigningError = exports.InputSigningError = void 0;
3
+ exports.TransactionSigningError = exports.InputSigningError = void 0;
4
+ exports.signAndVerifyPsbt = signAndVerifyPsbt;
5
+ exports.signAndVerifyWalletTransaction = signAndVerifyWalletTransaction;
4
6
  /**
5
7
  * @prettier
6
8
  */
@@ -93,7 +95,6 @@ function signAndVerifyPsbt(psbt, signerKeychain, { isLastSignature, allowNonSegw
93
95
  }
94
96
  return psbt;
95
97
  }
96
- exports.signAndVerifyPsbt = signAndVerifyPsbt;
97
98
  /**
98
99
  * Sign all inputs of a wallet transaction and verify signatures after signing.
99
100
  * Collects and logs signing errors and verification errors, throws error in the end if any of them
@@ -166,5 +167,4 @@ function signAndVerifyWalletTransaction(transaction, unspents, walletSigner, { i
166
167
  }
167
168
  return signedTransaction;
168
169
  }
169
- exports.signAndVerifyWalletTransaction = signAndVerifyWalletTransaction;
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsMkNBQTJDO0FBQzNDLE1BQU0sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUkxRSxrQ0FBa0M7QUFFbEMseURBQStEO0FBRS9ELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQVV4QyxNQUFhLGlCQUE0RCxTQUFRLEtBQUs7SUFDcEYsTUFBTSxDQUFDLHFCQUFxQixDQUMxQixVQUFrQixFQUNsQixPQUEwQztRQUUxQyxPQUFPLElBQUksaUJBQWlCLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSx1REFBdUQsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxZQUNTLFVBQWtCLEVBQ2xCLE9BQTBDLEVBQzFDLE1BQXNCO1FBRTdCLEtBQUssQ0FBQywwQkFBMEIsVUFBVSxlQUFlLE9BQU8sQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUMsQ0FBQztRQUozRSxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLFlBQU8sR0FBUCxPQUFPLENBQW1DO1FBQzFDLFdBQU0sR0FBTixNQUFNLENBQWdCO0lBRy9CLENBQUM7Q0FDRjtBQWZELDhDQWVDO0FBRUQsTUFBYSx1QkFBa0UsU0FBUSxLQUFLO0lBQzFGLFlBQVksVUFBd0MsRUFBRSxXQUF5QztRQUM3RixLQUFLLENBQ0gsMkJBQTJCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFDbEQsNkJBQTZCLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUM3RSxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBUEQsMERBT0M7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLElBQTRCLEVBQzVC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LElBQUksdUJBQXVCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzdEO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBMUVELHdFQTBFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmNvbnN0IHsgaXNXYWxsZXRVbnNwZW50LCBzaWduSW5wdXRXaXRoVW5zcGVudCwgdG9PdXRwdXQgfSA9IHV0eG9saWIuYml0Z287XG50eXBlIFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLlVuc3BlbnQ8VE51bWJlcj47XG50eXBlIFJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cztcblxuaW1wb3J0ICogYXMgZGVidWdMaWIgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50IH0gZnJvbSAnLi9yZXBsYXlQcm90ZWN0aW9uJztcblxuY29uc3QgZGVidWcgPSBkZWJ1Z0xpYignYml0Z286djI6dXR4bycpO1xuXG50eXBlIFBzYnRQYXJzZWRTY3JpcHRUeXBlcyA9XG4gIHwgJ3Ayc2gnXG4gIHwgJ3Ayd3NoJ1xuICB8ICdwMnNoUDJ3c2gnXG4gIHwgJ3Ayc2hQMnBrJ1xuICB8ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuICB8ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJztcblxuZXhwb3J0IGNsYXNzIElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0aWMgZXhwZWN0ZWRXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIGlucHV0SW5kZXg6IG51bWJlcixcbiAgICB1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+IHwgeyBpZDogc3RyaW5nIH1cbiAgKTogSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj4ge1xuICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3IoaW5wdXRJbmRleCwgdW5zcGVudCwgYG5vdCBhIHdhbGxldCB1bnNwZW50LCBub3QgYSByZXBsYXkgcHJvdGVjdGlvbiB1bnNwZW50YCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5wdXRJbmRleDogbnVtYmVyLFxuICAgIHB1YmxpYyB1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+IHwgeyBpZDogc3RyaW5nIH0sXG4gICAgcHVibGljIHJlYXNvbjogRXJyb3IgfCBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIoYHNpZ25pbmcgZXJyb3IgYXQgaW5wdXQgJHtpbnB1dEluZGV4fTogdW5zcGVudElkPSR7dW5zcGVudC5pZH06ICR7cmVhc29ufWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvblNpZ25pbmdFcnJvcjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Ioc2lnbkVycm9yczogSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj5bXSwgdmVyaWZ5RXJyb3I6IElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+W10pIHtcbiAgICBzdXBlcihcbiAgICAgIGBzaWduIGVycm9ycyBhdCBpbnB1dHM6IFske3NpZ25FcnJvcnMuam9pbignLCcpfV0sIGAgK1xuICAgICAgICBgdmVyaWZ5IGVycm9ycyBhdCBpbnB1dHM6IFske3ZlcmlmeUVycm9yLmpvaW4oJywnKX1dLCBzZWUgbG9nIGZvciBkZXRhaWxzYFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBTaWduIGFsbCBpbnB1dHMgb2YgYSBwc2J0IGFuZCB2ZXJpZnkgc2lnbmF0dXJlcyBhZnRlciBzaWduaW5nLlxuICogQ29sbGVjdHMgYW5kIGxvZ3Mgc2lnbmluZyBlcnJvcnMgYW5kIHZlcmlmaWNhdGlvbiBlcnJvcnMsIHRocm93cyBlcnJvciBpbiB0aGUgZW5kIGlmIGFueSBvZiB0aGVtXG4gKiBmYWlsZWQuXG4gKlxuICogSWYgaXQgaXMgdGhlIGxhc3Qgc2lnbmF0dXJlLCBmaW5hbGl6ZSBhbmQgZXh0cmFjdCB0aGUgdHJhbnNhY3Rpb24gZnJvbSB0aGUgcHNidC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG1pcnJvcnMgc2lnbkFuZFZlcmlmeVdhbGxldFRyYW5zYWN0aW9uLCBidXQgaXMgdXNlZCBmb3Igc2lnbmluZyBQU0JUcyBpbnN0ZWFkIG9mXG4gKiB1c2luZyBUcmFuc2FjdGlvbkJ1aWxkZXJcbiAqXG4gKiBAcGFyYW0gcHNidFxuICogQHBhcmFtIHNpZ25lcktleWNoYWluXG4gKiBAcGFyYW0gaXNMYXN0U2lnbmF0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduQW5kVmVyaWZ5UHNidChcbiAgcHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCxcbiAgc2lnbmVyS2V5Y2hhaW46IHV0eG9saWIuQklQMzJJbnRlcmZhY2UsXG4gIHtcbiAgICBpc0xhc3RTaWduYXR1cmUsXG4gICAgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeCxcbiAgfTogeyBpc0xhc3RTaWduYXR1cmU6IGJvb2xlYW47IGFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHg/OiBib29sZWFuIH1cbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+IHtcbiAgY29uc3QgdHhJbnB1dHMgPSBwc2J0LnR4SW5wdXRzO1xuICBjb25zdCBvdXRwdXRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNjcmlwdFR5cGVzOiBQc2J0UGFyc2VkU2NyaXB0VHlwZXNbXSA9IFtdO1xuXG4gIGNvbnN0IHNpZ25FcnJvcnM6IElucHV0U2lnbmluZ0Vycm9yPGJpZ2ludD5bXSA9IHBzYnQuZGF0YS5pbnB1dHNcbiAgICAubWFwKChpbnB1dCwgaW5wdXRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRJZCA9IHV0eG9saWIuYml0Z28uZm9ybWF0T3V0cHV0SWQodXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KHR4SW5wdXRzW2lucHV0SW5kZXhdKSk7XG4gICAgICBvdXRwdXRJZHMucHVzaChvdXRwdXRJZCk7XG5cbiAgICAgIGNvbnN0IHsgc2NyaXB0VHlwZSB9ID0gdXR4b2xpYi5iaXRnby5wYXJzZVBzYnRJbnB1dChpbnB1dCk7XG4gICAgICBzY3JpcHRUeXBlcy5wdXNoKHNjcmlwdFR5cGUpO1xuXG4gICAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICBkZWJ1ZygnU2tpcHBpbmcgc2lnbmF0dXJlIGZvciBpbnB1dCAlZCBvZiAlZCAoUlAgaW5wdXQ/KScsIGlucHV0SW5kZXggKyAxLCBwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdXR4b2xpYi5iaXRnby53aXRoVW5zYWZlTm9uU2Vnd2l0KFxuICAgICAgICAgIHBzYnQsXG4gICAgICAgICAgKCkgPT4gcHNidC5zaWduSW5wdXRIRChpbnB1dEluZGV4LCBzaWduZXJLZXljaGFpbiksXG4gICAgICAgICAgISFhbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4XG4gICAgICAgICk7XG4gICAgICAgIGRlYnVnKCdTdWNjZXNzZnVsbHkgc2lnbmVkIGlucHV0ICVkIG9mICVkJywgaW5wdXRJbmRleCArIDEsIHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+KGlucHV0SW5kZXgsIHsgaWQ6IG91dHB1dElkIH0sIGUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcigoZSk6IGUgaXMgSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHZlcmlmeUVycm9yczogSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PltdID0gcHNidC5kYXRhLmlucHV0c1xuICAgIC5tYXAoKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZXNbaW5wdXRJbmRleF07XG4gICAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAnU2tpcHBpbmcgaW5wdXQgc2lnbmF0dXJlICVkIG9mICVkICh1bnNwZW50IGZyb20gcmVwbGF5IHByb3RlY3Rpb24gYWRkcmVzcyB3aGljaCBpcyBwbGF0Zm9ybSBzaWduZWQgb25seSknLFxuICAgICAgICAgIGlucHV0SW5kZXggKyAxLFxuICAgICAgICAgIHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0SWQgPSBvdXRwdXRJZHNbaW5wdXRJbmRleF07XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXV0eG9saWIuYml0Z28ud2l0aFVuc2FmZU5vblNlZ3dpdChcbiAgICAgICAgICAgIHBzYnQsXG4gICAgICAgICAgICAoKSA9PiBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRIRChpbnB1dEluZGV4LCBzaWduZXJLZXljaGFpbiksXG4gICAgICAgICAgICAhIWFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHhcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3IoaW5wdXRJbmRleCwgeyBpZDogb3V0cHV0SWQgfSwgbmV3IEVycm9yKGBpbnZhbGlkIHNpZ25hdHVyZWApKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZygnSW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+KGlucHV0SW5kZXgsIHsgaWQ6IG91dHB1dElkIH0sIGUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcigoZSk6IGUgaXMgSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChzaWduRXJyb3JzLmxlbmd0aCB8fCB2ZXJpZnlFcnJvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFRyYW5zYWN0aW9uU2lnbmluZ0Vycm9yKHNpZ25FcnJvcnMsIHZlcmlmeUVycm9ycyk7XG4gIH1cblxuICBpZiAoaXNMYXN0U2lnbmF0dXJlKSB7XG4gICAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgIHJldHVybiBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgcmV0dXJuIHBzYnQ7XG59XG5cbi8qKlxuICogU2lnbiBhbGwgaW5wdXRzIG9mIGEgd2FsbGV0IHRyYW5zYWN0aW9uIGFuZCB2ZXJpZnkgc2lnbmF0dXJlcyBhZnRlciBzaWduaW5nLlxuICogQ29sbGVjdHMgYW5kIGxvZ3Mgc2lnbmluZyBlcnJvcnMgYW5kIHZlcmlmaWNhdGlvbiBlcnJvcnMsIHRocm93cyBlcnJvciBpbiB0aGUgZW5kIGlmIGFueSBvZiB0aGVtXG4gKiBmYWlsZWQuXG4gKlxuICogQHBhcmFtIHRyYW5zYWN0aW9uIC0gd2FsbGV0IHRyYW5zYWN0aW9uIChidWlsZGVyKSB0byBiZSBzaWduZWRcbiAqIEBwYXJhbSB1bnNwZW50cyAtIHRyYW5zYWN0aW9uIHVuc3BlbnRzXG4gKiBAcGFyYW0gd2FsbGV0U2lnbmVyIC0gc2lnbmluZyBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gaXNMYXN0U2lnbmF0dXJlIC0gUmV0dXJucyBmdWxsLXNpZ25lZCB0cmFuc2FjdGlvbiB3aGVuIHRydWUuIEJ1aWxkcyBoYWxmLXNpZ25lZCB3aGVuIGZhbHNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFuZFZlcmlmeVdhbGxldFRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldFNpZ25lcjogdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPixcbiAgeyBpc0xhc3RTaWduYXR1cmUgfTogeyBpc0xhc3RTaWduYXR1cmU6IGJvb2xlYW4gfVxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBjb25zdCBuZXR3b3JrID0gdHJhbnNhY3Rpb24ubmV0d29yayBhcyB1dHhvbGliLk5ldHdvcms7XG4gIGNvbnN0IHByZXZPdXRwdXRzID0gdW5zcGVudHMubWFwKCh1KSA9PiB0b091dHB1dCh1LCBuZXR3b3JrKSk7XG5cbiAgbGV0IHR4QnVpbGRlcjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+O1xuICBpZiAodHJhbnNhY3Rpb24gaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbikge1xuICAgIHR4QnVpbGRlciA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRnJvbVRyYW5zYWN0aW9uPFROdW1iZXI+KHRyYW5zYWN0aW9uLCBwcmV2T3V0cHV0cyk7XG4gICAgaWYgKHRyYW5zYWN0aW9uLmlucy5sZW5ndGggIT09IHVuc3BlbnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmFuc2FjdGlvbiBpbnB1dHMgbXVzdCBtYXRjaCB1bnNwZW50c2ApO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcikge1xuICAgIHR4QnVpbGRlciA9IHRyYW5zYWN0aW9uO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVzdCBwYXNzIFV0eG9UcmFuc2FjdGlvbiBvciBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyYCk7XG4gIH1cblxuICBjb25zdCBzaWduRXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPltdID0gdW5zcGVudHNcbiAgICAubWFwKCh1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+LCBpbnB1dEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50PFROdW1iZXI+KHVuc3BlbnQsIG5ldHdvcmspKSB7XG4gICAgICAgIGRlYnVnKCdTa2lwcGluZyBzaWduYXR1cmUgZm9yIGlucHV0ICVkIG9mICVkIChSUCBpbnB1dD8pJywgaW5wdXRJbmRleCArIDEsIHVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaXNXYWxsZXRVbnNwZW50PFROdW1iZXI+KHVuc3BlbnQpKSB7XG4gICAgICAgIHJldHVybiBJbnB1dFNpZ25pbmdFcnJvci5leHBlY3RlZFdhbGxldFVuc3BlbnQ8VE51bWJlcj4oaW5wdXRJbmRleCwgdW5zcGVudCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBzaWduSW5wdXRXaXRoVW5zcGVudDxUTnVtYmVyPih0eEJ1aWxkZXIsIGlucHV0SW5kZXgsIHVuc3BlbnQsIHdhbGxldFNpZ25lcik7XG4gICAgICAgIGRlYnVnKCdTdWNjZXNzZnVsbHkgc2lnbmVkIGlucHV0ICVkIG9mICVkJywgaW5wdXRJbmRleCArIDEsIHVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj4oaW5wdXRJbmRleCwgdW5zcGVudCwgZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChlKTogZSBpcyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gaXNMYXN0U2lnbmF0dXJlID8gdHhCdWlsZGVyLmJ1aWxkKCkgOiB0eEJ1aWxkZXIuYnVpbGRJbmNvbXBsZXRlKCk7XG5cbiAgY29uc3QgdmVyaWZ5RXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPltdID0gc2lnbmVkVHJhbnNhY3Rpb24uaW5zXG4gICAgLm1hcCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHVuc3BlbnQgPSB1bnNwZW50c1tpbnB1dEluZGV4XSBhcyBVbnNwZW50PFROdW1iZXI+O1xuICAgICAgaWYgKGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCwgbmV0d29yaykpIHtcbiAgICAgICAgZGVidWcoXG4gICAgICAgICAgJ1NraXBwaW5nIGlucHV0IHNpZ25hdHVyZSAlZCBvZiAlZCAodW5zcGVudCBmcm9tIHJlcGxheSBwcm90ZWN0aW9uIGFkZHJlc3Mgd2hpY2ggaXMgcGxhdGZvcm0gc2lnbmVkIG9ubHkpJyxcbiAgICAgICAgICBpbnB1dEluZGV4ICsgMSxcbiAgICAgICAgICB1bnNwZW50cy5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1dhbGxldFVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCkpIHtcbiAgICAgICAgcmV0dXJuIElucHV0U2lnbmluZ0Vycm9yLmV4cGVjdGVkV2FsbGV0VW5zcGVudDxUTnVtYmVyPihpbnB1dEluZGV4LCB1bnNwZW50KTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IHdhbGxldFNpZ25lci5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnNpZ25lci5wdWJsaWNLZXk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdXR4b2xpYi5iaXRnby52ZXJpZnlTaWduYXR1cmVXaXRoUHVibGljS2V5PFROdW1iZXI+KHNpZ25lZFRyYW5zYWN0aW9uLCBpbnB1dEluZGV4LCBwcmV2T3V0cHV0cywgcHVibGljS2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IElucHV0U2lnbmluZ0Vycm9yKGlucHV0SW5kZXgsIHVuc3BlbnQsIG5ldyBFcnJvcihgaW52YWxpZCBzaWduYXR1cmVgKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVidWcoJ0ludmFsaWQgc2lnbmF0dXJlJyk7XG4gICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj4oaW5wdXRJbmRleCwgdW5zcGVudCwgZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChlKTogZSBpcyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChzaWduRXJyb3JzLmxlbmd0aCB8fCB2ZXJpZnlFcnJvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFRyYW5zYWN0aW9uU2lnbmluZ0Vycm9yKHNpZ25FcnJvcnMsIHZlcmlmeUVycm9ycyk7XG4gIH1cblxuICByZXR1cm4gc2lnbmVkVHJhbnNhY3Rpb247XG59XG4iXX0=
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThEQSw4Q0E4RUM7QUFZRCx3RUEwRUM7QUFsT0Q7O0dBRUc7QUFDSCwyQ0FBMkM7QUFDM0MsTUFBTSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBSTFFLGtDQUFrQztBQUVsQyx5REFBK0Q7QUFFL0QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBVXhDLE1BQWEsaUJBQTRELFNBQVEsS0FBSztJQUNwRixNQUFNLENBQUMscUJBQXFCLENBQzFCLFVBQWtCLEVBQ2xCLE9BQTBDO1FBRTFDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLHVEQUF1RCxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELFlBQ1MsVUFBa0IsRUFDbEIsT0FBMEMsRUFDMUMsTUFBc0I7UUFFN0IsS0FBSyxDQUFDLDBCQUEwQixVQUFVLGVBQWUsT0FBTyxDQUFDLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBSjNFLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBbUM7UUFDMUMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7SUFHL0IsQ0FBQztDQUNGO0FBZkQsOENBZUM7QUFFRCxNQUFhLHVCQUFrRSxTQUFRLEtBQUs7SUFDMUYsWUFBWSxVQUF3QyxFQUFFLFdBQXlDO1FBQzdGLEtBQUssQ0FDSCwyQkFBMkIsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztZQUNsRCw2QkFBNkIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQzdFLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFQRCwwREFPQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFn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bUJBQW1CLENBQUMsQ0FBQztZQUMzQixPQUFPLElBQUksaUJBQWlCLENBQVUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFtQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRW5FLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuY29uc3QgeyBpc1dhbGxldFVuc3BlbnQsIHNpZ25JbnB1dFdpdGhVbnNwZW50LCB0b091dHB1dCB9ID0gdXR4b2xpYi5iaXRnbztcbnR5cGUgVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IHV0eG9saWIuYml0Z28uVW5zcGVudDxUTnVtYmVyPjtcbnR5cGUgUm9vdFdhbGxldEtleXMgPSB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuXG5pbXBvcnQgKiBhcyBkZWJ1Z0xpYiBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCB7IGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQgfSBmcm9tICcuL3JlcGxheVByb3RlY3Rpb24nO1xuXG5jb25zdCBkZWJ1ZyA9IGRlYnVnTGliKCdiaXRnbzp2Mjp1dHhvJyk7XG5cbnR5cGUgUHNidFBhcnNlZFNjcmlwdFR5cGVzID1cbiAgfCAncDJzaCdcbiAgfCAncDJ3c2gnXG4gIHwgJ3Ayc2hQMndzaCdcbiAgfCAncDJzaFAycGsnXG4gIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4gIHwgJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnO1xuXG5leHBvcnQgY2xhc3MgSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyBleHBlY3RlZFdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgaW5wdXRJbmRleDogbnVtYmVyLFxuICAgIHVuc3BlbnQ6IFVuc3BlbnQ8VE51bWJlcj4gfCB7IGlkOiBzdHJpbmcgfVxuICApOiBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcihpbnB1dEluZGV4LCB1bnNwZW50LCBgbm90IGEgd2FsbGV0IHVuc3BlbnQsIG5vdCBhIHJlcGxheSBwcm90ZWN0aW9uIHVuc3BlbnRgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbnB1dEluZGV4OiBudW1iZXIsXG4gICAgcHVibGljIHVuc3BlbnQ6IFVuc3BlbnQ8VE51bWJlcj4gfCB7IGlkOiBzdHJpbmcgfSxcbiAgICBwdWJsaWMgcmVhc29uOiBFcnJvciB8IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihgc2lnbmluZyBlcnJvciBhdCBpbnB1dCAke2lucHV0SW5kZXh9OiB1bnNwZW50SWQ9JHt1bnNwZW50LmlkfTogJHtyZWFzb259YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uU2lnbmluZ0Vycm9yPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihzaWduRXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPltdLCB2ZXJpZnlFcnJvcjogSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj5bXSkge1xuICAgIHN1cGVyKFxuICAgICAgYHNpZ24gZXJyb3JzIGF0IGlucHV0czogWyR7c2lnbkVycm9ycy5qb2luKCcsJyl9XSwgYCArXG4gICAgICAgIGB2ZXJpZnkgZXJyb3JzIGF0IGlucHV0czogWyR7dmVyaWZ5RXJyb3Iuam9pbignLCcpfV0sIHNlZSBsb2cgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFNpZ24gYWxsIGlucHV0cyBvZiBhIHBzYnQgYW5kIHZlcmlmeSBzaWduYXR1cmVzIGFmdGVyIHNpZ25pbmcuXG4gKiBDb2xsZWN0cyBhbmQgbG9ncyBzaWduaW5nIGVycm9ycyBhbmQgdmVyaWZpY2F0aW9uIGVycm9ycywgdGhyb3dzIGVycm9yIGluIHRoZSBlbmQgaWYgYW55IG9mIHRoZW1cbiAqIGZhaWxlZC5cbiAqXG4gKiBJZiBpdCBpcyB0aGUgbGFzdCBzaWduYXR1cmUsIGZpbmFsaXplIGFuZCBleHRyYWN0IHRoZSB0cmFuc2FjdGlvbiBmcm9tIHRoZSBwc2J0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gbWlycm9ycyBzaWduQW5kVmVyaWZ5V2FsbGV0VHJhbnNhY3Rpb24sIGJ1dCBpcyB1c2VkIGZvciBzaWduaW5nIFBTQlRzIGluc3RlYWQgb2ZcbiAqIHVzaW5nIFRyYW5zYWN0aW9uQnVpbGRlclxuICpcbiAqIEBwYXJhbSBwc2J0XG4gKiBAcGFyYW0gc2lnbmVyS2V5Y2hhaW5cbiAqIEBwYXJhbSBpc0xhc3RTaWduYXR1cmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25BbmRWZXJpZnlQc2J0KFxuICBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBzaWduZXJLZXljaGFpbjogdXR4b2xpYi5CSVAzMkludGVyZmFjZSxcbiAge1xuICAgIGlzTGFzdFNpZ25hdHVyZSxcbiAgICBhbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4LFxuICB9OiB7IGlzTGFzdFNpZ25hdHVyZTogYm9vbGVhbjsgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeD86IGJvb2xlYW4gfVxuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICBjb25zdCB0eElucHV0cyA9IHBzYnQudHhJbnB1dHM7XG4gIGNvbnN0IG91dHB1dElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2NyaXB0VHlwZXM6IFBzYnRQYXJzZWRTY3JpcHRUeXBlc1tdID0gW107XG5cbiAgY29uc3Qgc2lnbkVycm9yczogSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PltdID0gcHNidC5kYXRhLmlucHV0c1xuICAgIC5tYXAoKGlucHV0LCBpbnB1dEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dElkID0gdXR4b2xpYi5iaXRnby5mb3JtYXRPdXRwdXRJZCh1dHhvbGliLmJpdGdvLmdldE91dHB1dElkRm9ySW5wdXQodHhJbnB1dHNbaW5wdXRJbmRleF0pKTtcbiAgICAgIG91dHB1dElkcy5wdXNoKG91dHB1dElkKTtcblxuICAgICAgY29uc3QgeyBzY3JpcHRUeXBlIH0gPSB1dHhvbGliLmJpdGdvLnBhcnNlUHNidElucHV0KGlucHV0KTtcbiAgICAgIHNjcmlwdFR5cGVzLnB1c2goc2NyaXB0VHlwZSk7XG5cbiAgICAgIGlmIChzY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgIGRlYnVnKCdTa2lwcGluZyBzaWduYXR1cmUgZm9yIGlucHV0ICVkIG9mICVkIChSUCBpbnB1dD8pJywgaW5wdXRJbmRleCArIDEsIHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICB1dHhvbGliLmJpdGdvLndpdGhVbnNhZmVOb25TZWd3aXQoXG4gICAgICAgICAgcHNidCxcbiAgICAgICAgICAoKSA9PiBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHNpZ25lcktleWNoYWluKSxcbiAgICAgICAgICAhIWFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHhcbiAgICAgICAgKTtcbiAgICAgICAgZGVidWcoJ1N1Y2Nlc3NmdWxseSBzaWduZWQgaW5wdXQgJWQgb2YgJWQnLCBpbnB1dEluZGV4ICsgMSwgcHNidC5kYXRhLmlucHV0cy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gbmV3IElucHV0U2lnbmluZ0Vycm9yPGJpZ2ludD4oaW5wdXRJbmRleCwgeyBpZDogb3V0cHV0SWQgfSwgZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChlKTogZSBpcyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+ID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgdmVyaWZ5RXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+W10gPSBwc2J0LmRhdGEuaW5wdXRzXG4gICAgLm1hcCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlc1tpbnB1dEluZGV4XTtcbiAgICAgIGlmIChzY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgIGRlYnVnKFxuICAgICAgICAgICdTa2lwcGluZyBpbnB1dCBzaWduYXR1cmUgJWQgb2YgJWQgKHVuc3BlbnQgZnJvbSByZXBsYXkgcHJvdGVjdGlvbiBhZGRyZXNzIHdoaWNoIGlzIHBsYXRmb3JtIHNpZ25lZCBvbmx5KScsXG4gICAgICAgICAgaW5wdXRJbmRleCArIDEsXG4gICAgICAgICAgcHNidC5kYXRhLmlucHV0cy5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvdXRwdXRJZCA9IG91dHB1dElkc1tpbnB1dEluZGV4XTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdXR4b2xpYi5iaXRnby53aXRoVW5zYWZlTm9uU2Vnd2l0KFxuICAgICAgICAgICAgcHNidCxcbiAgICAgICAgICAgICgpID0+IHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dEhEKGlucHV0SW5kZXgsIHNpZ25lcktleWNoYWluKSxcbiAgICAgICAgICAgICEhYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcihpbnB1dEluZGV4LCB7IGlkOiBvdXRwdXRJZCB9LCBuZXcgRXJyb3IoYGludmFsaWQgc2lnbmF0dXJlYCkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlYnVnKCdJbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgICAgICByZXR1cm4gbmV3IElucHV0U2lnbmluZ0Vycm9yPGJpZ2ludD4oaW5wdXRJbmRleCwgeyBpZDogb3V0cHV0SWQgfSwgZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChlKTogZSBpcyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+ID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHNpZ25FcnJvcnMubGVuZ3RoIHx8IHZlcmlmeUVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25TaWduaW5nRXJyb3Ioc2lnbkVycm9ycywgdmVyaWZ5RXJyb3JzKTtcbiAgfVxuXG4gIGlmIChpc0xhc3RTaWduYXR1cmUpIHtcbiAgICBwc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gICAgcmV0dXJuIHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICByZXR1cm4gcHNidDtcbn1cblxuLyoqXG4gKiBTaWduIGFsbCBpbnB1dHMgb2YgYSB3YWxsZXQgdHJhbnNhY3Rpb24gYW5kIHZlcmlmeSBzaWduYXR1cmVzIGFmdGVyIHNpZ25pbmcuXG4gKiBDb2xsZWN0cyBhbmQgbG9ncyBzaWduaW5nIGVycm9ycyBhbmQgdmVyaWZpY2F0aW9uIGVycm9ycywgdGhyb3dzIGVycm9yIGluIHRoZSBlbmQgaWYgYW55IG9mIHRoZW1cbiAqIGZhaWxlZC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb24gLSB3YWxsZXQgdHJhbnNhY3Rpb24gKGJ1aWxkZXIpIHRvIGJlIHNpZ25lZFxuICogQHBhcmFtIHVuc3BlbnRzIC0gdHJhbnNhY3Rpb24gdW5zcGVudHNcbiAqIEBwYXJhbSB3YWxsZXRTaWduZXIgLSBzaWduaW5nIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBpc0xhc3RTaWduYXR1cmUgLSBSZXR1cm5zIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uIHdoZW4gdHJ1ZS4gQnVpbGRzIGhhbGYtc2lnbmVkIHdoZW4gZmFsc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduQW5kVmVyaWZ5V2FsbGV0VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB8IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPixcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgd2FsbGV0U2lnbmVyOiB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXI8Um9vdFdhbGxldEtleXM+LFxuICB7IGlzTGFzdFNpZ25hdHVyZSB9OiB7IGlzTGFzdFNpZ25hdHVyZTogYm9vbGVhbiB9XG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIGNvbnN0IG5ldHdvcmsgPSB0cmFuc2FjdGlvbi5uZXR3b3JrIGFzIHV0eG9saWIuTmV0d29yaztcbiAgY29uc3QgcHJldk91dHB1dHMgPSB1bnNwZW50cy5tYXAoKHUpID0+IHRvT3V0cHV0KHUsIG5ldHdvcmspKTtcblxuICBsZXQgdHhCdWlsZGVyOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj47XG4gIGlmICh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKSB7XG4gICAgdHhCdWlsZGVyID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGcm9tVHJhbnNhY3Rpb248VE51bWJlcj4odHJhbnNhY3Rpb24sIHByZXZPdXRwdXRzKTtcbiAgICBpZiAodHJhbnNhY3Rpb24uaW5zLmxlbmd0aCAhPT0gdW5zcGVudHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRyYW5zYWN0aW9uIGlucHV0cyBtdXN0IG1hdGNoIHVuc3BlbnRzYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25CdWlsZGVyKSB7XG4gICAgdHhCdWlsZGVyID0gdHJhbnNhY3Rpb247XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHBhc3MgVXR4b1RyYW5zYWN0aW9uIG9yIFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXJgKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25FcnJvcnM6IElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+W10gPSB1bnNwZW50c1xuICAgIC5tYXAoKHVuc3BlbnQ6IFVuc3BlbnQ8VE51bWJlcj4sIGlucHV0SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCwgbmV0d29yaykpIHtcbiAgICAgICAgZGVidWcoJ1NraXBwaW5nIHNpZ25hdHVyZSBmb3IgaW5wdXQgJWQgb2YgJWQgKFJQIGlucHV0PyknLCBpbnB1dEluZGV4ICsgMSwgdW5zcGVudHMubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1dhbGxldFVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCkpIHtcbiAgICAgICAgcmV0dXJuIElucHV0U2lnbmluZ0Vycm9yLmV4cGVjdGVkV2FsbGV0VW5zcGVudDxUTnVtYmVyPihpbnB1dEluZGV4LCB1bnNwZW50KTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHNpZ25JbnB1dFdpdGhVbnNwZW50PFROdW1iZXI+KHR4QnVpbGRlciwgaW5wdXRJbmRleCwgdW5zcGVudCwgd2FsbGV0U2lnbmVyKTtcbiAgICAgICAgZGVidWcoJ1N1Y2Nlc3NmdWxseSBzaWduZWQgaW5wdXQgJWQgb2YgJWQnLCBpbnB1dEluZGV4ICsgMSwgdW5zcGVudHMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPihpbnB1dEluZGV4LCB1bnNwZW50LCBlKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5maWx0ZXIoKGUpOiBlIGlzIElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+ID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSBpc0xhc3RTaWduYXR1cmUgPyB0eEJ1aWxkZXIuYnVpbGQoKSA6IHR4QnVpbGRlci5idWlsZEluY29tcGxldGUoKTtcblxuICBjb25zdCB2ZXJpZnlFcnJvcnM6IElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+W10gPSBzaWduZWRUcmFuc2FjdGlvbi5pbnNcbiAgICAubWFwKChpbnB1dCwgaW5wdXRJbmRleCkgPT4ge1xuICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2lucHV0SW5kZXhdIGFzIFVuc3BlbnQ8VE51bWJlcj47XG4gICAgICBpZiAoaXNSZXBsYXlQcm90ZWN0aW9uVW5zcGVudDxUTnVtYmVyPih1bnNwZW50LCBuZXR3b3JrKSkge1xuICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAnU2tpcHBpbmcgaW5wdXQgc2lnbmF0dXJlICVkIG9mICVkICh1bnNwZW50IGZyb20gcmVwbGF5IHByb3RlY3Rpb24gYWRkcmVzcyB3aGljaCBpcyBwbGF0Zm9ybSBzaWduZWQgb25seSknLFxuICAgICAgICAgIGlucHV0SW5kZXggKyAxLFxuICAgICAgICAgIHVuc3BlbnRzLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWlzV2FsbGV0VW5zcGVudDxUTnVtYmVyPih1bnNwZW50KSkge1xuICAgICAgICByZXR1cm4gSW5wdXRTaWduaW5nRXJyb3IuZXhwZWN0ZWRXYWxsZXRVbnNwZW50PFROdW1iZXI+KGlucHV0SW5kZXgsIHVuc3BlbnQpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gd2FsbGV0U2lnbmVyLmRlcml2ZUZvckNoYWluQW5kSW5kZXgodW5zcGVudC5jaGFpbiwgdW5zcGVudC5pbmRleCkuc2lnbmVyLnB1YmxpY0tleTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF1dHhvbGliLmJpdGdvLnZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXk8VE51bWJlcj4oc2lnbmVkVHJhbnNhY3Rpb24sIGlucHV0SW5kZXgsIHByZXZPdXRwdXRzLCBwdWJsaWNLZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3IoaW5wdXRJbmRleCwgdW5zcGVudCwgbmV3IEVycm9yKGBpbnZhbGlkIHNpZ25hdHVyZWApKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZygnSW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPihpbnB1dEluZGV4LCB1bnNwZW50LCBlKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5maWx0ZXIoKGUpOiBlIGlzIElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+ID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHNpZ25FcnJvcnMubGVuZ3RoIHx8IHZlcmlmeUVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25TaWduaW5nRXJyb3Ioc2lnbkVycm9ycywgdmVyaWZ5RXJyb3JzKTtcbiAgfVxuXG4gIHJldHVybiBzaWduZWRUcmFuc2FjdGlvbjtcbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ import { bitgo } from '@bitgo/utxo-lib';
2
+ import * as utxolib from '@bitgo/utxo-lib';
3
+ import { ExplainTransactionOptions, TransactionExplanation } from '../abstractUtxoCoin';
4
+ /**
5
+ * Decompose a raw psbt into useful information, such as the total amounts,
6
+ * change amounts, and transaction outputs.
7
+ */
8
+ export declare function explainPsbt<TNumber extends number | bigint, Tx extends bitgo.UtxoTransaction<bigint>>(psbt: bitgo.UtxoPsbt<Tx>, params: ExplainTransactionOptions<TNumber>, network: utxolib.Network): TransactionExplanation;
9
+ /**
10
+ * Decompose a raw transaction into useful information, such as the total amounts,
11
+ * change amounts, and transaction outputs.
12
+ */
13
+ export declare function explainTx<TNumber extends number | bigint>(tx: bitgo.UtxoTransaction<TNumber>, params: ExplainTransactionOptions<TNumber>, network: utxolib.Network): TransactionExplanation;
14
+ //# sourceMappingURL=explainTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/explainTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAEL,yBAAyB,EAEzB,sBAAsB,EAEvB,MAAM,qBAAqB,CAAC;AA2H7B;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EACnG,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EACxB,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAC1C,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,sBAAsB,CAuExB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACvD,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAClC,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAC1C,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,sBAAsB,CAQxB"}