@bitgo-beta/sdk-coin-apt 1.0.1-beta.90 → 1.0.1-beta.901

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 (145) hide show
  1. package/dist/src/apt.d.ts +9 -2
  2. package/dist/src/apt.d.ts.map +1 -1
  3. package/dist/src/apt.js +37 -11
  4. package/dist/src/aptNFTCollection.d.ts +18 -0
  5. package/dist/src/aptNFTCollection.d.ts.map +1 -0
  6. package/dist/src/aptNFTCollection.js +52 -0
  7. package/dist/src/aptToken.d.ts +19 -0
  8. package/dist/src/aptToken.d.ts.map +1 -0
  9. package/dist/src/aptToken.js +52 -0
  10. package/dist/src/index.d.ts +2 -0
  11. package/dist/src/index.d.ts.map +1 -1
  12. package/dist/src/index.js +3 -1
  13. package/dist/src/lib/constants.d.ts +16 -0
  14. package/dist/src/lib/constants.d.ts.map +1 -1
  15. package/dist/src/lib/constants.js +18 -2
  16. package/dist/src/lib/iface.d.ts +99 -2
  17. package/dist/src/lib/iface.d.ts.map +1 -1
  18. package/dist/src/lib/iface.js +1 -1
  19. package/dist/src/lib/index.d.ts +18 -4
  20. package/dist/src/lib/index.d.ts.map +1 -1
  21. package/dist/src/lib/index.js +35 -7
  22. package/dist/src/lib/transaction/abstractDelegationPoolAmountBasedTransaction.d.ts +21 -0
  23. package/dist/src/lib/transaction/abstractDelegationPoolAmountBasedTransaction.d.ts.map +1 -0
  24. package/dist/src/lib/transaction/abstractDelegationPoolAmountBasedTransaction.js +61 -0
  25. package/dist/src/lib/transaction/abstractDelegationPoolTransaction.d.ts +13 -0
  26. package/dist/src/lib/transaction/abstractDelegationPoolTransaction.d.ts.map +1 -0
  27. package/dist/src/lib/transaction/abstractDelegationPoolTransaction.js +23 -0
  28. package/dist/src/lib/transaction/abstractTransferTransaction.d.ts +10 -0
  29. package/dist/src/lib/transaction/abstractTransferTransaction.d.ts.map +1 -0
  30. package/dist/src/lib/transaction/abstractTransferTransaction.js +39 -0
  31. package/dist/src/lib/transaction/customTransaction.d.ts +89 -0
  32. package/dist/src/lib/transaction/customTransaction.d.ts.map +1 -0
  33. package/dist/src/lib/transaction/customTransaction.js +278 -0
  34. package/dist/src/lib/transaction/delegationPoolAddStakeTransaction.d.ts +10 -0
  35. package/dist/src/lib/transaction/delegationPoolAddStakeTransaction.d.ts.map +1 -0
  36. package/dist/src/lib/transaction/delegationPoolAddStakeTransaction.js +48 -0
  37. package/dist/src/lib/transaction/delegationPoolUnlockTransaction.d.ts +10 -0
  38. package/dist/src/lib/transaction/delegationPoolUnlockTransaction.d.ts.map +1 -0
  39. package/dist/src/lib/transaction/delegationPoolUnlockTransaction.js +24 -0
  40. package/dist/src/lib/transaction/delegationPoolWithdrawTransaction.d.ts +10 -0
  41. package/dist/src/lib/transaction/delegationPoolWithdrawTransaction.d.ts.map +1 -0
  42. package/dist/src/lib/transaction/delegationPoolWithdrawTransaction.js +43 -0
  43. package/dist/src/lib/transaction/digitalAssetTransfer.d.ts +10 -0
  44. package/dist/src/lib/transaction/digitalAssetTransfer.d.ts.map +1 -0
  45. package/dist/src/lib/transaction/digitalAssetTransfer.js +45 -0
  46. package/dist/src/lib/transaction/fungibleAssetTransfer.d.ts +12 -0
  47. package/dist/src/lib/transaction/fungibleAssetTransfer.d.ts.map +1 -0
  48. package/dist/src/lib/transaction/fungibleAssetTransfer.js +73 -0
  49. package/dist/src/lib/transaction/transaction.d.ts +45 -7
  50. package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
  51. package/dist/src/lib/transaction/transaction.js +175 -61
  52. package/dist/src/lib/transaction/transferTransaction.d.ts +10 -8
  53. package/dist/src/lib/transaction/transferTransaction.d.ts.map +1 -1
  54. package/dist/src/lib/transaction/transferTransaction.js +48 -40
  55. package/dist/src/lib/transactionBuilder/customTransactionBuilder.d.ts +64 -0
  56. package/dist/src/lib/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
  57. package/dist/src/lib/transactionBuilder/customTransactionBuilder.js +127 -0
  58. package/dist/src/lib/transactionBuilder/delegationPoolAddStakeTransactionBuilder.d.ts +15 -0
  59. package/dist/src/lib/transactionBuilder/delegationPoolAddStakeTransactionBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/transactionBuilder/delegationPoolAddStakeTransactionBuilder.js +50 -0
  61. package/dist/src/lib/transactionBuilder/delegationPoolUnlockTransactionBuilder.d.ts +15 -0
  62. package/dist/src/lib/transactionBuilder/delegationPoolUnlockTransactionBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/transactionBuilder/delegationPoolUnlockTransactionBuilder.js +50 -0
  64. package/dist/src/lib/transactionBuilder/delegationPoolWithdrawTransactionBuilder.d.ts +15 -0
  65. package/dist/src/lib/transactionBuilder/delegationPoolWithdrawTransactionBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/transactionBuilder/delegationPoolWithdrawTransactionBuilder.js +50 -0
  67. package/dist/src/lib/transactionBuilder/digitalAssetTransferBuilder.d.ts +14 -0
  68. package/dist/src/lib/transactionBuilder/digitalAssetTransferBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/transactionBuilder/digitalAssetTransferBuilder.js +55 -0
  70. package/dist/src/lib/transactionBuilder/fungibleAssetTransferBuilder.d.ts +15 -0
  71. package/dist/src/lib/transactionBuilder/fungibleAssetTransferBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/transactionBuilder/fungibleAssetTransferBuilder.js +61 -0
  73. package/dist/src/lib/{transactionBuilder.d.ts → transactionBuilder/transactionBuilder.d.ts} +25 -11
  74. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/transactionBuilder/transactionBuilder.js +169 -0
  76. package/dist/src/lib/{transferBuilder.d.ts → transactionBuilder/transferBuilder.d.ts} +5 -7
  77. package/dist/src/lib/transactionBuilder/transferBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/transactionBuilder/transferBuilder.js +56 -0
  79. package/dist/src/lib/transactionBuilderFactory.d.ts +26 -10
  80. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  81. package/dist/src/lib/transactionBuilderFactory.js +82 -18
  82. package/dist/src/lib/utils/validation.d.ts +32 -0
  83. package/dist/src/lib/utils/validation.d.ts.map +1 -0
  84. package/dist/src/lib/utils/validation.js +99 -0
  85. package/dist/src/lib/utils.d.ts +29 -5
  86. package/dist/src/lib/utils.d.ts.map +1 -1
  87. package/dist/src/lib/utils.js +111 -28
  88. package/dist/src/register.d.ts.map +1 -1
  89. package/dist/src/register.js +9 -1
  90. package/dist/test/integration/index.d.ts +1 -0
  91. package/dist/test/integration/index.d.ts.map +1 -0
  92. package/dist/test/integration/index.js +1 -0
  93. package/dist/test/resources/apt.d.ts +56 -0
  94. package/dist/test/resources/apt.d.ts.map +1 -0
  95. package/dist/test/resources/apt.js +115 -0
  96. package/dist/test/unit/apt.d.ts +2 -0
  97. package/dist/test/unit/apt.d.ts.map +1 -0
  98. package/dist/test/unit/apt.js +375 -0
  99. package/dist/test/unit/aptToken.d.ts +2 -0
  100. package/dist/test/unit/aptToken.d.ts.map +1 -0
  101. package/dist/test/unit/aptToken.js +92 -0
  102. package/dist/test/unit/customTransaction.test.d.ts +2 -0
  103. package/dist/test/unit/customTransaction.test.d.ts.map +1 -0
  104. package/dist/test/unit/customTransaction.test.js +264 -0
  105. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  106. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  107. package/dist/test/unit/getBuilderFactory.js +10 -0
  108. package/dist/test/unit/keyPair.d.ts +2 -0
  109. package/dist/test/unit/keyPair.d.ts.map +1 -0
  110. package/dist/test/unit/keyPair.js +71 -0
  111. package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts +2 -0
  112. package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
  113. package/dist/test/unit/transactionBuilder/customTransactionBuilder.js +743 -0
  114. package/dist/test/unit/transactionBuilder/delegationPoolAddStakeTransactionBuilder.d.ts +2 -0
  115. package/dist/test/unit/transactionBuilder/delegationPoolAddStakeTransactionBuilder.d.ts.map +1 -0
  116. package/dist/test/unit/transactionBuilder/delegationPoolAddStakeTransactionBuilder.js +172 -0
  117. package/dist/test/unit/transactionBuilder/delegationPoolUnlockTransactionBuilder.d.ts +2 -0
  118. package/dist/test/unit/transactionBuilder/delegationPoolUnlockTransactionBuilder.d.ts.map +1 -0
  119. package/dist/test/unit/transactionBuilder/delegationPoolUnlockTransactionBuilder.js +148 -0
  120. package/dist/test/unit/transactionBuilder/delegationPoolWithdrawTransactionBuilder.d.ts +2 -0
  121. package/dist/test/unit/transactionBuilder/delegationPoolWithdrawTransactionBuilder.d.ts.map +1 -0
  122. package/dist/test/unit/transactionBuilder/delegationPoolWithdrawTransactionBuilder.js +172 -0
  123. package/dist/test/unit/transactionBuilder/digitalAssetTransferBuilder.d.ts +2 -0
  124. package/dist/test/unit/transactionBuilder/digitalAssetTransferBuilder.d.ts.map +1 -0
  125. package/dist/test/unit/transactionBuilder/digitalAssetTransferBuilder.js +276 -0
  126. package/dist/test/unit/transactionBuilder/fungibleAssetTransferBuilder.d.ts +2 -0
  127. package/dist/test/unit/transactionBuilder/fungibleAssetTransferBuilder.d.ts.map +1 -0
  128. package/dist/test/unit/transactionBuilder/fungibleAssetTransferBuilder.js +449 -0
  129. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  130. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  131. package/dist/test/unit/transactionBuilder/transferBuilder.js +529 -0
  132. package/dist/test/unit/utils.d.ts +2 -0
  133. package/dist/test/unit/utils.d.ts.map +1 -0
  134. package/dist/test/unit/utils.js +108 -0
  135. package/dist/tsconfig.tsbuildinfo +1 -0
  136. package/package.json +14 -11
  137. package/.eslintignore +0 -4
  138. package/.gitignore +0 -3
  139. package/.mocharc.yml +0 -8
  140. package/.prettierignore +0 -2
  141. package/CHANGELOG.md +0 -72
  142. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  143. package/dist/src/lib/transactionBuilder.js +0 -118
  144. package/dist/src/lib/transferBuilder.d.ts.map +0 -1
  145. package/dist/src/lib/transferBuilder.js +0 -25
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FungibleAssetTransfer = void 0;
7
+ const ts_sdk_1 = require("@aptos-labs/ts-sdk");
8
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
9
+ const constants_1 = require("../constants");
10
+ const utils_1 = __importDefault(require("../utils"));
11
+ const abstractTransferTransaction_1 = require("./abstractTransferTransaction");
12
+ class FungibleAssetTransfer extends abstractTransferTransaction_1.AbstractTransferTransaction {
13
+ constructor(coinConfig) {
14
+ super(coinConfig);
15
+ this.faTransferAbi = {
16
+ typeParameters: [{ constraints: [] }],
17
+ parameters: [(0, ts_sdk_1.parseTypeTag)(constants_1.FUNBIGLE_ASSET_TYPE_TAG), new ts_sdk_1.TypeTagAddress(), new ts_sdk_1.TypeTagU64()],
18
+ };
19
+ this.batchFaTransferAbi = {
20
+ typeParameters: [],
21
+ parameters: [
22
+ (0, ts_sdk_1.parseTypeTag)(constants_1.BATCH_FUNGIBLE_ASSET_TYPE_TAG),
23
+ new ts_sdk_1.TypeTagVector(new ts_sdk_1.TypeTagAddress()),
24
+ new ts_sdk_1.TypeTagVector(new ts_sdk_1.TypeTagU64()),
25
+ ],
26
+ };
27
+ this._type = sdk_core_1.TransactionType.SendToken;
28
+ }
29
+ parseTransactionPayload(payload) {
30
+ if (!this.isValidPayload(payload)) {
31
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction payload');
32
+ }
33
+ const entryFunction = payload.entryFunction;
34
+ this._assetId = entryFunction.args[0].toString();
35
+ const addressArg = entryFunction.args[1];
36
+ const amountArg = entryFunction.args[2];
37
+ this.recipients = utils_1.default.parseRecipients(addressArg, amountArg);
38
+ }
39
+ getTransactionPayloadData() {
40
+ const fungibleTokenAddress = this._assetId;
41
+ if (this.recipients.length > 1) {
42
+ return {
43
+ function: constants_1.FUNGIBLE_ASSET_BATCH_TRANSFER_FUNCTION,
44
+ typeArguments: [],
45
+ functionArguments: [
46
+ fungibleTokenAddress,
47
+ this.recipients.map((recipient) => ts_sdk_1.AccountAddress.fromString(recipient.address)),
48
+ this.recipients.map((recipient) => recipient.amount),
49
+ ],
50
+ abi: this.batchFaTransferAbi,
51
+ };
52
+ }
53
+ return {
54
+ function: constants_1.FUNGIBLE_ASSET_TRANSFER_FUNCTION,
55
+ typeArguments: [constants_1.FUNGIBLE_ASSET_TYPE_ARGUMENT],
56
+ functionArguments: [
57
+ fungibleTokenAddress,
58
+ ts_sdk_1.AccountAddress.fromString(this.recipients[0].address),
59
+ this.recipients[0].amount,
60
+ ],
61
+ abi: this.faTransferAbi,
62
+ };
63
+ }
64
+ isValidPayload(payload) {
65
+ return (payload instanceof ts_sdk_1.TransactionPayloadEntryFunction &&
66
+ payload.entryFunction.args.length === 3 &&
67
+ (payload.entryFunction.type_args.length === 0 ||
68
+ (payload.entryFunction.type_args.length === 1 &&
69
+ constants_1.FUNGIBLE_ASSET_TYPE_ARGUMENT === payload.entryFunction.type_args[0].toString())));
70
+ }
71
+ }
72
+ exports.FungibleAssetTransfer = FungibleAssetTransfer;
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVBc3NldFRyYW5zZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbi9mdW5naWJsZUFzc2V0VHJhbnNmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0NBVTRCO0FBQzVCLG1EQUFnRjtBQUVoRiw0Q0FNc0I7QUFDdEIscURBQTZCO0FBQzdCLCtFQUE0RTtBQUU1RSxNQUFhLHFCQUFzQixTQUFRLHlEQUEyQjtJQUNwRSxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQW1EWixrQkFBYSxHQUFxQjtZQUN4QyxjQUFjLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxVQUFVLEVBQUUsQ0FBQyxJQUFBLHFCQUFZLEVBQUMsbUNBQXVCLENBQUMsRUFBRSxJQUFJLHVCQUFjLEVBQUUsRUFBRSxJQUFJLG1CQUFVLEVBQUUsQ0FBQztTQUM1RixDQUFDO1FBRU0sdUJBQWtCLEdBQXFCO1lBQzdDLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixJQUFBLHFCQUFZLEVBQUMseUNBQTZCLENBQUM7Z0JBQzNDLElBQUksc0JBQWEsQ0FBQyxJQUFJLHVCQUFjLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxzQkFBYSxDQUFDLElBQUksbUJBQVUsRUFBRSxDQUFDO2FBQ3BDO1NBQ0YsQ0FBQztRQTlEQSxJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsU0FBUyxDQUFDO0lBQ3pDLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxPQUEyQjtRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBSSxPQUEyQyxDQUFDLGFBQWEsQ0FBQztRQUNqRixJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVTLHlCQUF5QjtRQUNqQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPO2dCQUNMLFFBQVEsRUFBRSxrREFBc0M7Z0JBQ2hELGFBQWEsRUFBRSxFQUFFO2dCQUNqQixpQkFBaUIsRUFBRTtvQkFDakIsb0JBQW9CO29CQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsdUJBQWMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNoRixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztpQkFDckQ7Z0JBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7YUFDN0IsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLDRDQUFnQztZQUMxQyxhQUFhLEVBQUUsQ0FBQyx3Q0FBNEIsQ0FBQztZQUM3QyxpQkFBaUIsRUFBRTtnQkFDakIsb0JBQW9CO2dCQUNwQix1QkFBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO2FBQzFCO1lBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQTJCO1FBQ2hELE9BQU8sQ0FDTCxPQUFPLFlBQVksd0NBQStCO1lBQ2xELE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3ZDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQzNDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7b0JBQzNDLHdDQUE0QixLQUFLLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FDckYsQ0FBQztJQUNKLENBQUM7Q0FjRjtBQWxFRCxzREFrRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBY2NvdW50QWRkcmVzcyxcbiAgRW50cnlGdW5jdGlvbkFCSSxcbiAgSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEsXG4gIHBhcnNlVHlwZVRhZyxcbiAgVHJhbnNhY3Rpb25QYXlsb2FkLFxuICBUcmFuc2FjdGlvblBheWxvYWRFbnRyeUZ1bmN0aW9uLFxuICBUeXBlVGFnQWRkcmVzcyxcbiAgVHlwZVRhZ1U2NCxcbiAgVHlwZVRhZ1ZlY3Rvcixcbn0gZnJvbSAnQGFwdG9zLWxhYnMvdHMtc2RrJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCQVRDSF9GVU5HSUJMRV9BU1NFVF9UWVBFX1RBRyxcbiAgRlVOQklHTEVfQVNTRVRfVFlQRV9UQUcsXG4gIEZVTkdJQkxFX0FTU0VUX0JBVENIX1RSQU5TRkVSX0ZVTkNUSU9OLFxuICBGVU5HSUJMRV9BU1NFVF9UUkFOU0ZFUl9GVU5DVElPTixcbiAgRlVOR0lCTEVfQVNTRVRfVFlQRV9BUkdVTUVOVCxcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdFRyYW5zZmVyVHJhbnNhY3Rpb24gfSBmcm9tICcuL2Fic3RyYWN0VHJhbnNmZXJUcmFuc2FjdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBGdW5naWJsZUFzc2V0VHJhbnNmZXIgZXh0ZW5kcyBBYnN0cmFjdFRyYW5zZmVyVHJhbnNhY3Rpb24ge1xuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlVHJhbnNhY3Rpb25QYXlsb2FkKHBheWxvYWQ6IFRyYW5zYWN0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkUGF5bG9hZChwYXlsb2FkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uIHBheWxvYWQnKTtcbiAgICB9XG4gICAgY29uc3QgZW50cnlGdW5jdGlvbiA9IChwYXlsb2FkIGFzIFRyYW5zYWN0aW9uUGF5bG9hZEVudHJ5RnVuY3Rpb24pLmVudHJ5RnVuY3Rpb247XG4gICAgdGhpcy5fYXNzZXRJZCA9IGVudHJ5RnVuY3Rpb24uYXJnc1swXS50b1N0cmluZygpO1xuICAgIGNvbnN0IGFkZHJlc3NBcmcgPSBlbnRyeUZ1bmN0aW9uLmFyZ3NbMV07XG4gICAgY29uc3QgYW1vdW50QXJnID0gZW50cnlGdW5jdGlvbi5hcmdzWzJdO1xuICAgIHRoaXMucmVjaXBpZW50cyA9IHV0aWxzLnBhcnNlUmVjaXBpZW50cyhhZGRyZXNzQXJnLCBhbW91bnRBcmcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uUGF5bG9hZERhdGEoKTogSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEge1xuICAgIGNvbnN0IGZ1bmdpYmxlVG9rZW5BZGRyZXNzID0gdGhpcy5fYXNzZXRJZDtcblxuICAgIGlmICh0aGlzLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnVuY3Rpb246IEZVTkdJQkxFX0FTU0VUX0JBVENIX1RSQU5TRkVSX0ZVTkNUSU9OLFxuICAgICAgICB0eXBlQXJndW1lbnRzOiBbXSxcbiAgICAgICAgZnVuY3Rpb25Bcmd1bWVudHM6IFtcbiAgICAgICAgICBmdW5naWJsZVRva2VuQWRkcmVzcyxcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcocmVjaXBpZW50LmFkZHJlc3MpKSxcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IHJlY2lwaWVudC5hbW91bnQpLFxuICAgICAgICBdLFxuICAgICAgICBhYmk6IHRoaXMuYmF0Y2hGYVRyYW5zZmVyQWJpLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZ1bmN0aW9uOiBGVU5HSUJMRV9BU1NFVF9UUkFOU0ZFUl9GVU5DVElPTixcbiAgICAgIHR5cGVBcmd1bWVudHM6IFtGVU5HSUJMRV9BU1NFVF9UWVBFX0FSR1VNRU5UXSxcbiAgICAgIGZ1bmN0aW9uQXJndW1lbnRzOiBbXG4gICAgICAgIGZ1bmdpYmxlVG9rZW5BZGRyZXNzLFxuICAgICAgICBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMucmVjaXBpZW50c1swXS5hZGRyZXNzKSxcbiAgICAgICAgdGhpcy5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgIF0sXG4gICAgICBhYmk6IHRoaXMuZmFUcmFuc2ZlckFiaSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkUGF5bG9hZChwYXlsb2FkOiBUcmFuc2FjdGlvblBheWxvYWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgcGF5bG9hZCBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uUGF5bG9hZEVudHJ5RnVuY3Rpb24gJiZcbiAgICAgIHBheWxvYWQuZW50cnlGdW5jdGlvbi5hcmdzLmxlbmd0aCA9PT0gMyAmJlxuICAgICAgKHBheWxvYWQuZW50cnlGdW5jdGlvbi50eXBlX2FyZ3MubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIChwYXlsb2FkLmVudHJ5RnVuY3Rpb24udHlwZV9hcmdzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgIEZVTkdJQkxFX0FTU0VUX1RZUEVfQVJHVU1FTlQgPT09IHBheWxvYWQuZW50cnlGdW5jdGlvbi50eXBlX2FyZ3NbMF0udG9TdHJpbmcoKSkpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGZhVHJhbnNmZXJBYmk6IEVudHJ5RnVuY3Rpb25BQkkgPSB7XG4gICAgdHlwZVBhcmFtZXRlcnM6IFt7IGNvbnN0cmFpbnRzOiBbXSB9XSxcbiAgICBwYXJhbWV0ZXJzOiBbcGFyc2VUeXBlVGFnKEZVTkJJR0xFX0FTU0VUX1RZUEVfVEFHKSwgbmV3IFR5cGVUYWdBZGRyZXNzKCksIG5ldyBUeXBlVGFnVTY0KCldLFxuICB9O1xuXG4gIHByaXZhdGUgYmF0Y2hGYVRyYW5zZmVyQWJpOiBFbnRyeUZ1bmN0aW9uQUJJID0ge1xuICAgIHR5cGVQYXJhbWV0ZXJzOiBbXSxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICBwYXJzZVR5cGVUYWcoQkFUQ0hfRlVOR0lCTEVfQVNTRVRfVFlQRV9UQUcpLFxuICAgICAgbmV3IFR5cGVUYWdWZWN0b3IobmV3IFR5cGVUYWdBZGRyZXNzKCkpLFxuICAgICAgbmV3IFR5cGVUYWdWZWN0b3IobmV3IFR5cGVUYWdVNjQoKSksXG4gICAgXSxcbiAgfTtcbn1cbiJdfQ==
@@ -1,16 +1,29 @@
1
- import { BaseKey, BaseTransaction, PublicKey, Signature, TransactionRecipient, TransactionType } from '@bitgo-beta/sdk-core';
1
+ import { BaseKey, BaseTransaction, Entry, PublicKey, Signature, TransactionRecipient, TransactionType } from '@bitgo-beta/sdk-core';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
- import { RawTransaction, SignedTransaction } from '@aptos-labs/ts-sdk';
3
+ import { InputGenerateTransactionPayloadData, RawTransaction, SignedTransaction, TransactionPayload } from '@aptos-labs/ts-sdk';
4
+ import { AptTransactionExplanation, TxData } from '../iface';
5
+ export type InputsAndOutputs = {
6
+ /** Used for this.inputs */
7
+ inputs: Entry[];
8
+ /** Used for this.outputs */
9
+ outputs: Entry[];
10
+ /** Used for this.explainTransaction() */
11
+ externalOutputs: TransactionRecipient[];
12
+ };
4
13
  export declare abstract class Transaction extends BaseTransaction {
5
14
  protected _rawTransaction: RawTransaction;
6
- protected _signature: Signature;
15
+ protected _senderSignature: Signature;
16
+ protected _feePayerSignature: Signature;
7
17
  protected _sender: string;
8
- protected _recipient: TransactionRecipient;
18
+ protected _recipients: TransactionRecipient[];
9
19
  protected _sequenceNumber: number;
10
20
  protected _maxGasAmount: number;
11
21
  protected _gasUnitPrice: number;
12
22
  protected _gasUsed: number;
13
23
  protected _expirationTime: number;
24
+ protected _feePayerAddress: string;
25
+ protected _assetId: string;
26
+ protected _isSimulateTxn: boolean;
14
27
  static EMPTY_PUBLIC_KEY: Buffer<ArrayBuffer>;
15
28
  static EMPTY_SIGNATURE: Buffer<ArrayBuffer>;
16
29
  constructor(coinConfig: Readonly<CoinConfig>);
@@ -18,8 +31,16 @@ export declare abstract class Transaction extends BaseTransaction {
18
31
  get id(): string;
19
32
  get sender(): string;
20
33
  set sender(value: string);
34
+ /**
35
+ * @deprecated - use `recipients()`.
36
+ */
21
37
  get recipient(): TransactionRecipient;
38
+ /**
39
+ * @deprecated - use `recipients()`.
40
+ */
22
41
  set recipient(value: TransactionRecipient);
42
+ get recipients(): TransactionRecipient[];
43
+ set recipients(value: TransactionRecipient[]);
23
44
  get sequenceNumber(): number;
24
45
  set sequenceNumber(value: number);
25
46
  get maxGasAmount(): number;
@@ -30,23 +51,40 @@ export declare abstract class Transaction extends BaseTransaction {
30
51
  set gasUsed(value: number);
31
52
  get expirationTime(): number;
32
53
  set expirationTime(value: number);
54
+ get feePayerAddress(): string;
33
55
  set transactionType(transactionType: TransactionType);
56
+ get assetId(): string;
57
+ set assetId(value: string);
58
+ get isSimulateTxn(): boolean;
59
+ set isSimulateTxn(value: boolean);
60
+ protected abstract getTransactionPayloadData(): InputGenerateTransactionPayloadData;
61
+ protected abstract parseTransactionPayload(payload: TransactionPayload): void;
62
+ fromDeserializedSignedTransaction(signedTxn: SignedTransaction): void;
34
63
  canSign(_key: BaseKey): boolean;
35
64
  toBroadcastFormat(): string;
36
65
  serialize(): string;
37
- addSignature(publicKey: PublicKey, signature: Buffer): void;
66
+ addSenderSignature(publicKey: PublicKey, signature: Buffer): void;
67
+ getFeePayerPubKey(): string;
68
+ addFeePayerSignature(publicKey: PublicKey, signature: Buffer): void;
69
+ addFeePayerAddress(address: string): void;
38
70
  build(): Promise<void>;
71
+ abstract inputsAndOutputs(): InputsAndOutputs;
39
72
  loadInputsAndOutputs(): void;
40
73
  fromRawTransaction(rawTransaction: string): void;
41
- fromDeserializedSignedTransaction(signedTxn: SignedTransaction): void;
42
74
  /**
43
75
  * Deserializes a signed transaction hex string
44
76
  * @param {string} signedRawTransaction
45
77
  * @returns {SignedTransaction} the aptos signed transaction
46
78
  */
47
79
  static deserializeSignedTransaction(signedRawTransaction: string): SignedTransaction;
80
+ toJson(): TxData;
81
+ getFee(): string;
82
+ get signablePayload(): Buffer;
83
+ /** @inheritDoc */
84
+ explainTransaction(): AptTransactionExplanation;
48
85
  protected buildRawTransaction(): Promise<void>;
49
- protected getFee(): string;
86
+ private getSignablePayloadWithFeePayer;
87
+ private getSignablePayloadWithoutFeePayer;
50
88
  private generateTxnId;
51
89
  }
52
90
  //# sourceMappingURL=transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAEf,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAYL,cAAc,EACd,iBAAiB,EAGlB,MAAM,oBAAoB,CAAC;AAK5B,8BAAsB,WAAY,SAAQ,eAAe;IACvD,SAAS,CAAC,eAAe,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC;IAChC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC3C,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAElC,MAAM,CAAC,gBAAgB,sBAAoB;IAC3C,MAAM,CAAC,eAAe,sBAAoB;gBAE9B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAe5C,mBAAmB;IACnB,IAAW,EAAE,IAAI,MAAM,CAGtB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAEvB;IAED,IAAI,SAAS,IAAI,oBAAoB,CAEpC;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,oBAAoB,EAExC;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,EAE/B;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAE7B;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAE7B;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAExB;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,EAE/B;IAED,IAAI,eAAe,CAAC,eAAe,EAAE,eAAe,EAEnD;IAED,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAI/B,iBAAiB,IAAI,MAAM;IAO3B,SAAS,IAAI,MAAM;IAWnB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,oBAAoB,IAAI,IAAI;IAiB5B,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAWhD,iCAAiC,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAqBrE;;;;OAIG;IACH,MAAM,CAAC,4BAA4B,CAAC,oBAAoB,EAAE,MAAM,GAAG,iBAAiB;cASpE,mBAAmB;IAuBnC,SAAS,CAAC,MAAM,IAAI,MAAM;IAI1B,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/transaction.ts"],"names":[],"mappings":"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"}
@@ -10,15 +10,27 @@ const ts_sdk_1 = require("@aptos-labs/ts-sdk");
10
10
  const constants_1 = require("../constants");
11
11
  const utils_1 = __importDefault(require("../utils"));
12
12
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
13
+ const assert_1 = __importDefault(require("assert"));
13
14
  class Transaction extends sdk_core_1.BaseTransaction {
14
15
  constructor(coinConfig) {
15
16
  super(coinConfig);
16
17
  this._maxGasAmount = ts_sdk_1.DEFAULT_MAX_GAS_AMOUNT;
17
18
  this._gasUnitPrice = constants_1.DEFAULT_GAS_UNIT_PRICE;
18
19
  this._gasUsed = 0;
19
- this._expirationTime = Math.floor(Date.now() / 1e3) + constants_1.SECONDS_PER_WEEK;
20
+ this._expirationTime = utils_1.default.getTxnExpirationTimestamp();
20
21
  this._sequenceNumber = 0;
21
- this._signature = {
22
+ this._sender = ts_sdk_1.AccountAddress.ZERO.toString();
23
+ this._recipients = [];
24
+ this._assetId = ts_sdk_1.AccountAddress.ZERO.toString();
25
+ this._isSimulateTxn = false;
26
+ this._senderSignature = {
27
+ publicKey: {
28
+ pub: ts_sdk_1.Hex.fromHexInput(Transaction.EMPTY_PUBLIC_KEY).toString(),
29
+ },
30
+ signature: Transaction.EMPTY_SIGNATURE,
31
+ };
32
+ this._feePayerAddress = ts_sdk_1.AccountAddress.ZERO.toString();
33
+ this._feePayerSignature = {
22
34
  publicKey: {
23
35
  pub: ts_sdk_1.Hex.fromHexInput(Transaction.EMPTY_PUBLIC_KEY).toString(),
24
36
  },
@@ -36,11 +48,24 @@ class Transaction extends sdk_core_1.BaseTransaction {
36
48
  set sender(value) {
37
49
  this._sender = value;
38
50
  }
51
+ /**
52
+ * @deprecated - use `recipients()`.
53
+ */
39
54
  get recipient() {
40
- return this._recipient;
55
+ (0, assert_1.default)(this._recipients.length > 0, 'No recipients available');
56
+ return this._recipients[0];
41
57
  }
58
+ /**
59
+ * @deprecated - use `recipients()`.
60
+ */
42
61
  set recipient(value) {
43
- this._recipient = value;
62
+ this.recipients = [value];
63
+ }
64
+ get recipients() {
65
+ return this._recipients;
66
+ }
67
+ set recipients(value) {
68
+ this._recipients = value;
44
69
  }
45
70
  get sequenceNumber() {
46
71
  return this._sequenceNumber;
@@ -72,9 +97,49 @@ class Transaction extends sdk_core_1.BaseTransaction {
72
97
  set expirationTime(value) {
73
98
  this._expirationTime = value;
74
99
  }
100
+ get feePayerAddress() {
101
+ return this._feePayerAddress;
102
+ }
75
103
  set transactionType(transactionType) {
76
104
  this._type = transactionType;
77
105
  }
106
+ get assetId() {
107
+ return this._assetId;
108
+ }
109
+ set assetId(value) {
110
+ this._assetId = value;
111
+ }
112
+ get isSimulateTxn() {
113
+ return this._isSimulateTxn;
114
+ }
115
+ set isSimulateTxn(value) {
116
+ this._isSimulateTxn = value;
117
+ }
118
+ fromDeserializedSignedTransaction(signedTxn) {
119
+ try {
120
+ const rawTxn = signedTxn.raw_txn;
121
+ this.parseTransactionPayload(rawTxn.payload);
122
+ this._sender = rawTxn.sender.toString();
123
+ this._sequenceNumber = utils_1.default.castToNumber(rawTxn.sequence_number);
124
+ this._maxGasAmount = utils_1.default.castToNumber(rawTxn.max_gas_amount);
125
+ this._gasUnitPrice = utils_1.default.castToNumber(rawTxn.gas_unit_price);
126
+ this._expirationTime = utils_1.default.castToNumber(rawTxn.expiration_timestamp_secs);
127
+ this._rawTransaction = rawTxn;
128
+ this.loadInputsAndOutputs();
129
+ const authenticator = signedTxn.authenticator;
130
+ this._feePayerAddress = authenticator.fee_payer.address.toString();
131
+ const senderAuthenticator = authenticator.sender;
132
+ const senderSignature = Buffer.from(senderAuthenticator.signature.toUint8Array());
133
+ this.addSenderSignature({ pub: senderAuthenticator.public_key.toString() }, senderSignature);
134
+ const feePayerAuthenticator = authenticator.fee_payer.authenticator;
135
+ const feePayerSignature = Buffer.from(feePayerAuthenticator.signature.toUint8Array());
136
+ this.addFeePayerSignature({ pub: utils_1.default.stripHexPrefix(feePayerAuthenticator.public_key.toString()) }, feePayerSignature);
137
+ }
138
+ catch (e) {
139
+ console.error('invalid signed transaction', e);
140
+ throw new Error('invalid signed transaction');
141
+ }
142
+ }
78
143
  canSign(_key) {
79
144
  return false;
80
145
  }
@@ -85,16 +150,41 @@ class Transaction extends sdk_core_1.BaseTransaction {
85
150
  return this.serialize();
86
151
  }
87
152
  serialize() {
88
- const publicKeyBuffer = utils_1.default.getBufferFromHexString(this._signature.publicKey.pub);
89
- const publicKey = new ts_sdk_1.Ed25519PublicKey(publicKeyBuffer);
90
- const signature = new ts_sdk_1.Ed25519Signature(this._signature.signature);
91
- const txnAuthenticator = new ts_sdk_1.TransactionAuthenticatorEd25519(publicKey, signature);
153
+ let senderAuthenticator;
154
+ let feePayerAuthenticator;
155
+ if (this.isSimulateTxn) {
156
+ senderAuthenticator = new ts_sdk_1.AccountAuthenticatorNoAccountAuthenticator();
157
+ feePayerAuthenticator = new ts_sdk_1.AccountAuthenticatorNoAccountAuthenticator();
158
+ }
159
+ else {
160
+ const senderPublicKeyBuffer = utils_1.default.getBufferFromHexString(this._senderSignature.publicKey.pub);
161
+ const senderPublicKey = new ts_sdk_1.Ed25519PublicKey(senderPublicKeyBuffer);
162
+ const senderSignature = new ts_sdk_1.Ed25519Signature(this._senderSignature.signature);
163
+ senderAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(senderPublicKey, senderSignature);
164
+ const feePayerPublicKeyBuffer = utils_1.default.getBufferFromHexString(this._feePayerSignature.publicKey.pub);
165
+ const feePayerPublicKey = new ts_sdk_1.Ed25519PublicKey(feePayerPublicKeyBuffer);
166
+ const feePayerSignature = new ts_sdk_1.Ed25519Signature(this._feePayerSignature.signature);
167
+ feePayerAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(feePayerPublicKey, feePayerSignature);
168
+ }
169
+ const txnAuthenticator = new ts_sdk_1.TransactionAuthenticatorFeePayer(senderAuthenticator, [], [], {
170
+ address: ts_sdk_1.AccountAddress.fromString(this._feePayerAddress),
171
+ authenticator: feePayerAuthenticator,
172
+ });
92
173
  const signedTxn = new ts_sdk_1.SignedTransaction(this._rawTransaction, txnAuthenticator);
93
174
  return signedTxn.toString();
94
175
  }
95
- addSignature(publicKey, signature) {
176
+ addSenderSignature(publicKey, signature) {
96
177
  this._signatures = [signature.toString('hex')];
97
- this._signature = { publicKey, signature };
178
+ this._senderSignature = { publicKey, signature };
179
+ }
180
+ getFeePayerPubKey() {
181
+ return this._feePayerSignature.publicKey.pub;
182
+ }
183
+ addFeePayerSignature(publicKey, signature) {
184
+ this._feePayerSignature = { publicKey, signature };
185
+ }
186
+ addFeePayerAddress(address) {
187
+ this._feePayerAddress = address;
98
188
  }
99
189
  async build() {
100
190
  await this.buildRawTransaction();
@@ -102,20 +192,9 @@ class Transaction extends sdk_core_1.BaseTransaction {
102
192
  this.loadInputsAndOutputs();
103
193
  }
104
194
  loadInputsAndOutputs() {
105
- this._inputs = [
106
- {
107
- address: this.sender,
108
- value: this.recipient.amount,
109
- coin: this._coinConfig.name,
110
- },
111
- ];
112
- this._outputs = [
113
- {
114
- address: this.recipient.address,
115
- value: this.recipient.amount,
116
- coin: this._coinConfig.name,
117
- },
118
- ];
195
+ const { inputs, outputs } = this.inputsAndOutputs();
196
+ this._inputs = inputs;
197
+ this._outputs = outputs;
119
198
  }
120
199
  fromRawTransaction(rawTransaction) {
121
200
  let signedTxn;
@@ -123,31 +202,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
123
202
  signedTxn = utils_1.default.deserializeSignedTransaction(rawTransaction);
124
203
  }
125
204
  catch (e) {
126
- console.error('invalid raw transaction', e);
127
205
  throw new Error('invalid raw transaction');
128
206
  }
129
207
  this.fromDeserializedSignedTransaction(signedTxn);
130
208
  }
131
- fromDeserializedSignedTransaction(signedTxn) {
132
- try {
133
- const rawTxn = signedTxn.raw_txn;
134
- this._sender = rawTxn.sender.toString();
135
- this._recipient = utils_1.default.getRecipientFromTransactionPayload(rawTxn.payload);
136
- this._sequenceNumber = utils_1.default.castToNumber(rawTxn.sequence_number);
137
- this._maxGasAmount = utils_1.default.castToNumber(rawTxn.max_gas_amount);
138
- this._gasUnitPrice = utils_1.default.castToNumber(rawTxn.gas_unit_price);
139
- this._expirationTime = utils_1.default.castToNumber(rawTxn.expiration_timestamp_secs);
140
- this._rawTransaction = rawTxn;
141
- this.loadInputsAndOutputs();
142
- const authenticator = signedTxn.authenticator;
143
- const signature = Buffer.from(authenticator.signature.toUint8Array());
144
- this.addSignature({ pub: authenticator.public_key.toString() }, signature);
145
- }
146
- catch (e) {
147
- console.error('invalid signed transaction', e);
148
- throw new Error('invalid signed transaction');
149
- }
150
- }
151
209
  /**
152
210
  * Deserializes a signed transaction hex string
153
211
  * @param {string} signedRawTransaction
@@ -158,22 +216,65 @@ class Transaction extends sdk_core_1.BaseTransaction {
158
216
  return utils_1.default.deserializeSignedTransaction(signedRawTransaction);
159
217
  }
160
218
  catch (e) {
161
- console.error('invalid raw transaction', e);
162
219
  throw new Error('invalid raw transaction');
163
220
  }
164
221
  }
222
+ toJson() {
223
+ return {
224
+ id: this.id,
225
+ sender: this.sender,
226
+ recipients: this.recipients,
227
+ sequenceNumber: this.sequenceNumber,
228
+ maxGasAmount: this.maxGasAmount,
229
+ gasUnitPrice: this.gasUnitPrice,
230
+ gasUsed: this.gasUsed,
231
+ expirationTime: this.expirationTime,
232
+ feePayer: this.feePayerAddress,
233
+ assetId: this.assetId,
234
+ };
235
+ }
236
+ getFee() {
237
+ return new bignumber_js_1.default(this.gasUsed).multipliedBy(this.gasUnitPrice).toString();
238
+ }
239
+ get signablePayload() {
240
+ return this.feePayerAddress ? this.getSignablePayloadWithFeePayer() : this.getSignablePayloadWithoutFeePayer();
241
+ }
242
+ /** @inheritDoc */
243
+ explainTransaction() {
244
+ const displayOrder = [
245
+ 'id',
246
+ 'outputs',
247
+ 'outputAmount',
248
+ 'changeOutputs',
249
+ 'changeAmount',
250
+ 'fee',
251
+ 'withdrawAmount',
252
+ 'sender',
253
+ 'type',
254
+ ];
255
+ const outputs = this.inputsAndOutputs().externalOutputs;
256
+ const outputAmount = outputs
257
+ .reduce((accumulator, current) => accumulator.plus(current.amount), new bignumber_js_1.default('0'))
258
+ .toString();
259
+ return {
260
+ displayOrder,
261
+ id: this.id,
262
+ outputs,
263
+ outputAmount,
264
+ changeOutputs: [],
265
+ changeAmount: '0',
266
+ fee: { fee: this.getFee() },
267
+ sender: this.sender,
268
+ type: this.type,
269
+ };
270
+ }
165
271
  async buildRawTransaction() {
166
272
  const network = this._coinConfig.network.type === statics_1.NetworkType.MAINNET ? ts_sdk_1.Network.MAINNET : ts_sdk_1.Network.TESTNET;
167
273
  const aptos = new ts_sdk_1.Aptos(new ts_sdk_1.AptosConfig({ network }));
168
274
  const senderAddress = ts_sdk_1.AccountAddress.fromString(this._sender);
169
- const recipientAddress = ts_sdk_1.AccountAddress.fromString(this._recipient.address);
170
275
  const simpleTxn = await aptos.transaction.build.simple({
171
276
  sender: senderAddress,
172
- data: {
173
- function: '0x1::coin::transfer',
174
- typeArguments: [ts_sdk_1.APTOS_COIN],
175
- functionArguments: [recipientAddress, this.recipient.amount],
176
- },
277
+ data: this.getTransactionPayloadData(),
177
278
  options: {
178
279
  maxGasAmount: this.maxGasAmount,
179
280
  gasUnitPrice: this.gasUnitPrice,
@@ -183,21 +284,34 @@ class Transaction extends sdk_core_1.BaseTransaction {
183
284
  });
184
285
  this._rawTransaction = simpleTxn.rawTransaction;
185
286
  }
186
- getFee() {
187
- return new bignumber_js_1.default(this.gasUsed).multipliedBy(this.gasUnitPrice).toString();
287
+ getSignablePayloadWithFeePayer() {
288
+ const feePayerRawTxn = new ts_sdk_1.FeePayerRawTransaction(this._rawTransaction, [], ts_sdk_1.AccountAddress.fromString(this._feePayerAddress));
289
+ return Buffer.from((0, ts_sdk_1.generateSigningMessage)(feePayerRawTxn.bcsToBytes(), ts_sdk_1.RAW_TRANSACTION_WITH_DATA_SALT));
290
+ }
291
+ getSignablePayloadWithoutFeePayer() {
292
+ return Buffer.from((0, ts_sdk_1.generateSigningMessage)(this._rawTransaction.bcsToBytes(), ts_sdk_1.RAW_TRANSACTION_SALT));
188
293
  }
189
294
  generateTxnId() {
190
- if (!this._signature || !this._signature.publicKey || !this._signature.signature) {
295
+ if (!this._senderSignature ||
296
+ !this._senderSignature.publicKey ||
297
+ !this._senderSignature.signature ||
298
+ !this._feePayerSignature ||
299
+ !this._feePayerSignature.publicKey ||
300
+ !this._feePayerSignature.signature ||
301
+ !this._feePayerAddress) {
191
302
  return;
192
303
  }
193
- const transaction = new ts_sdk_1.SimpleTransaction(this._rawTransaction);
194
- const publicKey = new ts_sdk_1.Ed25519PublicKey(utils_1.default.getBufferFromHexString(this._signature.publicKey.pub));
195
- const signature = new ts_sdk_1.Ed25519Signature(this._signature.signature);
196
- const senderAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(publicKey, signature);
197
- this._id = (0, ts_sdk_1.generateUserTransactionHash)({ transaction, senderAuthenticator });
304
+ const transaction = new ts_sdk_1.SimpleTransaction(this._rawTransaction, ts_sdk_1.AccountAddress.fromString(this._feePayerAddress));
305
+ const senderPublicKey = new ts_sdk_1.Ed25519PublicKey(utils_1.default.getBufferFromHexString(this._senderSignature.publicKey.pub));
306
+ const senderSignature = new ts_sdk_1.Ed25519Signature(this._senderSignature.signature);
307
+ const senderAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(senderPublicKey, senderSignature);
308
+ const feePayerPublicKey = new ts_sdk_1.Ed25519PublicKey(utils_1.default.getBufferFromHexString(this._feePayerSignature.publicKey.pub));
309
+ const feePayerSignature = new ts_sdk_1.Ed25519Signature(this._feePayerSignature.signature);
310
+ const feePayerAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(feePayerPublicKey, feePayerSignature);
311
+ this._id = (0, ts_sdk_1.generateUserTransactionHash)({ transaction, senderAuthenticator, feePayerAuthenticator });
198
312
  }
199
313
  }
200
314
  exports.Transaction = Transaction;
201
315
  Transaction.EMPTY_PUBLIC_KEY = Buffer.alloc(32);
202
316
  Transaction.EMPTY_SIGNATURE = Buffer.alloc(64);
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUM5QixpREFBMEU7QUFDMUUsK0NBZ0I0QjtBQUM1Qiw0Q0FBMEY7QUFDMUYscURBQTZCO0FBQzdCLGdFQUFxQztBQUVyQyxNQUFzQixXQUFZLFNBQVEsMEJBQWU7SUFjdkQsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRywrQkFBc0IsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLGtDQUFzQixDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsNEJBQWdCLENBQUM7UUFDdkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxFQUFFLFlBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxFQUFFO2FBQy9EO1lBQ0QsU0FBUyxFQUFFLFdBQVcsQ0FBQyxlQUFlO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLElBQVcsRUFBRTtRQUNYLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksNEJBQWdCLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxNQUFNLENB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QUFTLENBQUMsY0FBYyxDQUFDO0lBQ2xELENBQUM7SUFFUyxNQUFNO1FBQ2QsT0FBTyxJQUFJLHNCQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEYsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakYsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLHlCQUFnQixDQUFDLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sU0FBUyxHQUFHLElBQUkseUJBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRSxNQUFNLG1CQUFtQixHQUFHLElBQUksb0NBQTJCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBQSxvQ0FBMkIsRUFBQyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQzs7QUFuT0gsa0NBb09DO0FBek5RLDRCQUFnQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsMkJBQWUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcsIE5ldHdvcmtUeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBBY2NvdW50QWRkcmVzcyxcbiAgQWNjb3VudEF1dGhlbnRpY2F0b3JFZDI1NTE5LFxuICBBcHRvcyxcbiAgQVBUT1NfQ09JTixcbiAgQXB0b3NDb25maWcsXG4gIERFRkFVTFRfTUFYX0dBU19BTU9VTlQsXG4gIEVkMjU1MTlQdWJsaWNLZXksXG4gIEVkMjU1MTlTaWduYXR1cmUsXG4gIGdlbmVyYXRlVXNlclRyYW5zYWN0aW9uSGFzaCxcbiAgSGV4LFxuICBOZXR3b3JrLFxuICBSYXdUcmFuc2FjdGlvbixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpbXBsZVRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JFZDI1NTE5LFxufSBmcm9tICdAYXB0b3MtbGFicy90cy1zZGsnO1xuaW1wb3J0IHsgREVGQVVMVF9HQVNfVU5JVF9QUklDRSwgU0VDT05EU19QRVJfV0VFSywgVU5BVkFJTEFCTEVfVEVYVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX3Jhd1RyYW5zYWN0aW9uOiBSYXdUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9zaWduYXR1cmU6IFNpZ25hdHVyZTtcbiAgcHJvdGVjdGVkIF9zZW5kZXI6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9yZWNpcGllbnQ6IFRyYW5zYWN0aW9uUmVjaXBpZW50O1xuICBwcm90ZWN0ZWQgX3NlcXVlbmNlTnVtYmVyOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfbWF4R2FzQW1vdW50OiBudW1iZXI7XG4gIHByb3RlY3RlZCBfZ2FzVW5pdFByaWNlOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfZ2FzVXNlZDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2V4cGlyYXRpb25UaW1lOiBudW1iZXI7XG5cbiAgc3RhdGljIEVNUFRZX1BVQkxJQ19LRVkgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICBzdGF0aWMgRU1QVFlfU0lHTkFUVVJFID0gQnVmZmVyLmFsbG9jKDY0KTtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX21heEdhc0Ftb3VudCA9IERFRkFVTFRfTUFYX0dBU19BTU9VTlQ7XG4gICAgdGhpcy5fZ2FzVW5pdFByaWNlID0gREVGQVVMVF9HQVNfVU5JVF9QUklDRTtcbiAgICB0aGlzLl9nYXNVc2VkID0gMDtcbiAgICB0aGlzLl9leHBpcmF0aW9uVGltZSA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDFlMykgKyBTRUNPTkRTX1BFUl9XRUVLO1xuICAgIHRoaXMuX3NlcXVlbmNlTnVtYmVyID0gMDtcbiAgICB0aGlzLl9zaWduYXR1cmUgPSB7XG4gICAgICBwdWJsaWNLZXk6IHtcbiAgICAgICAgcHViOiBIZXguZnJvbUhleElucHV0KFRyYW5zYWN0aW9uLkVNUFRZX1BVQkxJQ19LRVkpLnRvU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgc2lnbmF0dXJlOiBUcmFuc2FjdGlvbi5FTVBUWV9TSUdOQVRVUkUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHRoaXMuZ2VuZXJhdGVUeG5JZCgpO1xuICAgIHJldHVybiB0aGlzLl9pZCA/PyBVTkFWQUlMQUJMRV9URVhUO1xuICB9XG5cbiAgZ2V0IHNlbmRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZW5kZXI7XG4gIH1cblxuICBzZXQgc2VuZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZW5kZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCByZWNpcGllbnQoKTogVHJhbnNhY3Rpb25SZWNpcGllbnQge1xuICAgIHJldHVybiB0aGlzLl9yZWNpcGllbnQ7XG4gIH1cblxuICBzZXQgcmVjaXBpZW50KHZhbHVlOiBUcmFuc2FjdGlvblJlY2lwaWVudCkge1xuICAgIHRoaXMuX3JlY2lwaWVudCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlcXVlbmNlTnVtYmVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcXVlbmNlTnVtYmVyO1xuICB9XG5cbiAgc2V0IHNlcXVlbmNlTnVtYmVyKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zZXF1ZW5jZU51bWJlciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IG1heEdhc0Ftb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhHYXNBbW91bnQ7XG4gIH1cblxuICBzZXQgbWF4R2FzQW1vdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhHYXNBbW91bnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBnYXNVbml0UHJpY2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZ2FzVW5pdFByaWNlO1xuICB9XG5cbiAgc2V0IGdhc1VuaXRQcmljZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZ2FzVW5pdFByaWNlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZ2FzVXNlZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9nYXNVc2VkO1xuICB9XG5cbiAgc2V0IGdhc1VzZWQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2dhc1VzZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBleHBpcmF0aW9uVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9leHBpcmF0aW9uVGltZTtcbiAgfVxuXG4gIHNldCBleHBpcmF0aW9uVGltZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgY2FuU2lnbihfa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3Jhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcHVibGljS2V5QnVmZmVyID0gdXRpbHMuZ2V0QnVmZmVyRnJvbUhleFN0cmluZyh0aGlzLl9zaWduYXR1cmUucHVibGljS2V5LnB1Yik7XG4gICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVkMjU1MTlQdWJsaWNLZXkocHVibGljS2V5QnVmZmVyKTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IG5ldyBFZDI1NTE5U2lnbmF0dXJlKHRoaXMuX3NpZ25hdHVyZS5zaWduYXR1cmUpO1xuXG4gICAgY29uc3QgdHhuQXV0aGVudGljYXRvciA9IG5ldyBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JFZDI1NTE5KHB1YmxpY0tleSwgc2lnbmF0dXJlKTtcbiAgICBjb25zdCBzaWduZWRUeG4gPSBuZXcgU2lnbmVkVHJhbnNhY3Rpb24odGhpcy5fcmF3VHJhbnNhY3Rpb24sIHR4bkF1dGhlbnRpY2F0b3IpO1xuICAgIHJldHVybiBzaWduZWRUeG4udG9TdHJpbmcoKTtcbiAgfVxuXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IFB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW3NpZ25hdHVyZS50b1N0cmluZygnaGV4JyldO1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuYnVpbGRSYXdUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMuZ2VuZXJhdGVUeG5JZCgpO1xuICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgfVxuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGhpcy5zZW5kZXIsXG4gICAgICAgIHZhbHVlOiB0aGlzLnJlY2lwaWVudC5hbW91bnQgYXMgc3RyaW5nLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9LFxuICAgIF07XG4gICAgdGhpcy5fb3V0cHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGhpcy5yZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IHRoaXMucmVjaXBpZW50LmFtb3VudCBhcyBzdHJpbmcsXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IHNpZ25lZFR4bjogU2lnbmVkVHJhbnNhY3Rpb247XG4gICAgdHJ5IHtcbiAgICAgIHNpZ25lZFR4biA9IHV0aWxzLmRlc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJywgZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMuZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4bik7XG4gIH1cblxuICBmcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHhuOiBTaWduZWRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXdUeG4gPSBzaWduZWRUeG4ucmF3X3R4bjtcbiAgICAgIHRoaXMuX3NlbmRlciA9IHJhd1R4bi5zZW5kZXIudG9TdHJpbmcoKTtcbiAgICAgIHRoaXMuX3JlY2lwaWVudCA9IHV0aWxzLmdldFJlY2lwaWVudEZyb21UcmFuc2FjdGlvblBheWxvYWQocmF3VHhuLnBheWxvYWQpO1xuICAgICAgdGhpcy5fc2VxdWVuY2VOdW1iZXIgPSB1dGlscy5jYXN0VG9OdW1iZXIocmF3VHhuLnNlcXVlbmNlX251bWJlcik7XG4gICAgICB0aGlzLl9tYXhHYXNBbW91bnQgPSB1dGlscy5jYXN0VG9OdW1iZXIocmF3VHhuLm1heF9nYXNfYW1vdW50KTtcbiAgICAgIHRoaXMuX2dhc1VuaXRQcmljZSA9IHV0aWxzLmNhc3RUb051bWJlcihyYXdUeG4uZ2FzX3VuaXRfcHJpY2UpO1xuICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB1dGlscy5jYXN0VG9OdW1iZXIocmF3VHhuLmV4cGlyYXRpb25fdGltZXN0YW1wX3NlY3MpO1xuICAgICAgdGhpcy5fcmF3VHJhbnNhY3Rpb24gPSByYXdUeG47XG5cbiAgICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICAgIGNvbnN0IGF1dGhlbnRpY2F0b3IgPSBzaWduZWRUeG4uYXV0aGVudGljYXRvciBhcyBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JFZDI1NTE5O1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20oYXV0aGVudGljYXRvci5zaWduYXR1cmUudG9VaW50OEFycmF5KCkpO1xuICAgICAgdGhpcy5hZGRTaWduYXR1cmUoeyBwdWI6IGF1dGhlbnRpY2F0b3IucHVibGljX2tleS50b1N0cmluZygpIH0sIHNpZ25hdHVyZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignaW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb24nLCBlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIGEgc2lnbmVkIHRyYW5zYWN0aW9uIGhleCBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25lZFJhd1RyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtTaWduZWRUcmFuc2FjdGlvbn0gdGhlIGFwdG9zIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkUmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHV0aWxzLmRlc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkUmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJywgZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkUmF3VHJhbnNhY3Rpb24oKSB7XG4gICAgY29uc3QgbmV0d29yazogTmV0d29yayA9IHRoaXMuX2NvaW5Db25maWcubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gTmV0d29yay5NQUlOTkVUIDogTmV0d29yay5URVNUTkVUO1xuICAgIGNvbnN0IGFwdG9zID0gbmV3IEFwdG9zKG5ldyBBcHRvc0NvbmZpZyh7IG5ldHdvcmsgfSkpO1xuICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMuX3NlbmRlcik7XG4gICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9IEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcodGhpcy5fcmVjaXBpZW50LmFkZHJlc3MpO1xuXG4gICAgY29uc3Qgc2ltcGxlVHhuID0gYXdhaXQgYXB0b3MudHJhbnNhY3Rpb24uYnVpbGQuc2ltcGxlKHtcbiAgICAgIHNlbmRlcjogc2VuZGVyQWRkcmVzcyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZnVuY3Rpb246ICcweDE6OmNvaW46OnRyYW5zZmVyJyxcbiAgICAgICAgdHlwZUFyZ3VtZW50czogW0FQVE9TX0NPSU5dLFxuICAgICAgICBmdW5jdGlvbkFyZ3VtZW50czogW3JlY2lwaWVudEFkZHJlc3MsIHRoaXMucmVjaXBpZW50LmFtb3VudF0sXG4gICAgICB9LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBtYXhHYXNBbW91bnQ6IHRoaXMubWF4R2FzQW1vdW50LFxuICAgICAgICBnYXNVbml0UHJpY2U6IHRoaXMuZ2FzVW5pdFByaWNlLFxuICAgICAgICBleHBpcmVUaW1lc3RhbXA6IHRoaXMuZXhwaXJhdGlvblRpbWUsXG4gICAgICAgIGFjY291bnRTZXF1ZW5jZU51bWJlcjogdGhpcy5zZXF1ZW5jZU51bWJlcixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcmF3VHJhbnNhY3Rpb24gPSBzaW1wbGVUeG4ucmF3VHJhbnNhY3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RmVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIodGhpcy5nYXNVc2VkKS5tdWx0aXBsaWVkQnkodGhpcy5nYXNVbml0UHJpY2UpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlVHhuSWQoKSB7XG4gICAgaWYgKCF0aGlzLl9zaWduYXR1cmUgfHwgIXRoaXMuX3NpZ25hdHVyZS5wdWJsaWNLZXkgfHwgIXRoaXMuX3NpZ25hdHVyZS5zaWduYXR1cmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgU2ltcGxlVHJhbnNhY3Rpb24odGhpcy5fcmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBFZDI1NTE5UHVibGljS2V5KHV0aWxzLmdldEJ1ZmZlckZyb21IZXhTdHJpbmcodGhpcy5fc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBuZXcgRWQyNTUxOVNpZ25hdHVyZSh0aGlzLl9zaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICBjb25zdCBzZW5kZXJBdXRoZW50aWNhdG9yID0gbmV3IEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOShwdWJsaWNLZXksIHNpZ25hdHVyZSk7XG4gICAgdGhpcy5faWQgPSBnZW5lcmF0ZVVzZXJUcmFuc2FjdGlvbkhhc2goeyB0cmFuc2FjdGlvbiwgc2VuZGVyQXV0aGVudGljYXRvciB9KTtcbiAgfVxufVxuIl19
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVM4QjtBQUM5QixpREFBMEU7QUFDMUUsK0NBdUI0QjtBQUM1Qiw0Q0FBd0U7QUFDeEUscURBQTZCO0FBQzdCLGdFQUFxQztBQUVyQyxvREFBNEI7QUFXNUIsTUFBc0IsV0FBWSxTQUFRLDBCQUFlO0lBa0J2RCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLCtCQUFzQixDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsa0NBQXNCLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLHVCQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3RCLFNBQVMsRUFBRTtnQkFDVCxHQUFHLEVBQUUsWUFBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLEVBQUU7YUFDL0Q7WUFDRCxTQUFTLEVBQUUsV0FBVyxDQUFDLGVBQWU7U0FDdkMsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyx1QkFBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsa0JBQWtCLEdBQUc7WUFDeEIsU0FBUyxFQUFFO2dCQUNULEdBQUcsRUFBRSxZQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsRUFBRTthQUMvRDtZQUNELFNBQVMsRUFBRSxXQUFXLENBQUMsZUFBZTtTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFvQixFQUFFO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksNEJBQWdCLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFNBQVM7UUFDWCxJQUFBLGdCQUFNLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDL0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksU0FBUyxDQUFDLEtBQTJCO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxLQUE2QjtRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGVBQWUsQ0FBQyxlQUFnQztRQUNsRCxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQU1ELGlDQUFpQyxDQUFDLFNBQTRCO1FBQzVELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsYUFBYSxHQUFHLGVBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxhQUFhLEdBQUcsZUFBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1lBRTlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFpRCxDQUFDO1lBQ2xGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuRSxNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxNQUFxQyxDQUFDO1lBQ2hGLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRTdGLE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxhQUE0QyxDQUFDO1lBQ25HLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLEVBQUUsR0FBRyxFQUFFLGVBQUssQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFDMUUsaUJBQWlCLENBQ2xCLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWE7UUFDbkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksa0NBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLG1CQUF5QyxDQUFDO1FBQzlDLElBQUkscUJBQTJDLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsbUJBQW1CLEdBQUcsSUFBSSxtREFBMEMsRUFBRSxDQUFDO1lBQ3ZFLHFCQUFxQixHQUFHLElBQUksbURBQTBDLEVBQUUsQ0FBQztRQUMzRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0scUJBQXFCLEdBQUcsZUFBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEcsTUFBTSxlQUFlLEdBQUcsSUFBSSx5QkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sZUFBZSxHQUFHLElBQUkseUJBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlFLG1CQUFtQixHQUFHLElBQUksb0NBQTJCLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRXhGLE1BQU0sdUJBQXVCLEdBQUcsZUFBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEcsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHlCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHlCQUFnQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRixxQkFBcUIsR0FBRyxJQUFJLG9DQUEyQixDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSx5Q0FBZ0MsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ3pGLE9BQU8sRUFBRSx1QkFBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDekQsYUFBYSxFQUFFLHFCQUFxQjtTQUNyQyxDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxJQUFJLDBCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRixPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBb0IsRUFBRSxTQUFpQjtRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBb0IsRUFBRSxTQUFpQjtRQUMxRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQWU7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBSUQsb0JBQW9CO1FBQ2xCLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLGNBQXNCO1FBQ3ZDLElBQUksU0FBNEIsQ0FBQztRQUNqQyxJQUFJLENBQUM7WUFDSCxTQUFTLEdBQUcsZUFBSyxDQUFDLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLENBQUMsaUNBQWlDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsNEJBQTRCLENBQUMsb0JBQTRCO1FBQzlELElBQUksQ0FBQztZQUNILE9BQU8sZUFBSyxDQUFDLDRCQUE0QixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDOUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBSSxzQkFBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFvQixlQUFlO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO0lBQ2pILENBQUM7SUFFRCxrQkFBa0I7SUFDVCxrQkFBa0I7UUFDekIsTUFBTSxZQUFZLEdBQUc7WUFDbkIsSUFBSTtZQUNKLFNBQVM7WUFDVCxjQUFjO1lBQ2QsZUFBZTtZQUNmLGNBQWM7WUFDZCxLQUFLO1lBQ0wsZ0JBQWdCO1lBQ2hCLFFBQVE7WUFDUixNQUFNO1NBQ1AsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUEyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUM7UUFDaEYsTUFBTSxZQUFZLEdBQUcsT0FBTzthQUN6QixNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLHNCQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdEYsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPO1lBQ0wsWUFBWTtZQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLE9BQU87WUFDUCxZQUFZO1lBQ1osYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLEdBQUc7WUFDakIsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRVMsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxNQUFNLE9BQU8sR0FBWSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUsscUJBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBTyxDQUFDLE9BQU8sQ0FBQztRQUNuSCxNQUFNLEtBQUssR0FBRyxJQUFJLGNBQUssQ0FBQyxJQUFJLG9CQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsTUFBTSxhQUFhLEdBQUcsdUJBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlELE1BQU0sU0FBUyxHQUFHLE1BQU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3JELE1BQU0sRUFBRSxhQUFhO1lBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMseUJBQXlCLEVBQXlDO1lBQzdFLE9BQU8sRUFBRTtnQkFDUCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQy9CLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNwQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsY0FBYzthQUMzQztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sOEJBQThCO1FBQ3BDLE1BQU0sY0FBYyxHQUFHLElBQUksK0JBQXNCLENBQy9DLElBQUksQ0FBQyxlQUFlLEVBQ3BCLEVBQUUsRUFDRix1QkFBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FDakQsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFBLCtCQUFzQixFQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSx1Q0FBOEIsQ0FBQyxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVPLGlDQUFpQztRQUN2QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBQSwrQkFBc0IsRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxFQUFFLDZCQUFvQixDQUFDLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUNFLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUN0QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTO1lBQ2hDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVM7WUFDaEMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCO1lBQ3hCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVM7WUFDbEMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUztZQUNsQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFDdEIsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSwwQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLHVCQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDbEgsTUFBTSxlQUFlLEdBQUcsSUFBSSx5QkFBZ0IsQ0FBQyxlQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hILE1BQU0sZUFBZSxHQUFHLElBQUkseUJBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxvQ0FBMkIsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDOUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHlCQUFnQixDQUFDLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEgsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHlCQUFnQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRixNQUFNLHFCQUFxQixHQUFHLElBQUksb0NBQTJCLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNwRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUEsb0NBQTJCLEVBQUMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7O0FBdlhILGtDQXdYQztBQXpXUSw0QkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLDJCQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgTmV0d29ya1R5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEFjY291bnRBZGRyZXNzLFxuICBBY2NvdW50QXV0aGVudGljYXRvcixcbiAgQWNjb3VudEF1dGhlbnRpY2F0b3JFZDI1NTE5LFxuICBBY2NvdW50QXV0aGVudGljYXRvck5vQWNjb3VudEF1dGhlbnRpY2F0b3IsXG4gIEFwdG9zLFxuICBBcHRvc0NvbmZpZyxcbiAgREVGQVVMVF9NQVhfR0FTX0FNT1VOVCxcbiAgRWQyNTUxOVB1YmxpY0tleSxcbiAgRWQyNTUxOVNpZ25hdHVyZSxcbiAgRmVlUGF5ZXJSYXdUcmFuc2FjdGlvbixcbiAgZ2VuZXJhdGVTaWduaW5nTWVzc2FnZSxcbiAgZ2VuZXJhdGVVc2VyVHJhbnNhY3Rpb25IYXNoLFxuICBIZXgsXG4gIElucHV0R2VuZXJhdGVUcmFuc2FjdGlvblBheWxvYWREYXRhLFxuICBOZXR3b3JrLFxuICBSQVdfVFJBTlNBQ1RJT05fU0FMVCxcbiAgUkFXX1RSQU5TQUNUSU9OX1dJVEhfREFUQV9TQUxULFxuICBSYXdUcmFuc2FjdGlvbixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpbXBsZVRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JGZWVQYXllcixcbiAgVHJhbnNhY3Rpb25QYXlsb2FkLFxufSBmcm9tICdAYXB0b3MtbGFicy90cy1zZGsnO1xuaW1wb3J0IHsgREVGQVVMVF9HQVNfVU5JVF9QUklDRSwgVU5BVkFJTEFCTEVfVEVYVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQXB0VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHhEYXRhIH0gZnJvbSAnLi4vaWZhY2UnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgdHlwZSBJbnB1dHNBbmRPdXRwdXRzID0ge1xuICAvKiogVXNlZCBmb3IgdGhpcy5pbnB1dHMgKi9cbiAgaW5wdXRzOiBFbnRyeVtdO1xuICAvKiogVXNlZCBmb3IgdGhpcy5vdXRwdXRzICovXG4gIG91dHB1dHM6IEVudHJ5W107XG4gIC8qKiBVc2VkIGZvciB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbigpICovXG4gIGV4dGVybmFsT3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbn07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfcmF3VHJhbnNhY3Rpb246IFJhd1RyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX3NlbmRlclNpZ25hdHVyZTogU2lnbmF0dXJlO1xuICBwcm90ZWN0ZWQgX2ZlZVBheWVyU2lnbmF0dXJlOiBTaWduYXR1cmU7XG4gIHByb3RlY3RlZCBfc2VuZGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcmVjaXBpZW50czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbiAgcHJvdGVjdGVkIF9zZXF1ZW5jZU51bWJlcjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX21heEdhc0Ftb3VudDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2dhc1VuaXRQcmljZTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2dhc1VzZWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9leHBpcmF0aW9uVGltZTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2ZlZVBheWVyQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2Fzc2V0SWQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9pc1NpbXVsYXRlVHhuOiBib29sZWFuO1xuXG4gIHN0YXRpYyBFTVBUWV9QVUJMSUNfS0VZID0gQnVmZmVyLmFsbG9jKDMyKTtcbiAgc3RhdGljIEVNUFRZX1NJR05BVFVSRSA9IEJ1ZmZlci5hbGxvYyg2NCk7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl9tYXhHYXNBbW91bnQgPSBERUZBVUxUX01BWF9HQVNfQU1PVU5UO1xuICAgIHRoaXMuX2dhc1VuaXRQcmljZSA9IERFRkFVTFRfR0FTX1VOSVRfUFJJQ0U7XG4gICAgdGhpcy5fZ2FzVXNlZCA9IDA7XG4gICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB1dGlscy5nZXRUeG5FeHBpcmF0aW9uVGltZXN0YW1wKCk7XG4gICAgdGhpcy5fc2VxdWVuY2VOdW1iZXIgPSAwO1xuICAgIHRoaXMuX3NlbmRlciA9IEFjY291bnRBZGRyZXNzLlpFUk8udG9TdHJpbmcoKTtcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gW107XG4gICAgdGhpcy5fYXNzZXRJZCA9IEFjY291bnRBZGRyZXNzLlpFUk8udG9TdHJpbmcoKTtcbiAgICB0aGlzLl9pc1NpbXVsYXRlVHhuID0gZmFsc2U7XG4gICAgdGhpcy5fc2VuZGVyU2lnbmF0dXJlID0ge1xuICAgICAgcHVibGljS2V5OiB7XG4gICAgICAgIHB1YjogSGV4LmZyb21IZXhJbnB1dChUcmFuc2FjdGlvbi5FTVBUWV9QVUJMSUNfS0VZKS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIHNpZ25hdHVyZTogVHJhbnNhY3Rpb24uRU1QVFlfU0lHTkFUVVJFLFxuICAgIH07XG4gICAgdGhpcy5fZmVlUGF5ZXJBZGRyZXNzID0gQWNjb3VudEFkZHJlc3MuWkVSTy50b1N0cmluZygpO1xuICAgIHRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlID0ge1xuICAgICAgcHVibGljS2V5OiB7XG4gICAgICAgIHB1YjogSGV4LmZyb21IZXhJbnB1dChUcmFuc2FjdGlvbi5FTVBUWV9QVUJMSUNfS0VZKS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIHNpZ25hdHVyZTogVHJhbnNhY3Rpb24uRU1QVFlfU0lHTkFUVVJFLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICB0aGlzLmdlbmVyYXRlVHhuSWQoKTtcbiAgICByZXR1cm4gdGhpcy5faWQgPz8gVU5BVkFJTEFCTEVfVEVYVDtcbiAgfVxuXG4gIGdldCBzZW5kZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZGVyO1xuICB9XG5cbiAgc2V0IHNlbmRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2VuZGVyID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYHJlY2lwaWVudHMoKWAuXG4gICAqL1xuICBnZXQgcmVjaXBpZW50KCk6IFRyYW5zYWN0aW9uUmVjaXBpZW50IHtcbiAgICBhc3NlcnQodGhpcy5fcmVjaXBpZW50cy5sZW5ndGggPiAwLCAnTm8gcmVjaXBpZW50cyBhdmFpbGFibGUnKTtcbiAgICByZXR1cm4gdGhpcy5fcmVjaXBpZW50c1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgcmVjaXBpZW50cygpYC5cbiAgICovXG4gIHNldCByZWNpcGllbnQodmFsdWU6IFRyYW5zYWN0aW9uUmVjaXBpZW50KSB7XG4gICAgdGhpcy5yZWNpcGllbnRzID0gW3ZhbHVlXTtcbiAgfVxuXG4gIGdldCByZWNpcGllbnRzKCk6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10ge1xuICAgIHJldHVybiB0aGlzLl9yZWNpcGllbnRzO1xuICB9XG5cbiAgc2V0IHJlY2lwaWVudHModmFsdWU6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10pIHtcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc2VxdWVuY2VOdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2VOdW1iZXI7XG4gIH1cblxuICBzZXQgc2VxdWVuY2VOdW1iZXIodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3NlcXVlbmNlTnVtYmVyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgbWF4R2FzQW1vdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heEdhc0Ftb3VudDtcbiAgfVxuXG4gIHNldCBtYXhHYXNBbW91bnQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heEdhc0Ftb3VudCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGdhc1VuaXRQcmljZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9nYXNVbml0UHJpY2U7XG4gIH1cblxuICBzZXQgZ2FzVW5pdFByaWNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9nYXNVbml0UHJpY2UgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBnYXNVc2VkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2dhc1VzZWQ7XG4gIH1cblxuICBzZXQgZ2FzVXNlZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZ2FzVXNlZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGV4cGlyYXRpb25UaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGlyYXRpb25UaW1lO1xuICB9XG5cbiAgc2V0IGV4cGlyYXRpb25UaW1lKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9leHBpcmF0aW9uVGltZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGZlZVBheWVyQWRkcmVzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mZWVQYXllckFkZHJlc3M7XG4gIH1cblxuICBzZXQgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIGdldCBhc3NldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2V0SWQ7XG4gIH1cblxuICBzZXQgYXNzZXRJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYXNzZXRJZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzU2ltdWxhdGVUeG4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2ltdWxhdGVUeG47XG4gIH1cblxuICBzZXQgaXNTaW11bGF0ZVR4bih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzU2ltdWxhdGVUeG4gPSB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRUcmFuc2FjdGlvblBheWxvYWREYXRhKCk6IElucHV0R2VuZXJhdGVUcmFuc2FjdGlvblBheWxvYWREYXRhO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYXJzZVRyYW5zYWN0aW9uUGF5bG9hZChwYXlsb2FkOiBUcmFuc2FjdGlvblBheWxvYWQpOiB2b2lkO1xuXG4gIGZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeG46IFNpZ25lZFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhd1R4biA9IHNpZ25lZFR4bi5yYXdfdHhuO1xuICAgICAgdGhpcy5wYXJzZVRyYW5zYWN0aW9uUGF5bG9hZChyYXdUeG4ucGF5bG9hZCk7XG4gICAgICB0aGlzLl9zZW5kZXIgPSByYXdUeG4uc2VuZGVyLnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLl9zZXF1ZW5jZU51bWJlciA9IHV0aWxzLmNhc3RUb051bWJlcihyYXdUeG4uc2VxdWVuY2VfbnVtYmVyKTtcbiAgICAgIHRoaXMuX21heEdhc0Ftb3VudCA9IHV0aWxzLmNhc3RUb051bWJlcihyYXdUeG4ubWF4X2dhc19hbW91bnQpO1xuICAgICAgdGhpcy5fZ2FzVW5pdFByaWNlID0gdXRpbHMuY2FzdFRvTnVtYmVyKHJhd1R4bi5nYXNfdW5pdF9wcmljZSk7XG4gICAgICB0aGlzLl9leHBpcmF0aW9uVGltZSA9IHV0aWxzLmNhc3RUb051bWJlcihyYXdUeG4uZXhwaXJhdGlvbl90aW1lc3RhbXBfc2Vjcyk7XG4gICAgICB0aGlzLl9yYXdUcmFuc2FjdGlvbiA9IHJhd1R4bjtcblxuICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgICAgY29uc3QgYXV0aGVudGljYXRvciA9IHNpZ25lZFR4bi5hdXRoZW50aWNhdG9yIGFzIFRyYW5zYWN0aW9uQXV0aGVudGljYXRvckZlZVBheWVyO1xuICAgICAgdGhpcy5fZmVlUGF5ZXJBZGRyZXNzID0gYXV0aGVudGljYXRvci5mZWVfcGF5ZXIuYWRkcmVzcy50b1N0cmluZygpO1xuICAgICAgY29uc3Qgc2VuZGVyQXV0aGVudGljYXRvciA9IGF1dGhlbnRpY2F0b3Iuc2VuZGVyIGFzIEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOTtcbiAgICAgIGNvbnN0IHNlbmRlclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNlbmRlckF1dGhlbnRpY2F0b3Iuc2lnbmF0dXJlLnRvVWludDhBcnJheSgpKTtcbiAgICAgIHRoaXMuYWRkU2VuZGVyU2lnbmF0dXJlKHsgcHViOiBzZW5kZXJBdXRoZW50aWNhdG9yLnB1YmxpY19rZXkudG9TdHJpbmcoKSB9LCBzZW5kZXJTaWduYXR1cmUpO1xuXG4gICAgICBjb25zdCBmZWVQYXllckF1dGhlbnRpY2F0b3IgPSBhdXRoZW50aWNhdG9yLmZlZV9wYXllci5hdXRoZW50aWNhdG9yIGFzIEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOTtcbiAgICAgIGNvbnN0IGZlZVBheWVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20oZmVlUGF5ZXJBdXRoZW50aWNhdG9yLnNpZ25hdHVyZS50b1VpbnQ4QXJyYXkoKSk7XG4gICAgICB0aGlzLmFkZEZlZVBheWVyU2lnbmF0dXJlKFxuICAgICAgICB7IHB1YjogdXRpbHMuc3RyaXBIZXhQcmVmaXgoZmVlUGF5ZXJBdXRoZW50aWNhdG9yLnB1YmxpY19rZXkudG9TdHJpbmcoKSkgfSxcbiAgICAgICAgZmVlUGF5ZXJTaWduYXR1cmVcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignaW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb24nLCBlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICBjYW5TaWduKF9rZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICBsZXQgc2VuZGVyQXV0aGVudGljYXRvcjogQWNjb3VudEF1dGhlbnRpY2F0b3I7XG4gICAgbGV0IGZlZVBheWVyQXV0aGVudGljYXRvcjogQWNjb3VudEF1dGhlbnRpY2F0b3I7XG4gICAgaWYgKHRoaXMuaXNTaW11bGF0ZVR4bikge1xuICAgICAgc2VuZGVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvck5vQWNjb3VudEF1dGhlbnRpY2F0b3IoKTtcbiAgICAgIGZlZVBheWVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvck5vQWNjb3VudEF1dGhlbnRpY2F0b3IoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VuZGVyUHVibGljS2V5QnVmZmVyID0gdXRpbHMuZ2V0QnVmZmVyRnJvbUhleFN0cmluZyh0aGlzLl9zZW5kZXJTaWduYXR1cmUucHVibGljS2V5LnB1Yik7XG4gICAgICBjb25zdCBzZW5kZXJQdWJsaWNLZXkgPSBuZXcgRWQyNTUxOVB1YmxpY0tleShzZW5kZXJQdWJsaWNLZXlCdWZmZXIpO1xuICAgICAgY29uc3Qgc2VuZGVyU2lnbmF0dXJlID0gbmV3IEVkMjU1MTlTaWduYXR1cmUodGhpcy5fc2VuZGVyU2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgICBzZW5kZXJBdXRoZW50aWNhdG9yID0gbmV3IEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOShzZW5kZXJQdWJsaWNLZXksIHNlbmRlclNpZ25hdHVyZSk7XG5cbiAgICAgIGNvbnN0IGZlZVBheWVyUHVibGljS2V5QnVmZmVyID0gdXRpbHMuZ2V0QnVmZmVyRnJvbUhleFN0cmluZyh0aGlzLl9mZWVQYXllclNpZ25hdHVyZS5wdWJsaWNLZXkucHViKTtcbiAgICAgIGNvbnN0IGZlZVBheWVyUHVibGljS2V5ID0gbmV3IEVkMjU1MTlQdWJsaWNLZXkoZmVlUGF5ZXJQdWJsaWNLZXlCdWZmZXIpO1xuICAgICAgY29uc3QgZmVlUGF5ZXJTaWduYXR1cmUgPSBuZXcgRWQyNTUxOVNpZ25hdHVyZSh0aGlzLl9mZWVQYXllclNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgZmVlUGF5ZXJBdXRoZW50aWNhdG9yID0gbmV3IEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOShmZWVQYXllclB1YmxpY0tleSwgZmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4bkF1dGhlbnRpY2F0b3IgPSBuZXcgVHJhbnNhY3Rpb25BdXRoZW50aWNhdG9yRmVlUGF5ZXIoc2VuZGVyQXV0aGVudGljYXRvciwgW10sIFtdLCB7XG4gICAgICBhZGRyZXNzOiBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMuX2ZlZVBheWVyQWRkcmVzcyksXG4gICAgICBhdXRoZW50aWNhdG9yOiBmZWVQYXllckF1dGhlbnRpY2F0b3IsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzaWduZWRUeG4gPSBuZXcgU2lnbmVkVHJhbnNhY3Rpb24odGhpcy5fcmF3VHJhbnNhY3Rpb24sIHR4bkF1dGhlbnRpY2F0b3IpO1xuICAgIHJldHVybiBzaWduZWRUeG4udG9TdHJpbmcoKTtcbiAgfVxuXG4gIGFkZFNlbmRlclNpZ25hdHVyZShwdWJsaWNLZXk6IFB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW3NpZ25hdHVyZS50b1N0cmluZygnaGV4JyldO1xuICAgIHRoaXMuX3NlbmRlclNpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxuXG4gIGdldEZlZVBheWVyUHViS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlLnB1YmxpY0tleS5wdWI7XG4gIH1cblxuICBhZGRGZWVQYXllclNpZ25hdHVyZShwdWJsaWNLZXk6IFB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9mZWVQYXllclNpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxuXG4gIGFkZEZlZVBheWVyQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9mZWVQYXllckFkZHJlc3MgPSBhZGRyZXNzO1xuICB9XG5cbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5idWlsZFJhd1RyYW5zYWN0aW9uKCk7XG4gICAgdGhpcy5nZW5lcmF0ZVR4bklkKCk7XG4gICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICB9XG5cbiAgYWJzdHJhY3QgaW5wdXRzQW5kT3V0cHV0cygpOiBJbnB1dHNBbmRPdXRwdXRzO1xuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgaW5wdXRzLCBvdXRwdXRzIH0gPSB0aGlzLmlucHV0c0FuZE91dHB1dHMoKTtcbiAgICB0aGlzLl9pbnB1dHMgPSBpbnB1dHM7XG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gIH1cblxuICBmcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBzaWduZWRUeG46IFNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIHRyeSB7XG4gICAgICBzaWduZWRUeG4gPSB1dGlscy5kZXNlcmlhbGl6ZVNpZ25lZFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMuZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4bik7XG4gIH1cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyBhIHNpZ25lZCB0cmFuc2FjdGlvbiBoZXggc3RyaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduZWRSYXdUcmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7U2lnbmVkVHJhbnNhY3Rpb259IHRoZSBhcHRvcyBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZVNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBTaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB1dGlscy5kZXNlcmlhbGl6ZVNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFJhd1RyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIHJlY2lwaWVudHM6IHRoaXMucmVjaXBpZW50cyxcbiAgICAgIHNlcXVlbmNlTnVtYmVyOiB0aGlzLnNlcXVlbmNlTnVtYmVyLFxuICAgICAgbWF4R2FzQW1vdW50OiB0aGlzLm1heEdhc0Ftb3VudCxcbiAgICAgIGdhc1VuaXRQcmljZTogdGhpcy5nYXNVbml0UHJpY2UsXG4gICAgICBnYXNVc2VkOiB0aGlzLmdhc1VzZWQsXG4gICAgICBleHBpcmF0aW9uVGltZTogdGhpcy5leHBpcmF0aW9uVGltZSxcbiAgICAgIGZlZVBheWVyOiB0aGlzLmZlZVBheWVyQWRkcmVzcyxcbiAgICAgIGFzc2V0SWQ6IHRoaXMuYXNzZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldEZlZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHRoaXMuZ2FzVXNlZCkubXVsdGlwbGllZEJ5KHRoaXMuZ2FzVW5pdFByaWNlKS50b1N0cmluZygpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5mZWVQYXllckFkZHJlc3MgPyB0aGlzLmdldFNpZ25hYmxlUGF5bG9hZFdpdGhGZWVQYXllcigpIDogdGhpcy5nZXRTaWduYWJsZVBheWxvYWRXaXRob3V0RmVlUGF5ZXIoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBvdmVycmlkZSBleHBsYWluVHJhbnNhY3Rpb24oKTogQXB0VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICdvdXRwdXRzJyxcbiAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAnZmVlJyxcbiAgICAgICd3aXRoZHJhd0Ftb3VudCcsXG4gICAgICAnc2VuZGVyJyxcbiAgICAgICd0eXBlJyxcbiAgICBdO1xuXG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IHRoaXMuaW5wdXRzQW5kT3V0cHV0cygpLmV4dGVybmFsT3V0cHV0cztcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBvdXRwdXRzXG4gICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4gYWNjdW11bGF0b3IucGx1cyhjdXJyZW50LmFtb3VudCksIG5ldyBCaWdOdW1iZXIoJzAnKSlcbiAgICAgIC50b1N0cmluZygpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5nZXRGZWUoKSB9LFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkUmF3VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmV0d29yazogTmV0d29yayA9IHRoaXMuX2NvaW5Db25maWcubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gTmV0d29yay5NQUlOTkVUIDogTmV0d29yay5URVNUTkVUO1xuICAgIGNvbnN0IGFwdG9zID0gbmV3IEFwdG9zKG5ldyBBcHRvc0NvbmZpZyh7IG5ldHdvcmsgfSkpO1xuICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMuX3NlbmRlcik7XG5cbiAgICBjb25zdCBzaW1wbGVUeG4gPSBhd2FpdCBhcHRvcy50cmFuc2FjdGlvbi5idWlsZC5zaW1wbGUoe1xuICAgICAgc2VuZGVyOiBzZW5kZXJBZGRyZXNzLFxuICAgICAgZGF0YTogdGhpcy5nZXRUcmFuc2FjdGlvblBheWxvYWREYXRhKCkgYXMgSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIG1heEdhc0Ftb3VudDogdGhpcy5tYXhHYXNBbW91bnQsXG4gICAgICAgIGdhc1VuaXRQcmljZTogdGhpcy5nYXNVbml0UHJpY2UsXG4gICAgICAgIGV4cGlyZVRpbWVzdGFtcDogdGhpcy5leHBpcmF0aW9uVGltZSxcbiAgICAgICAgYWNjb3VudFNlcXVlbmNlTnVtYmVyOiB0aGlzLnNlcXVlbmNlTnVtYmVyLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9yYXdUcmFuc2FjdGlvbiA9IHNpbXBsZVR4bi5yYXdUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2lnbmFibGVQYXlsb2FkV2l0aEZlZVBheWVyKCk6IEJ1ZmZlciB7XG4gICAgY29uc3QgZmVlUGF5ZXJSYXdUeG4gPSBuZXcgRmVlUGF5ZXJSYXdUcmFuc2FjdGlvbihcbiAgICAgIHRoaXMuX3Jhd1RyYW5zYWN0aW9uLFxuICAgICAgW10sXG4gICAgICBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMuX2ZlZVBheWVyQWRkcmVzcylcbiAgICApO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShnZW5lcmF0ZVNpZ25pbmdNZXNzYWdlKGZlZVBheWVyUmF3VHhuLmJjc1RvQnl0ZXMoKSwgUkFXX1RSQU5TQUNUSU9OX1dJVEhfREFUQV9TQUxUKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNpZ25hYmxlUGF5bG9hZFdpdGhvdXRGZWVQYXllcigpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShnZW5lcmF0ZVNpZ25pbmdNZXNzYWdlKHRoaXMuX3Jhd1RyYW5zYWN0aW9uLmJjc1RvQnl0ZXMoKSwgUkFXX1RSQU5TQUNUSU9OX1NBTFQpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVUeG5JZCgpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5fc2VuZGVyU2lnbmF0dXJlIHx8XG4gICAgICAhdGhpcy5fc2VuZGVyU2lnbmF0dXJlLnB1YmxpY0tleSB8fFxuICAgICAgIXRoaXMuX3NlbmRlclNpZ25hdHVyZS5zaWduYXR1cmUgfHxcbiAgICAgICF0aGlzLl9mZWVQYXllclNpZ25hdHVyZSB8fFxuICAgICAgIXRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlLnB1YmxpY0tleSB8fFxuICAgICAgIXRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlLnNpZ25hdHVyZSB8fFxuICAgICAgIXRoaXMuX2ZlZVBheWVyQWRkcmVzc1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBTaW1wbGVUcmFuc2FjdGlvbih0aGlzLl9yYXdUcmFuc2FjdGlvbiwgQWNjb3VudEFkZHJlc3MuZnJvbVN0cmluZyh0aGlzLl9mZWVQYXllckFkZHJlc3MpKTtcbiAgICBjb25zdCBzZW5kZXJQdWJsaWNLZXkgPSBuZXcgRWQyNTUxOVB1YmxpY0tleSh1dGlscy5nZXRCdWZmZXJGcm9tSGV4U3RyaW5nKHRoaXMuX3NlbmRlclNpZ25hdHVyZS5wdWJsaWNLZXkucHViKSk7XG4gICAgY29uc3Qgc2VuZGVyU2lnbmF0dXJlID0gbmV3IEVkMjU1MTlTaWduYXR1cmUodGhpcy5fc2VuZGVyU2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgY29uc3Qgc2VuZGVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTkoc2VuZGVyUHVibGljS2V5LCBzZW5kZXJTaWduYXR1cmUpO1xuICAgIGNvbnN0IGZlZVBheWVyUHVibGljS2V5ID0gbmV3IEVkMjU1MTlQdWJsaWNLZXkodXRpbHMuZ2V0QnVmZmVyRnJvbUhleFN0cmluZyh0aGlzLl9mZWVQYXllclNpZ25hdHVyZS5wdWJsaWNLZXkucHViKSk7XG4gICAgY29uc3QgZmVlUGF5ZXJTaWduYXR1cmUgPSBuZXcgRWQyNTUxOVNpZ25hdHVyZSh0aGlzLl9mZWVQYXllclNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgIGNvbnN0IGZlZVBheWVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTkoZmVlUGF5ZXJQdWJsaWNLZXksIGZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICB0aGlzLl9pZCA9IGdlbmVyYXRlVXNlclRyYW5zYWN0aW9uSGFzaCh7IHRyYW5zYWN0aW9uLCBzZW5kZXJBdXRoZW50aWNhdG9yLCBmZWVQYXllckF1dGhlbnRpY2F0b3IgfSk7XG4gIH1cbn1cbiJdfQ==