@bitgo/sdk-coin-ton 4.0.4 → 4.0.6

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 (224) hide show
  1. package/dist/cjs/src/index.d.ts.map +1 -0
  2. package/dist/{src → cjs/src}/index.js +1 -1
  3. package/dist/cjs/src/jettonToken.d.ts.map +1 -0
  4. package/dist/cjs/src/jettonToken.js +52 -0
  5. package/dist/cjs/src/lib/constants.d.ts.map +1 -0
  6. package/dist/cjs/src/lib/constants.js +12 -0
  7. package/dist/{src → cjs/src}/lib/explainTransactionWasm.d.ts +15 -1
  8. package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
  9. package/dist/cjs/src/lib/explainTransactionWasm.js +104 -0
  10. package/dist/cjs/src/lib/iface.d.ts.map +1 -0
  11. package/dist/cjs/src/lib/iface.js +3 -0
  12. package/dist/cjs/src/lib/index.d.ts.map +1 -0
  13. package/dist/{src → cjs/src}/lib/index.js +1 -1
  14. package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
  15. package/dist/cjs/src/lib/keyPair.js +103 -0
  16. package/dist/cjs/src/lib/singleNominatorWithdrawBuilder.d.ts.map +1 -0
  17. package/dist/cjs/src/lib/singleNominatorWithdrawBuilder.js +38 -0
  18. package/dist/cjs/src/lib/tokenTransaction.d.ts.map +1 -0
  19. package/dist/cjs/src/lib/tokenTransaction.js +97 -0
  20. package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  21. package/dist/cjs/src/lib/tokenTransferBuilder.js +57 -0
  22. package/dist/cjs/src/lib/tonWhalesDepositBuilder.d.ts.map +1 -0
  23. package/dist/cjs/src/lib/tonWhalesDepositBuilder.js +42 -0
  24. package/dist/cjs/src/lib/tonWhalesVestingDepositBuilder.d.ts.map +1 -0
  25. package/dist/cjs/src/lib/tonWhalesVestingDepositBuilder.js +37 -0
  26. package/dist/cjs/src/lib/tonWhalesVestingWithdrawBuilder.d.ts.map +1 -0
  27. package/dist/cjs/src/lib/tonWhalesVestingWithdrawBuilder.js +37 -0
  28. package/dist/cjs/src/lib/tonWhalesWithdrawalBuilder.d.ts.map +1 -0
  29. package/dist/cjs/src/lib/tonWhalesWithdrawalBuilder.js +60 -0
  30. package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
  31. package/dist/cjs/src/lib/transaction.js +415 -0
  32. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
  33. package/dist/cjs/src/lib/transactionBuilder.js +152 -0
  34. package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  35. package/dist/cjs/src/lib/transactionBuilderFactory.js +100 -0
  36. package/dist/cjs/src/lib/transactionExplanation.d.ts.map +1 -0
  37. package/dist/cjs/src/lib/transactionExplanation.js +3 -0
  38. package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
  39. package/dist/cjs/src/lib/transferBuilder.js +21 -0
  40. package/dist/cjs/src/lib/utils.d.ts.map +1 -0
  41. package/dist/cjs/src/lib/utils.js +159 -0
  42. package/dist/cjs/src/register.d.ts.map +1 -0
  43. package/dist/cjs/src/register.js +15 -0
  44. package/dist/cjs/src/ton.d.ts.map +1 -0
  45. package/dist/cjs/src/ton.js +520 -0
  46. package/dist/cjs/src/tton.d.ts.map +1 -0
  47. package/dist/cjs/src/tton.js +30 -0
  48. package/dist/cjs/test/resources/ton.d.ts.map +1 -0
  49. package/dist/cjs/test/resources/ton.js +208 -0
  50. package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
  51. package/dist/cjs/test/unit/explainTransactionWasm.js +147 -0
  52. package/dist/cjs/test/unit/jettonToken.d.ts.map +1 -0
  53. package/dist/cjs/test/unit/jettonToken.js +341 -0
  54. package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
  55. package/dist/cjs/test/unit/keyPair.js +55 -0
  56. package/dist/cjs/test/unit/singleNominatorWithdrawBuilder.d.ts.map +1 -0
  57. package/dist/cjs/test/unit/singleNominatorWithdrawBuilder.js +314 -0
  58. package/dist/cjs/test/unit/tokenTransferBuilder.d.ts.map +1 -0
  59. package/dist/cjs/test/unit/tokenTransferBuilder.js +262 -0
  60. package/dist/{test → cjs/test}/unit/ton.d.ts.map +1 -1
  61. package/dist/cjs/test/unit/ton.js +752 -0
  62. package/dist/cjs/test/unit/tonWhalesDepositBuilder.d.ts.map +1 -0
  63. package/dist/cjs/test/unit/tonWhalesDepositBuilder.js +114 -0
  64. package/dist/cjs/test/unit/tonWhalesVestingDepositBuilder.d.ts.map +1 -0
  65. package/dist/cjs/test/unit/tonWhalesVestingDepositBuilder.js +136 -0
  66. package/dist/cjs/test/unit/tonWhalesVestingWithdrawBuilder.d.ts.map +1 -0
  67. package/dist/cjs/test/unit/tonWhalesVestingWithdrawBuilder.js +136 -0
  68. package/dist/cjs/test/unit/tonWhalesWithdrawalBuilder.d.ts.map +1 -0
  69. package/dist/cjs/test/unit/tonWhalesWithdrawalBuilder.js +130 -0
  70. package/dist/cjs/test/unit/transferBuilder.d.ts.map +1 -0
  71. package/dist/cjs/test/unit/transferBuilder.js +281 -0
  72. package/dist/cjs/test/unit/wasmCrossCompatibility.d.ts.map +1 -0
  73. package/dist/cjs/test/unit/wasmCrossCompatibility.js +176 -0
  74. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  75. package/dist/esm/index.d.ts +6 -0
  76. package/dist/esm/index.js +6 -0
  77. package/dist/esm/jettonToken.d.ts +19 -0
  78. package/dist/esm/jettonToken.js +48 -0
  79. package/dist/esm/lib/constants.d.ts +9 -0
  80. package/dist/esm/lib/constants.js +9 -0
  81. package/dist/esm/lib/explainTransactionWasm.d.ts +36 -0
  82. package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
  83. package/dist/esm/lib/explainTransactionWasm.js +99 -0
  84. package/dist/esm/lib/iface.d.ts +32 -0
  85. package/dist/{src → esm}/lib/iface.js +1 -2
  86. package/dist/esm/lib/index.d.ts +14 -0
  87. package/dist/esm/lib/index.js +14 -0
  88. package/dist/esm/lib/keyPair.d.ts +25 -0
  89. package/dist/esm/lib/keyPair.js +63 -0
  90. package/dist/esm/lib/singleNominatorWithdrawBuilder.d.ts +17 -0
  91. package/dist/esm/lib/singleNominatorWithdrawBuilder.js +34 -0
  92. package/dist/esm/lib/tokenTransaction.d.ts +16 -0
  93. package/dist/esm/lib/tokenTransaction.js +90 -0
  94. package/dist/esm/lib/tokenTransferBuilder.d.ts +20 -0
  95. package/dist/esm/lib/tokenTransferBuilder.js +53 -0
  96. package/dist/esm/lib/tonWhalesDepositBuilder.d.ts +12 -0
  97. package/dist/esm/lib/tonWhalesDepositBuilder.js +38 -0
  98. package/dist/esm/lib/tonWhalesVestingDepositBuilder.d.ts +12 -0
  99. package/dist/esm/lib/tonWhalesVestingDepositBuilder.js +33 -0
  100. package/dist/esm/lib/tonWhalesVestingWithdrawBuilder.d.ts +12 -0
  101. package/dist/esm/lib/tonWhalesVestingWithdrawBuilder.js +33 -0
  102. package/dist/esm/lib/tonWhalesWithdrawalBuilder.d.ts +30 -0
  103. package/dist/esm/lib/tonWhalesWithdrawalBuilder.js +56 -0
  104. package/dist/esm/lib/transaction.d.ts +42 -0
  105. package/dist/esm/lib/transaction.js +408 -0
  106. package/dist/esm/lib/transactionBuilder.d.ts +74 -0
  107. package/dist/esm/lib/transactionBuilder.js +145 -0
  108. package/dist/esm/lib/transactionBuilderFactory.d.ts +32 -0
  109. package/dist/esm/lib/transactionBuilderFactory.js +96 -0
  110. package/dist/esm/lib/transactionExplanation.d.ts +14 -0
  111. package/dist/{src → esm}/lib/transactionExplanation.js +1 -2
  112. package/dist/esm/lib/transferBuilder.d.ts +9 -0
  113. package/dist/esm/lib/transferBuilder.js +17 -0
  114. package/dist/esm/lib/utils.d.ts +41 -0
  115. package/dist/esm/lib/utils.js +151 -0
  116. package/dist/esm/register.d.ts +3 -0
  117. package/dist/esm/register.js +11 -0
  118. package/dist/esm/ton.d.ts +59 -0
  119. package/dist/{src → esm}/ton.d.ts.map +1 -1
  120. package/dist/esm/ton.js +480 -0
  121. package/dist/esm/tton.d.ts +22 -0
  122. package/dist/esm/tton.js +26 -0
  123. package/package.json +27 -10
  124. package/dist/src/jettonToken.js +0 -52
  125. package/dist/src/lib/constants.js +0 -12
  126. package/dist/src/lib/explainTransactionWasm.d.ts.map +0 -1
  127. package/dist/src/lib/explainTransactionWasm.js +0 -61
  128. package/dist/src/lib/keyPair.js +0 -103
  129. package/dist/src/lib/singleNominatorWithdrawBuilder.js +0 -38
  130. package/dist/src/lib/tokenTransaction.js +0 -97
  131. package/dist/src/lib/tokenTransferBuilder.js +0 -57
  132. package/dist/src/lib/tonWhalesDepositBuilder.js +0 -42
  133. package/dist/src/lib/tonWhalesVestingDepositBuilder.js +0 -37
  134. package/dist/src/lib/tonWhalesVestingWithdrawBuilder.js +0 -37
  135. package/dist/src/lib/tonWhalesWithdrawalBuilder.js +0 -60
  136. package/dist/src/lib/transaction.js +0 -415
  137. package/dist/src/lib/transactionBuilder.js +0 -152
  138. package/dist/src/lib/transactionBuilderFactory.js +0 -100
  139. package/dist/src/lib/transferBuilder.js +0 -21
  140. package/dist/src/lib/utils.js +0 -159
  141. package/dist/src/register.js +0 -15
  142. package/dist/src/ton.js +0 -525
  143. package/dist/src/tton.js +0 -30
  144. package/dist/test/resources/ton.d.ts.map +0 -1
  145. package/dist/test/resources/ton.js +0 -208
  146. package/dist/test/unit/explainTransactionWasm.d.ts.map +0 -1
  147. package/dist/test/unit/explainTransactionWasm.js +0 -147
  148. package/dist/test/unit/jettonToken.d.ts.map +0 -1
  149. package/dist/test/unit/jettonToken.js +0 -341
  150. package/dist/test/unit/keyPair.js +0 -55
  151. package/dist/test/unit/singleNominatorWithdrawBuilder.d.ts.map +0 -1
  152. package/dist/test/unit/singleNominatorWithdrawBuilder.js +0 -314
  153. package/dist/test/unit/tokenTransferBuilder.d.ts.map +0 -1
  154. package/dist/test/unit/tokenTransferBuilder.js +0 -262
  155. package/dist/test/unit/ton.js +0 -752
  156. package/dist/test/unit/tonWhalesDepositBuilder.d.ts.map +0 -1
  157. package/dist/test/unit/tonWhalesDepositBuilder.js +0 -114
  158. package/dist/test/unit/tonWhalesVestingDepositBuilder.d.ts.map +0 -1
  159. package/dist/test/unit/tonWhalesVestingDepositBuilder.js +0 -136
  160. package/dist/test/unit/tonWhalesVestingWithdrawBuilder.d.ts.map +0 -1
  161. package/dist/test/unit/tonWhalesVestingWithdrawBuilder.js +0 -136
  162. package/dist/test/unit/tonWhalesWithdrawalBuilder.d.ts.map +0 -1
  163. package/dist/test/unit/tonWhalesWithdrawalBuilder.js +0 -130
  164. package/dist/test/unit/transferBuilder.d.ts.map +0 -1
  165. package/dist/test/unit/transferBuilder.js +0 -281
  166. package/dist/test/unit/wasmCrossCompatibility.d.ts.map +0 -1
  167. package/dist/test/unit/wasmCrossCompatibility.js +0 -176
  168. package/dist/tsconfig.tsbuildinfo +0 -1
  169. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  170. /package/dist/{src → cjs/src}/jettonToken.d.ts +0 -0
  171. /package/dist/{src → cjs/src}/lib/constants.d.ts +0 -0
  172. /package/dist/{src → cjs/src}/lib/iface.d.ts +0 -0
  173. /package/dist/{src → cjs/src}/lib/index.d.ts +0 -0
  174. /package/dist/{src → cjs/src}/lib/keyPair.d.ts +0 -0
  175. /package/dist/{src → cjs/src}/lib/singleNominatorWithdrawBuilder.d.ts +0 -0
  176. /package/dist/{src → cjs/src}/lib/tokenTransaction.d.ts +0 -0
  177. /package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +0 -0
  178. /package/dist/{src → cjs/src}/lib/tonWhalesDepositBuilder.d.ts +0 -0
  179. /package/dist/{src → cjs/src}/lib/tonWhalesVestingDepositBuilder.d.ts +0 -0
  180. /package/dist/{src → cjs/src}/lib/tonWhalesVestingWithdrawBuilder.d.ts +0 -0
  181. /package/dist/{src → cjs/src}/lib/tonWhalesWithdrawalBuilder.d.ts +0 -0
  182. /package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -0
  183. /package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +0 -0
  184. /package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +0 -0
  185. /package/dist/{src → cjs/src}/lib/transactionExplanation.d.ts +0 -0
  186. /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
  187. /package/dist/{src → cjs/src}/lib/utils.d.ts +0 -0
  188. /package/dist/{src → cjs/src}/register.d.ts +0 -0
  189. /package/dist/{src → cjs/src}/ton.d.ts +0 -0
  190. /package/dist/{src → cjs/src}/tton.d.ts +0 -0
  191. /package/dist/{test → cjs/test}/resources/ton.d.ts +0 -0
  192. /package/dist/{test → cjs/test}/unit/explainTransactionWasm.d.ts +0 -0
  193. /package/dist/{test → cjs/test}/unit/jettonToken.d.ts +0 -0
  194. /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
  195. /package/dist/{test → cjs/test}/unit/singleNominatorWithdrawBuilder.d.ts +0 -0
  196. /package/dist/{test → cjs/test}/unit/tokenTransferBuilder.d.ts +0 -0
  197. /package/dist/{test → cjs/test}/unit/ton.d.ts +0 -0
  198. /package/dist/{test → cjs/test}/unit/tonWhalesDepositBuilder.d.ts +0 -0
  199. /package/dist/{test → cjs/test}/unit/tonWhalesVestingDepositBuilder.d.ts +0 -0
  200. /package/dist/{test → cjs/test}/unit/tonWhalesVestingWithdrawBuilder.d.ts +0 -0
  201. /package/dist/{test → cjs/test}/unit/tonWhalesWithdrawalBuilder.d.ts +0 -0
  202. /package/dist/{test → cjs/test}/unit/transferBuilder.d.ts +0 -0
  203. /package/dist/{test → cjs/test}/unit/wasmCrossCompatibility.d.ts +0 -0
  204. /package/dist/{src → esm}/index.d.ts.map +0 -0
  205. /package/dist/{src → esm}/jettonToken.d.ts.map +0 -0
  206. /package/dist/{src → esm}/lib/constants.d.ts.map +0 -0
  207. /package/dist/{src → esm}/lib/iface.d.ts.map +0 -0
  208. /package/dist/{src → esm}/lib/index.d.ts.map +0 -0
  209. /package/dist/{src → esm}/lib/keyPair.d.ts.map +0 -0
  210. /package/dist/{src → esm}/lib/singleNominatorWithdrawBuilder.d.ts.map +0 -0
  211. /package/dist/{src → esm}/lib/tokenTransaction.d.ts.map +0 -0
  212. /package/dist/{src → esm}/lib/tokenTransferBuilder.d.ts.map +0 -0
  213. /package/dist/{src → esm}/lib/tonWhalesDepositBuilder.d.ts.map +0 -0
  214. /package/dist/{src → esm}/lib/tonWhalesVestingDepositBuilder.d.ts.map +0 -0
  215. /package/dist/{src → esm}/lib/tonWhalesVestingWithdrawBuilder.d.ts.map +0 -0
  216. /package/dist/{src → esm}/lib/tonWhalesWithdrawalBuilder.d.ts.map +0 -0
  217. /package/dist/{src → esm}/lib/transaction.d.ts.map +0 -0
  218. /package/dist/{src → esm}/lib/transactionBuilder.d.ts.map +0 -0
  219. /package/dist/{src → esm}/lib/transactionBuilderFactory.d.ts.map +0 -0
  220. /package/dist/{src → esm}/lib/transactionExplanation.d.ts.map +0 -0
  221. /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
  222. /package/dist/{src → esm}/lib/utils.d.ts.map +0 -0
  223. /package/dist/{src → esm}/register.d.ts.map +0 -0
  224. /package/dist/{src → esm}/tton.d.ts.map +0 -0
@@ -1,262 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const should_1 = __importDefault(require("should"));
40
- const tonweb_1 = __importDefault(require("tonweb"));
41
- const sdk_core_1 = require("@bitgo/sdk-core");
42
- const statics_1 = require("@bitgo/statics");
43
- const src_1 = require("../../src");
44
- const testData = __importStar(require("../resources/ton"));
45
- const utils = __importStar(require("../../src/lib/utils"));
46
- describe('Ton Token Transfer Builder', () => {
47
- const tokenName = 'tton:ukwny-us';
48
- const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get(tokenName));
49
- it('should build a unsigned transfer tx', async function () {
50
- const txId = testData.signedTokenSendTransaction.txId.replace(/\//g, '_').replace(/\+/g, '-');
51
- const txBuilder = factory.getTokenTransferBuilder();
52
- txBuilder.sender(testData.tokenSender.address);
53
- txBuilder.sequenceNumber(0);
54
- txBuilder.publicKey(testData.tokenSender.publicKey);
55
- txBuilder.expireTime(testData.tokenSender.expireTime);
56
- txBuilder.send(testData.tokenRecipients[0]);
57
- txBuilder.setSenderJettonWalletAddress(testData.tokenSender.jettonAddress);
58
- txBuilder.setTonAmount(testData.tokenSender.tonAmount); // amount of TON to send to the sender's jetton wallet
59
- txBuilder.setForwardTonAmount(testData.tokenSender.forwardTonAmount); // amount of TON to cover forward fees in case of notify transfer
60
- txBuilder.setMessage(testData.tokenSender.message);
61
- const tx = await txBuilder.build();
62
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.SendToken);
63
- should_1.default.equal(tx.toJson().bounceable, false);
64
- tx.inputs.length.should.equal(1);
65
- tx.inputs[0].should.deepEqual({
66
- address: testData.tokenSender.address,
67
- value: testData.tokenRecipients[0].amount,
68
- coin: tokenName,
69
- });
70
- tx.outputs.length.should.equal(1);
71
- tx.outputs[0].should.deepEqual({
72
- address: testData.tokenRecipients[0].address,
73
- value: testData.tokenRecipients[0].amount,
74
- coin: tokenName,
75
- });
76
- tx.id.should.equal(txId);
77
- const rawTx = tx.toBroadcastFormat();
78
- rawTx.should.equal(testData.signedTokenSendTransaction.tx);
79
- });
80
- it('should build a unsigned transfer tx with bounceable flag', async function () {
81
- const txId = testData.signedTokenSendTransaction.txIdBounceable.replace(/\//g, '_').replace(/\+/g, '-');
82
- const txBuilder = factory.getTokenTransferBuilder();
83
- txBuilder.sender(testData.tokenSender.address);
84
- txBuilder.sequenceNumber(0);
85
- txBuilder.publicKey(testData.tokenSender.publicKey);
86
- txBuilder.expireTime(testData.tokenSender.expireTime);
87
- txBuilder.send(testData.tokenRecipients[0]);
88
- txBuilder.setSenderJettonWalletAddress(testData.tokenSender.jettonAddress);
89
- txBuilder.setTonAmount(testData.tokenSender.tonAmount); // amount of TON to send to the sender's jetton wallet
90
- txBuilder.setForwardTonAmount(testData.tokenSender.forwardTonAmount); // amount of TON to cover forward fees in case of notify transfer
91
- txBuilder.setMessage(testData.tokenSender.message);
92
- txBuilder.bounceable(true);
93
- const tx = await txBuilder.build();
94
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.SendToken);
95
- should_1.default.equal(tx.toJson().bounceable, true);
96
- tx.inputs.length.should.equal(1);
97
- tx.inputs[0].should.deepEqual({
98
- address: testData.tokenSender.address,
99
- value: testData.tokenRecipients[0].amount,
100
- coin: tokenName,
101
- });
102
- tx.outputs.length.should.equal(1);
103
- tx.outputs[0].should.deepEqual({
104
- address: testData.tokenRecipients[0].address,
105
- value: testData.tokenRecipients[0].amount,
106
- coin: tokenName,
107
- });
108
- tx.id.should.equal(txId);
109
- const rawTx = tx.toBroadcastFormat();
110
- rawTx.should.equal(testData.signedTokenSendTransaction.txBounceable);
111
- });
112
- it('should build a send from rawTx', async function () {
113
- const txBuilder = factory.from(testData.signedTokenSendTransaction.tx);
114
- const builtTx = await txBuilder.build();
115
- const jsonTx = builtTx.toJson();
116
- should_1.default.equal(builtTx.type, sdk_core_1.TransactionType.SendToken);
117
- should_1.default.equal(builtTx.signablePayload.toString('base64'), testData.signedTokenSendTransaction.signable);
118
- should_1.default.equal(builtTx.id, testData.signedTokenSendTransaction.txId);
119
- const builder2 = factory.from(builtTx.toBroadcastFormat());
120
- const builtTx2 = await builder2.build();
121
- should_1.default.equal(builtTx2.type, sdk_core_1.TransactionType.SendToken);
122
- should_1.default.equal(builtTx.toBroadcastFormat(), testData.signedTokenSendTransaction.tx);
123
- builtTx.inputs.length.should.equal(1);
124
- builtTx.outputs.length.should.equal(1);
125
- jsonTx.sender.should.equal('EQCqQzfyg0cZ-8t9v2YoHmFFxG5jgjvQRTZ2yeDjO5z5ZRy9');
126
- jsonTx.destination.should.equal('EQB-CM6DF-jpq9XVdiSdefAMU5KC1gpZuYBFp-Q65aUhnx5K');
127
- jsonTx.amount.should.equal(testData.tokenRecipients[0].amount);
128
- jsonTx.seqno.should.equal(0);
129
- jsonTx.expirationTime.should.equal(testData.tokenSender.expireTime);
130
- const builtTx3 = await txBuilder.bounceable(true).fromAddressBounceable(false).toAddressBounceable(false).build();
131
- txBuilder.from(testData.signedTokenSendTransaction.txBounceable);
132
- const jsonTx3 = builtTx3.toJson();
133
- should_1.default.equal(jsonTx3.bounceable, true);
134
- should_1.default.equal(builtTx3.signablePayload.toString('base64'), testData.signedTokenSendTransaction.bounceableSignable);
135
- should_1.default.equal(builtTx3.id, testData.signedTokenSendTransaction.txIdBounceable);
136
- should_1.default.equal(builtTx3.toBroadcastFormat(), testData.signedTokenSendTransaction.txBounceable);
137
- jsonTx3.sender.should.equal(testData.tokenSender.address);
138
- jsonTx3.destination.should.equal(testData.tokenRecipients[0].address);
139
- jsonTx3.amount.should.equal(testData.tokenRecipients[0].amount);
140
- jsonTx3.seqno.should.equal(0);
141
- jsonTx3.expirationTime.should.equal(testData.tokenSender.expireTime);
142
- });
143
- it('should parse a raw transaction and set flags', async function () {
144
- const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get(tokenName));
145
- const txBuilder = factory.from(testData.signedTokenSendTransaction.tx);
146
- const txBuilderBounceable = factory.from(testData.signedTokenSendTransaction.txBounceable);
147
- const tx = await txBuilder.build();
148
- const txBounceable = await txBuilderBounceable.build();
149
- tx.toJson().bounceable.should.equal(false);
150
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.SendToken);
151
- txBounceable.toJson().bounceable.should.equal(true);
152
- should_1.default.equal(txBounceable.type, sdk_core_1.TransactionType.SendToken);
153
- });
154
- xit('should build a signed transfer tx and submit onchain', async function () {
155
- const tonweb = new tonweb_1.default(new tonweb_1.default.HttpProvider('https://testnet.toncenter.com/api/v2/jsonRPC'));
156
- const keyPair = new src_1.KeyPair({ prv: testData.privateKeys.prvKey6 });
157
- const publicKey = keyPair.getKeys().pub;
158
- const address = await utils.default.getAddressFromPublicKey(publicKey);
159
- const txBuilder = factory.getTokenTransferBuilder();
160
- txBuilder.sender(address);
161
- const WalletClass = tonweb.wallet.all['v4R2'];
162
- const wallet = new WalletClass(tonweb.provider, {
163
- publicKey: tonweb.utils.hexToBytes(publicKey),
164
- wc: 0,
165
- });
166
- const seqno = await wallet.methods.seqno().call();
167
- txBuilder.sequenceNumber(seqno);
168
- txBuilder.publicKey(publicKey);
169
- const expireAt = Math.floor(Date.now() / 1e3) + 60 * 60 * 24 * 7; // 7 days
170
- txBuilder.expireTime(expireAt);
171
- txBuilder.send({
172
- address: testData.tokenRecipients[0].address,
173
- amount: '1000000000',
174
- });
175
- txBuilder.setSenderJettonWalletAddress(testData.tokenSender.jettonAddress);
176
- txBuilder.setTonAmount('500000000'); // amount of TON to send to the sender's jetton wallet
177
- txBuilder.setForwardTonAmount('100000000'); // amount of TON to cover forward fees in case of notify transfer
178
- txBuilder.setMessage('test');
179
- const tx = await txBuilder.build();
180
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.SendToken);
181
- const signable = tx.signablePayload;
182
- const signature = keyPair.signMessageinUint8Array(signable);
183
- const signedTx = await txBuilder.build();
184
- const builder2 = factory.from(signedTx.toBroadcastFormat());
185
- builder2.addSignature(keyPair.getKeys(), Buffer.from(signature));
186
- const tx2 = await builder2.build();
187
- const signature2 = keyPair.signMessageinUint8Array(tx2.signablePayload);
188
- should_1.default.equal(Buffer.from(signature).toString('hex'), Buffer.from(signature2).toString('hex'));
189
- await new Promise((resolve) => setTimeout(resolve, 2000));
190
- try {
191
- const result = await tonweb.provider.sendBoc(tx2.toBroadcastFormat());
192
- console.log('Network Response:', result);
193
- }
194
- catch (error) {
195
- console.error('Error Response:', error);
196
- }
197
- });
198
- it('should build a signed transfer tx using add signature', async function () {
199
- const keyPair = new src_1.KeyPair({ prv: testData.privateKeys.prvKey6 });
200
- const publicKey = keyPair.getKeys().pub;
201
- const address = await utils.default.getAddressFromPublicKey(publicKey);
202
- const txBuilder = factory.getTokenTransferBuilder();
203
- txBuilder.sender(address);
204
- txBuilder.sequenceNumber(0);
205
- txBuilder.publicKey(publicKey);
206
- const expireAt = Math.floor(Date.now() / 1e3) + 60 * 60 * 24 * 7;
207
- txBuilder.expireTime(expireAt);
208
- txBuilder.send(testData.tokenRecipients[0]);
209
- txBuilder.setSenderJettonWalletAddress(testData.tokenSender.jettonAddress);
210
- txBuilder.setTonAmount(testData.tokenSender.tonAmount); // amount of TON to send to the sender's jetton wallet
211
- txBuilder.setForwardTonAmount(testData.tokenSender.forwardTonAmount); // amount of TON to cover forward fees in case of notify transfer
212
- txBuilder.setMessage(testData.tokenSender.message);
213
- const tx = await txBuilder.build();
214
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.SendToken);
215
- const signable = tx.signablePayload;
216
- const signature = keyPair.signMessageinUint8Array(signable);
217
- txBuilder.addSignature(keyPair.getKeys(), Buffer.from(signature));
218
- const signedTx = await txBuilder.build();
219
- const builder2 = factory.from(signedTx.toBroadcastFormat());
220
- const tx2 = await builder2.build();
221
- const signature2 = keyPair.signMessageinUint8Array(tx2.signablePayload);
222
- should_1.default.equal(Buffer.from(signature).toString('hex'), Buffer.from(signature2).toString('hex'));
223
- should_1.default.equal(tx.toBroadcastFormat(), tx2.toBroadcastFormat());
224
- });
225
- it('should build transfer tx for non-bounceable address', async function () {
226
- const txBuilder = factory.getTokenTransferBuilder();
227
- txBuilder.sender(testData.tokenSender.address);
228
- txBuilder.sequenceNumber(0);
229
- txBuilder.publicKey(testData.tokenSender.publicKey);
230
- txBuilder.expireTime(testData.tokenSender.expireTime);
231
- const address = 'EQAWzEKcdnykvXfUNouqdS62tvrp32bCxuKS6eQrS6ISgcLo';
232
- const otherFormat = 'UQAWzEKcdnykvXfUNouqdS62tvrp32bCxuKS6eQrS6ISgZ8t';
233
- const amount = testData.tokenRecipients[0].amount;
234
- txBuilder.send({ address, amount });
235
- txBuilder.setSenderJettonWalletAddress(testData.tokenSender.jettonAddress);
236
- txBuilder.setTonAmount(testData.tokenSender.tonAmount); // amount of TON to send to the sender's jetton wallet
237
- txBuilder.setForwardTonAmount(testData.tokenSender.forwardTonAmount); // amount of TON to cover forward fees in case of notify transfer
238
- txBuilder.setMessage(testData.tokenSender.message);
239
- const tx = await txBuilder.build();
240
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.SendToken);
241
- tx.inputs.length.should.equal(1);
242
- tx.inputs[0].should.deepEqual({
243
- address: testData.tokenSender.address,
244
- value: amount,
245
- coin: tokenName,
246
- });
247
- tx.outputs.length.should.equal(1);
248
- tx.outputs[0].should.deepEqual({
249
- address,
250
- value: amount,
251
- coin: tokenName,
252
- });
253
- const txJson = tx.toJson();
254
- txJson.destination.should.equal(address);
255
- txJson.destinationAlias.should.equal(otherFormat);
256
- const builder2 = factory.from(tx.toBroadcastFormat());
257
- const tx2 = await builder2.build();
258
- const txJson2 = tx2.toJson();
259
- txJson2.destinationAlias.should.equal(otherFormat);
260
- });
261
- });
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdG9rZW5UcmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLDhDQUFrRDtBQUNsRCw0Q0FBdUM7QUFDdkMsbUNBQStEO0FBQy9ELDJEQUE2QztBQUM3QywyREFBNkM7QUFFN0MsUUFBUSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtJQUMxQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUM7SUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFcEUsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEtBQUs7UUFDN0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDcEQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFD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QztRQUNuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCBUb25XZWIgZnJvbSAndG9ud2ViJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3Rvbic7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcblxuZGVzY3JpYmUoJ1RvbiBUb2tlbiBUcmFuc2ZlciBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCB0b2tlbk5hbWUgPSAndHRvbjp1a3dueS11cyc7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodG9rZW5OYW1lKSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHVuc2lnbmVkIHRyYW5zZmVyIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SWQgPSB0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eElkLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoL1xcKy9nLCAnLScpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLnRva2VuU2VuZGVyLmFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5zZXF1ZW5jZU51bWJlcigwKTtcbiAgICB0eEJ1aWxkZXIucHVibGljS2V5KHRlc3REYXRhLnRva2VuU2VuZGVyLnB1YmxpY0tleSk7XG4gICAgdHhCdWlsZGVyLmV4cGlyZVRpbWUodGVzdERhdGEudG9rZW5TZW5kZXIuZXhwaXJlVGltZSk7XG4gICAgdHhCdWlsZGVyLnNlbmQodGVzdERhdGEudG9rZW5SZWNpcGllbnRzWzBdKTtcbiAgICB0eEJ1aWxkZXIuc2V0U2VuZGVySmV0dG9uV2FsbGV0QWRkcmVzcyh0ZXN0RGF0YS50b2tlblNlbmRlci5qZXR0b25BZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuc2V0VG9uQW1vdW50KHRlc3REYXRhLnRva2VuU2VuZGVyLnRvbkFtb3VudCk7IC8vIGFtb3VudCBvZiBUT04gdG8gc2VuZCB0byB0aGUgc2VuZGVyJ3MgamV0dG9uIHdhbGxldFxuICAgIHR4QnVpbGRlci5zZXRGb3J3YXJkVG9uQW1vdW50KHRlc3REYXRhLnRva2VuU2VuZGVyLmZvcndhcmRUb25BbW91bnQpOyAvLyBhbW91bnQgb2YgVE9OIHRvIGNvdmVyIGZvcndhcmQgZmVlcyBpbiBjYXNlIG9mIG5vdGlmeSB0cmFuc2ZlclxuICAgIHR4QnVpbGRlci5zZXRNZXNzYWdlKHRlc3REYXRhLnRva2VuU2VuZGVyLm1lc3NhZ2UpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW4pO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS5ib3VuY2VhYmxlLCBmYWxzZSk7XG4gICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogdGVzdERhdGEudG9rZW5TZW5kZXIuYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0ZXN0RGF0YS50b2tlblJlY2lwaWVudHNbMF0uYW1vdW50LFxuICAgICAgY29pbjogdG9rZW5OYW1lLFxuICAgIH0pO1xuICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogdGVzdERhdGEudG9rZW5SZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGVzdERhdGEudG9rZW5SZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgIGNvaW46IHRva2VuTmFtZSxcbiAgICB9KTtcbiAgICB0eC5pZC5zaG91bGQuZXF1YWwodHhJZCk7XG4gICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHJhd1R4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSB1bnNpZ25lZCB0cmFuc2ZlciB0eCB3aXRoIGJvdW5jZWFibGUgZmxhZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eElkID0gdGVzdERhdGEuc2lnbmVkVG9rZW5TZW5kVHJhbnNhY3Rpb24udHhJZEJvdW5jZWFibGUucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvXFwrL2csICctJyk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEudG9rZW5TZW5kZXIuYWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnNlcXVlbmNlTnVtYmVyKDApO1xuICAgIHR4QnVpbGRlci5wdWJsaWNLZXkodGVzdERhdGEudG9rZW5TZW5kZXIucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIuZXhwaXJlVGltZSh0ZXN0RGF0YS50b2tlblNlbmRlci5leHBpcmVUaW1lKTtcbiAgICB0eEJ1aWxkZXIuc2VuZCh0ZXN0RGF0YS50b2tlblJlY2lwaWVudHNbMF0pO1xuICAgIHR4QnVpbGRlci5zZXRTZW5kZXJKZXR0b25XYWxsZXRBZGRyZXNzKHRlc3REYXRhLnRva2VuU2VuZGVyLmpldHRvbkFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5zZXRUb25BbW91bnQodGVzdERhdGEudG9rZW5TZW5kZXIudG9uQW1vdW50KTsgLy8gYW1vdW50IG9mIFRPTiB0byBzZW5kIHRvIHRoZSBzZW5kZXIncyBqZXR0b24gd2FsbGV0XG4gICAgdHhCdWlsZGVyLnNldEZvcndhcmRUb25BbW91bnQodGVzdERhdGEudG9rZW5TZW5kZXIuZm9yd2FyZFRvbkFtb3VudCk7IC8vIGFtb3VudCBvZiBUT04gdG8gY292ZXIgZm9yd2FyZCBmZWVzIGluIGNhc2Ugb2Ygbm90aWZ5IHRyYW5zZmVyXG4gICAgdHhCdWlsZGVyLnNldE1lc3NhZ2UodGVzdERhdGEudG9rZW5TZW5kZXIubWVzc2FnZSk7XG4gICAgdHhCdWlsZGVyLmJvdW5jZWFibGUodHJ1ZSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuYm91bmNlYWJsZSwgdHJ1ZSk7XG4gICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogdGVzdERhdGEudG9rZW5TZW5kZXIuYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0ZXN0RGF0YS50b2tlblJlY2lwaWVudHNbMF0uYW1vdW50LFxuICAgICAgY29pbjogdG9rZW5OYW1lLFxuICAgIH0pO1xuICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogdGVzdERhdGEudG9rZW5SZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGVzdERhdGEudG9rZW5SZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgIGNvaW46IHRva2VuTmFtZSxcbiAgICB9KTtcbiAgICB0eC5pZC5zaG91bGQuZXF1YWwodHhJZCk7XG4gICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHJhd1R4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eEJvdW5jZWFibGUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2VuZCBmcm9tIHJhd1R4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eCk7XG4gICAgY29uc3QgYnVpbHRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IGpzb25UeCA9IGJ1aWx0VHgudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmRUb2tlbik7XG5cbiAgICBzaG91bGQuZXF1YWwoYnVpbHRUeC5zaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2Jhc2U2NCcpLCB0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi5zaWduYWJsZSk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHguaWQsIHRlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uLnR4SWQpO1xuICAgIGNvbnN0IGJ1aWxkZXIyID0gZmFjdG9yeS5mcm9tKGJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgY29uc3QgYnVpbHRUeDIgPSBhd2FpdCBidWlsZGVyMi5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbChidWlsdFR4Mi50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuKTtcbiAgICBzaG91bGQuZXF1YWwoYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eCk7XG4gICAgYnVpbHRUeC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBidWlsdFR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBqc29uVHguc2VuZGVyLnNob3VsZC5lcXVhbCgnRVFDcVF6ZnlnMGNaLTh0OXYyWW9IbUZGeEc1amdqdlFSVFoyeWVEak81ejVaUnk5Jyk7XG4gICAganNvblR4LmRlc3RpbmF0aW9uLnNob3VsZC5lcXVhbCgnRVFCLUNNNkRGLWpwcTlYVmRpU2RlZkFNVTVLQzFncFp1WUJGcC1RNjVhVWhueDVLJyk7XG4gICAganNvblR4LmFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEudG9rZW5SZWNpcGllbnRzWzBdLmFtb3VudCk7XG4gICAganNvblR4LnNlcW5vLnNob3VsZC5lcXVhbCgwKTtcbiAgICBqc29uVHguZXhwaXJhdGlvblRpbWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRva2VuU2VuZGVyLmV4cGlyZVRpbWUpO1xuXG4gICAgY29uc3QgYnVpbHRUeDMgPSBhd2FpdCB0eEJ1aWxkZXIuYm91bmNlYWJsZSh0cnVlKS5mcm9tQWRkcmVzc0JvdW5jZWFibGUoZmFsc2UpLnRvQWRkcmVzc0JvdW5jZWFibGUoZmFsc2UpLmJ1aWxkKCk7XG4gICAgdHhCdWlsZGVyLmZyb20odGVzdERhdGEuc2lnbmVkVG9rZW5TZW5kVHJhbnNhY3Rpb24udHhCb3VuY2VhYmxlKTtcbiAgICBjb25zdCBqc29uVHgzID0gYnVpbHRUeDMudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKGpzb25UeDMuYm91bmNlYWJsZSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHgzLnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnYmFzZTY0JyksIHRlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uLmJvdW5jZWFibGVTaWduYWJsZSk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHgzLmlkLCB0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eElkQm91bmNlYWJsZSk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHgzLnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uLnR4Qm91bmNlYWJsZSk7XG4gICAganNvblR4My5zZW5kZXIuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRva2VuU2VuZGVyLmFkZHJlc3MpO1xuICAgIGpzb25UeDMuZGVzdGluYXRpb24uc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRva2VuUmVjaXBpZW50c1swXS5hZGRyZXNzKTtcbiAgICBqc29uVHgzLmFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEudG9rZW5SZWNpcGllbnRzWzBdLmFtb3VudCk7XG4gICAganNvblR4My5zZXFuby5zaG91bGQuZXF1YWwoMCk7XG4gICAganNvblR4My5leHBpcmF0aW9uVGltZS5zaG91bGQuZXF1YWwodGVzdERhdGEudG9rZW5TZW5kZXIuZXhwaXJlVGltZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFyc2UgYSByYXcgdHJhbnNhY3Rpb24gYW5kIHNldCBmbGFncycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRva2VuTmFtZSkpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eCk7XG4gICAgY29uc3QgdHhCdWlsZGVyQm91bmNlYWJsZSA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eEJvdW5jZWFibGUpO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEJvdW5jZWFibGUgPSBhd2FpdCB0eEJ1aWxkZXJCb3VuY2VhYmxlLmJ1aWxkKCk7XG4gICAgdHgudG9Kc29uKCkuYm91bmNlYWJsZS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuKTtcbiAgICB0eEJvdW5jZWFibGUudG9Kc29uKCkuYm91bmNlYWJsZS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKHR4Qm91bmNlYWJsZS50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuKTtcbiAgfSk7XG5cbiAgeGl0KCdzaG91bGQgYnVpbGQgYSBzaWduZWQgdHJhbnNmZXIgdHggYW5kIHN1Ym1pdCBvbmNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRvbndlYiA9IG5ldyBUb25XZWIobmV3IFRvbldlYi5IdHRwUHJvdmlkZXIoJ2h0dHBzOi8vdGVzdG5ldC50b25jZW50ZXIuY29tL2FwaS92Mi9qc29uUlBDJykpO1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEucHJpdmF0ZUtleXMucHJ2S2V5NiB9KTtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wdWI7XG4gICAgY29uc3QgYWRkcmVzcyA9IGF3YWl0IHV0aWxzLmRlZmF1bHQuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLnNlbmRlcihhZGRyZXNzKTtcblxuICAgIGNvbnN0IFdhbGxldENsYXNzID0gdG9ud2ViLndhbGxldC5hbGxbJ3Y0UjInXTtcbiAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0Q2xhc3ModG9ud2ViLnByb3ZpZGVyLCB7XG4gICAgICBwdWJsaWNLZXk6IHRvbndlYi51dGlscy5oZXhUb0J5dGVzKHB1YmxpY0tleSksXG4gICAgICB3YzogMCxcbiAgICB9KTtcbiAgICBjb25zdCBzZXFubyA9IGF3YWl0IHdhbGxldC5tZXRob2RzLnNlcW5vKCkuY2FsbCgpO1xuICAgIHR4QnVpbGRlci5zZXF1ZW5jZU51bWJlcihzZXFubyBhcyBudW1iZXIpO1xuICAgIHR4QnVpbGRlci5wdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICBjb25zdCBleHBpcmVBdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDFlMykgKyA2MCAqIDYwICogMjQgKiA3OyAvLyA3IGRheXNcbiAgICB0eEJ1aWxkZXIuZXhwaXJlVGltZShleHBpcmVBdCk7XG4gICAgdHhCdWlsZGVyLnNlbmQoe1xuICAgICAgYWRkcmVzczogdGVzdERhdGEudG9rZW5SZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuc2V0U2VuZGVySmV0dG9uV2FsbGV0QWRkcmVzcyh0ZXN0RGF0YS50b2tlblNlbmRlci5qZXR0b25BZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuc2V0VG9uQW1vdW50KCc1MDAwMDAwMDAnKTsgLy8gYW1vdW50IG9mIFRPTiB0byBzZW5kIHRvIHRoZSBzZW5kZXIncyBqZXR0b24gd2FsbGV0XG4gICAgdHhCdWlsZGVyLnNldEZvcndhcmRUb25BbW91bnQoJzEwMDAwMDAwMCcpOyAvLyBhbW91bnQgb2YgVE9OIHRvIGNvdmVyIGZvcndhcmQgZmVlcyBpbiBjYXNlIG9mIG5vdGlmeSB0cmFuc2ZlclxuICAgIHR4QnVpbGRlci5zZXRNZXNzYWdlKCd0ZXN0Jyk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuKTtcbiAgICBjb25zdCBzaWduYWJsZSA9IHR4LnNpZ25hYmxlUGF5bG9hZDtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBrZXlQYWlyLnNpZ25NZXNzYWdlaW5VaW50OEFycmF5KHNpZ25hYmxlKTtcbiAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgY29uc3QgYnVpbGRlcjIgPSBmYWN0b3J5LmZyb20oc2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgYnVpbGRlcjIuYWRkU2lnbmF0dXJlKGtleVBhaXIuZ2V0S2V5cygpLCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgICBjb25zdCB0eDIgPSBhd2FpdCBidWlsZGVyMi5idWlsZCgpO1xuICAgIGNvbnN0IHNpZ25hdHVyZTIgPSBrZXlQYWlyLnNpZ25NZXNzYWdlaW5VaW50OEFycmF5KHR4Mi5zaWduYWJsZVBheWxvYWQpO1xuICAgIHNob3VsZC5lcXVhbChCdWZmZXIuZnJvbShzaWduYXR1cmUpLnRvU3RyaW5nKCdoZXgnKSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlMikudG9TdHJpbmcoJ2hleCcpKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDAwKSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdG9ud2ViLnByb3ZpZGVyLnNlbmRCb2ModHgyLnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgY29uc29sZS5sb2coJ05ldHdvcmsgUmVzcG9uc2U6JywgcmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgUmVzcG9uc2U6JywgZXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCB0cmFuc2ZlciB0eCB1c2luZyBhZGQgc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEucHJpdmF0ZUtleXMucHJ2S2V5NiB9KTtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wdWI7XG4gICAgY29uc3QgYWRkcmVzcyA9IGF3YWl0IHV0aWxzLmRlZmF1bHQuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLnNlbmRlcihhZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2VOdW1iZXIoMCk7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleShwdWJsaWNLZXkpO1xuICAgIGNvbnN0IGV4cGlyZUF0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMWUzKSArIDYwICogNjAgKiAyNCAqIDc7XG4gICAgdHhCdWlsZGVyLmV4cGlyZVRpbWUoZXhwaXJlQXQpO1xuICAgIHR4QnVpbGRlci5zZW5kKHRlc3REYXRhLnRva2VuUmVjaXBpZW50c1swXSk7XG4gICAgdHhCdWlsZGVyLnNldFNlbmRlckpldHRvbldhbGxldEFkZHJlc3ModGVzdERhdGEudG9rZW5TZW5kZXIuamV0dG9uQWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnNldFRvbkFtb3VudCh0ZXN0RGF0YS50b2tlblNlbmRlci50b25BbW91bnQpOyAvLyBhbW91bnQgb2YgVE9OIHRvIHNlbmQgdG8gdGhlIHNlbmRlcidzIGpldHRvbiB3YWxsZXRcbiAgICB0eEJ1aWxkZXIuc2V0Rm9yd2FyZFRvbkFtb3VudCh0ZXN0RGF0YS50b2tlblNlbmRlci5mb3J3YXJkVG9uQW1vdW50KTsgLy8gYW1vdW50IG9mIFRPTiB0byBjb3ZlciBmb3J3YXJkIGZlZXMgaW4gY2FzZSBvZiBub3RpZnkgdHJhbnNmZXJcbiAgICB0eEJ1aWxkZXIuc2V0TWVzc2FnZSh0ZXN0RGF0YS50b2tlblNlbmRlci5tZXNzYWdlKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW4pO1xuICAgIGNvbnN0IHNpZ25hYmxlID0gdHguc2lnbmFibGVQYXlsb2FkO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGtleVBhaXIuc2lnbk1lc3NhZ2VpblVpbnQ4QXJyYXkoc2lnbmFibGUpO1xuXG4gICAgdHhCdWlsZGVyLmFkZFNpZ25hdHVyZShrZXlQYWlyLmdldEtleXMoKSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlKSk7XG4gICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBidWlsZGVyMiA9IGZhY3RvcnkuZnJvbShzaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICBjb25zdCB0eDIgPSBhd2FpdCBidWlsZGVyMi5idWlsZCgpO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlMiA9IGtleVBhaXIuc2lnbk1lc3NhZ2VpblVpbnQ4QXJyYXkodHgyLnNpZ25hYmxlUGF5bG9hZCk7XG4gICAgc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkudG9TdHJpbmcoJ2hleCcpLCBCdWZmZXIuZnJvbShzaWduYXR1cmUyKS50b1N0cmluZygnaGV4JykpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgdHJhbnNmZXIgdHggZm9yIG5vbi1ib3VuY2VhYmxlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEudG9rZW5TZW5kZXIuYWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnNlcXVlbmNlTnVtYmVyKDApO1xuICAgIHR4QnVpbGRlci5wdWJsaWNLZXkodGVzdERhdGEudG9rZW5TZW5kZXIucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIuZXhwaXJlVGltZSh0ZXN0RGF0YS50b2tlblNlbmRlci5leHBpcmVUaW1lKTtcbiAgICBjb25zdCBhZGRyZXNzID0gJ0VRQVd6RUtjZG55a3ZYZlVOb3VxZFM2MnR2cnAzMmJDeHVLUzZlUXJTNklTZ2NMbyc7XG4gICAgY29uc3Qgb3RoZXJGb3JtYXQgPSAnVVFBV3pFS2NkbnlrdlhmVU5vdXFkUzYydHZycDMyYkN4dUtTNmVRclM2SVNnWjh0JztcbiAgICBjb25zdCBhbW91bnQgPSB0ZXN0RGF0YS50b2tlblJlY2lwaWVudHNbMF0uYW1vdW50O1xuICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzcywgYW1vdW50IH0pO1xuXG4gICAgdHhCdWlsZGVyLnNldFNlbmRlckpldHRvbldhbGxldEFkZHJlc3ModGVzdERhdGEudG9rZW5TZW5kZXIuamV0dG9uQWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnNldFRvbkFtb3VudCh0ZXN0RGF0YS50b2tlblNlbmRlci50b25BbW91bnQpOyAvLyBhbW91bnQgb2YgVE9OIHRvIHNlbmQgdG8gdGhlIHNlbmRlcidzIGpldHRvbiB3YWxsZXRcbiAgICB0eEJ1aWxkZXIuc2V0Rm9yd2FyZFRvbkFtb3VudCh0ZXN0RGF0YS50b2tlblNlbmRlci5mb3J3YXJkVG9uQW1vdW50KTsgLy8gYW1vdW50IG9mIFRPTiB0byBjb3ZlciBmb3J3YXJkIGZlZXMgaW4gY2FzZSBvZiBub3RpZnkgdHJhbnNmZXJcbiAgICB0eEJ1aWxkZXIuc2V0TWVzc2FnZSh0ZXN0RGF0YS50b2tlblNlbmRlci5tZXNzYWdlKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW4pO1xuICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnRva2VuU2VuZGVyLmFkZHJlc3MsXG4gICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgY29pbjogdG9rZW5OYW1lLFxuICAgIH0pO1xuICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzcyxcbiAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICBjb2luOiB0b2tlbk5hbWUsXG4gICAgfSk7XG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgdHhKc29uLmRlc3RpbmF0aW9uLnNob3VsZC5lcXVhbChhZGRyZXNzKTtcbiAgICB0eEpzb24uZGVzdGluYXRpb25BbGlhcy5zaG91bGQuZXF1YWwob3RoZXJGb3JtYXQpO1xuXG4gICAgY29uc3QgYnVpbGRlcjIgPSBmYWN0b3J5LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgY29uc3QgdHgyID0gYXdhaXQgYnVpbGRlcjIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEpzb24yID0gdHgyLnRvSnNvbigpO1xuICAgIHR4SnNvbjIuZGVzdGluYXRpb25BbGlhcy5zaG91bGQuZXF1YWwob3RoZXJGb3JtYXQpO1xuICB9KTtcbn0pO1xuIl19