@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
@@ -0,0 +1,314 @@
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 sdk_core_1 = require("@bitgo/sdk-core");
41
+ const transactionBuilderFactory_1 = require("../../src/lib/transactionBuilderFactory");
42
+ const statics_1 = require("@bitgo/statics");
43
+ const testData = __importStar(require("../resources/ton"));
44
+ const keyPair_1 = require("../../src/lib/keyPair");
45
+ const utils = __importStar(require("../../src/lib/utils"));
46
+ const tonweb_1 = __importDefault(require("tonweb"));
47
+ describe('Ton Single Nominator Withdraw Builder', () => {
48
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('tton'));
49
+ const singleNominatorWithdrawAmount = '932178112330000';
50
+ it('should build a unsigned withdraw tx', async function () {
51
+ const txId = 'n1rr-QL61WZ7UJN7ESH2iPQO7toTy9WLqXoSIG1JtXg='.replace(/\//g, '_').replace(/\+/g, '-');
52
+ const txBuilder = factory.getSingleNominatorWithdrawBuilder();
53
+ txBuilder.sender(testData.sender.address);
54
+ txBuilder.sequenceNumber(0);
55
+ txBuilder.publicKey(testData.sender.publicKey);
56
+ txBuilder.expireTime(1234567890);
57
+ txBuilder.send(testData.recipients[0]);
58
+ txBuilder.setWithdrawAmount(singleNominatorWithdrawAmount);
59
+ txBuilder.setWithdrawMessage();
60
+ const tx = await txBuilder.build();
61
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
62
+ should_1.default.equal(tx.toJson().bounceable, false);
63
+ should_1.default.equal(tx.toJson().withdrawAmount, singleNominatorWithdrawAmount);
64
+ tx.inputs.length.should.equal(1);
65
+ tx.inputs[0].should.deepEqual({
66
+ address: testData.sender.address,
67
+ value: testData.recipients[0].amount,
68
+ coin: 'tton',
69
+ });
70
+ tx.outputs.length.should.equal(1);
71
+ tx.outputs[0].should.deepEqual({
72
+ address: testData.recipients[0].address,
73
+ value: testData.recipients[0].amount,
74
+ coin: 'tton',
75
+ });
76
+ tx.id.should.equal(txId);
77
+ const rawTx = tx.toBroadcastFormat();
78
+ factory.from(rawTx);
79
+ rawTx.should.equal('te6cckECGAEAA8MAAuGIADZN0H0n1tz6xkYgWqJSRmkURKYajjEgXeawBo9cifPIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmpoxdJlgLSAAAAAAADgEXAgE0AhYBFP8A9KQT9LzyyAsDAgEgBBECAUgFCALm0AHQ0wMhcbCSXwTgItdJwSCSXwTgAtMfIYIQcGx1Z70ighBkc3RyvbCSXwXgA/pAMCD6RAHIygfL/8nQ7UTQgQFA1yH0BDBcgQEI9ApvoTGzkl8H4AXTP8glghBwbHVnupI4MOMNA4IQZHN0crqSXwbjDQYHAHgB+gD0BDD4J28iMFAKoSG+8uBQghBwbHVngx6xcIAYUATLBSbPFlj6Ahn0AMtpF8sfUmDLPyDJgED7AAYAilAEgQEI9Fkw7UTQgQFA1yDIAc8W9ADJ7VQBcrCOI4IQZHN0coMesXCAGFAFywVQA88WI/oCE8tqyx/LP8mAQPsAkl8D4gIBIAkQAgEgCg8CAVgLDAA9sp37UTQgQFA1yH0BDACyMoHy//J0AGBAQj0Cm+hMYAIBIA0OABmtznaiaEAga5Drhf/AABmvHfaiaEAQa5DrhY/AABG4yX7UTQ1wsfgAWb0kK29qJoQICga5D6AhhHDUCAhHpJN9KZEM5pA+n/mDeBKAG3gQFImHFZ8xhAT48oMI1xgg0x/TH9MfAvgju/Jk7UTQ0x/TH9P/9ATRUUO68qFRUbryogX5AVQQZPkQ8qP4ACSkyMsfUkDLH1Iwy/9SEPQAye1U+A8B0wchwACfbFGTINdKltMH1AL7AOgw4CHAAeMAIcAC4wABwAORMOMNA6TIyx8Syx/L/xITFBUAbtIH+gDU1CL5AAXIygcVy//J0Hd0gBjIywXLAiLPFlAF+gIUy2sSzMzJc/sAyEAUgQEI9FHypwIAcIEBCNcY+gDTP8hUIEeBAQj0UfKnghBub3RlcHSAGMjLBcsCUAbPFlAE+gIUy2oSyx/LP8lz+wACAGyBAQjXGPoA0z8wUiSBAQj0WfKnghBkc3RycHSAGMjLBcsCUAXPFlAD+gITy2rLHxLLP8lz+wAACvQAye1UAFEAAAAAKamjF8DDudwJkyEh7jUbJEjFCjriVxsSlRJFyF872V1eegb4QACPQgAaRefBOjTi/hwqDjv+7I6nGj9WEAe3ls/rFuBEQvggr6A613oAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAHA0/PoUC5EIEyWuPg==');
80
+ });
81
+ it('should build a unsigned withdraw tx with bounceable flag', async function () {
82
+ const txId = 'YS3RFHZx_SKyanFNjGlvtDmx6I02deAQUJUSyVP9rag='.replace(/\//g, '_').replace(/\+/g, '-');
83
+ const txBuilder = factory.getSingleNominatorWithdrawBuilder();
84
+ txBuilder.sender(testData.sender.address);
85
+ txBuilder.sequenceNumber(0);
86
+ txBuilder.publicKey(testData.sender.publicKey);
87
+ txBuilder.expireTime(1234567890);
88
+ txBuilder.send(testData.recipients[0]);
89
+ txBuilder.setWithdrawAmount(singleNominatorWithdrawAmount);
90
+ txBuilder.setWithdrawMessage();
91
+ txBuilder.bounceable(true);
92
+ const tx = await txBuilder.build();
93
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
94
+ should_1.default.equal(tx.toJson().bounceable, true);
95
+ should_1.default.equal(tx.toJson().withdrawAmount, singleNominatorWithdrawAmount);
96
+ tx.inputs.length.should.equal(1);
97
+ tx.inputs[0].should.deepEqual({
98
+ address: testData.sender.address,
99
+ value: testData.recipients[0].amount,
100
+ coin: 'tton',
101
+ });
102
+ tx.outputs.length.should.equal(1);
103
+ tx.outputs[0].should.deepEqual({
104
+ address: testData.recipients[0].address,
105
+ value: testData.recipients[0].amount,
106
+ coin: 'tton',
107
+ });
108
+ tx.id.should.equal(txId);
109
+ const rawTx = tx.toBroadcastFormat();
110
+ rawTx.should.equal('te6cckECGAEAA8MAAuGIADZN0H0n1tz6xkYgWqJSRmkURKYajjEgXeawBo9cifPIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmpoxdJlgLSAAAAAAADgEXAgE0AhYBFP8A9KQT9LzyyAsDAgEgBBECAUgFCALm0AHQ0wMhcbCSXwTgItdJwSCSXwTgAtMfIYIQcGx1Z70ighBkc3RyvbCSXwXgA/pAMCD6RAHIygfL/8nQ7UTQgQFA1yH0BDBcgQEI9ApvoTGzkl8H4AXTP8glghBwbHVnupI4MOMNA4IQZHN0crqSXwbjDQYHAHgB+gD0BDD4J28iMFAKoSG+8uBQghBwbHVngx6xcIAYUATLBSbPFlj6Ahn0AMtpF8sfUmDLPyDJgED7AAYAilAEgQEI9Fkw7UTQgQFA1yDIAc8W9ADJ7VQBcrCOI4IQZHN0coMesXCAGFAFywVQA88WI/oCE8tqyx/LP8mAQPsAkl8D4gIBIAkQAgEgCg8CAVgLDAA9sp37UTQgQFA1yH0BDACyMoHy//J0AGBAQj0Cm+hMYAIBIA0OABmtznaiaEAga5Drhf/AABmvHfaiaEAQa5DrhY/AABG4yX7UTQ1wsfgAWb0kK29qJoQICga5D6AhhHDUCAhHpJN9KZEM5pA+n/mDeBKAG3gQFImHFZ8xhAT48oMI1xgg0x/TH9MfAvgju/Jk7UTQ0x/TH9P/9ATRUUO68qFRUbryogX5AVQQZPkQ8qP4ACSkyMsfUkDLH1Iwy/9SEPQAye1U+A8B0wchwACfbFGTINdKltMH1AL7AOgw4CHAAeMAIcAC4wABwAORMOMNA6TIyx8Syx/L/xITFBUAbtIH+gDU1CL5AAXIygcVy//J0Hd0gBjIywXLAiLPFlAF+gIUy2sSzMzJc/sAyEAUgQEI9FHypwIAcIEBCNcY+gDTP8hUIEeBAQj0UfKnghBub3RlcHSAGMjLBcsCUAbPFlAE+gIUy2oSyx/LP8lz+wACAGyBAQjXGPoA0z8wUiSBAQj0WfKnghBkc3RycHSAGMjLBcsCUAXPFlAD+gITy2rLHxLLP8lz+wAACvQAye1UAFEAAAAAKamjF8DDudwJkyEh7jUbJEjFCjriVxsSlRJFyF872V1eegb4QACPYgAaRefBOjTi/hwqDjv+7I6nGj9WEAe3ls/rFuBEQvggr6A613oAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAHA0/PoUC5EIBDddHQ==');
111
+ });
112
+ it('should build a withdraw from rawTx', async function () {
113
+ const txBuilder = factory.from(testData.signedSingleNominatorWithdrawTransaction.tx);
114
+ const builtTx = await txBuilder.build();
115
+ const jsonTx = builtTx.toJson();
116
+ should_1.default.equal(builtTx.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
117
+ should_1.default.equal(builtTx.signablePayload.toString('base64'), testData.signedSingleNominatorWithdrawTransaction.signable);
118
+ should_1.default.equal(builtTx.id, testData.signedSingleNominatorWithdrawTransaction.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.SingleNominatorWithdraw);
122
+ should_1.default.equal(builtTx.toBroadcastFormat(), testData.signedSingleNominatorWithdrawTransaction.tx);
123
+ builtTx.inputs.length.should.equal(1);
124
+ builtTx.outputs.length.should.equal(1);
125
+ jsonTx.sender.should.equal('EQAbJug-k-tufWMjEC1RKSM0iiJTDUcYkC7zWANHrkT55Fol');
126
+ jsonTx.destination.should.equal('EQA0i8-CdGnF_DhUHHf92R1ONH6sIA9vLZ_WLcCIhfBBXwtG');
127
+ jsonTx.amount.should.equal('123400000');
128
+ jsonTx.seqno.should.equal(0);
129
+ jsonTx.expirationTime.should.equal(1234567890);
130
+ jsonTx.withdrawAmount.should.equal(singleNominatorWithdrawAmount);
131
+ const builtTx3 = await txBuilder.bounceable(false).fromAddressBounceable(false).toAddressBounceable(false).build();
132
+ txBuilder.from(testData.signedSingleNominatorWithdrawTransaction.tx);
133
+ const jsonTx3 = builtTx3.toJson();
134
+ should_1.default.equal(jsonTx3.bounceable, false);
135
+ should_1.default.equal(builtTx3.signablePayload.toString('base64'), testData.signedSingleNominatorWithdrawTransaction.bounceableSignable);
136
+ should_1.default.equal(builtTx3.id, testData.signedSingleNominatorWithdrawTransaction.txIdBounceable);
137
+ should_1.default.equal(builtTx3.toBroadcastFormat(), testData.signedSingleNominatorWithdrawTransaction.tx);
138
+ jsonTx3.sender.should.equal('UQAbJug-k-tufWMjEC1RKSM0iiJTDUcYkC7zWANHrkT55Afg');
139
+ jsonTx3.destination.should.equal('UQA0i8-CdGnF_DhUHHf92R1ONH6sIA9vLZ_WLcCIhfBBX1aD');
140
+ jsonTx3.amount.should.equal('123400000');
141
+ jsonTx3.seqno.should.equal(0);
142
+ jsonTx3.expirationTime.should.equal(1234567890);
143
+ jsonTx.withdrawAmount.should.equal(singleNominatorWithdrawAmount);
144
+ });
145
+ it('should parse a raw transaction and set flags', async function () {
146
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('tton'));
147
+ const txBuilder = factory.from(testData.signedSingleNominatorWithdrawTransaction.tx);
148
+ const txBuilderBounceable = factory.from(testData.signedSingleNominatorWithdrawTransaction.txBounceable);
149
+ const tx = await txBuilder.build();
150
+ const txBounceable = await txBuilderBounceable.build();
151
+ tx.toJson().bounceable.should.equal(false);
152
+ should_1.default.equal(tx.toJson().withdrawAmount, singleNominatorWithdrawAmount);
153
+ txBounceable.toJson().bounceable.should.equal(true);
154
+ should_1.default.equal(txBounceable.toJson().withdrawAmount, singleNominatorWithdrawAmount);
155
+ });
156
+ it('should build a full withdrawal tx using setFullWithdrawalMessage', async function () {
157
+ const txBuilder = factory.getSingleNominatorWithdrawBuilder();
158
+ txBuilder.sender(testData.sender.address);
159
+ txBuilder.sequenceNumber(0);
160
+ txBuilder.publicKey(testData.sender.publicKey);
161
+ txBuilder.expireTime(1234567890);
162
+ txBuilder.send(testData.recipients[0]);
163
+ txBuilder.setFullWithdrawalMessage();
164
+ const tx = await txBuilder.build();
165
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
166
+ should_1.default.equal(tx.toJson().bounceable, false);
167
+ should_1.default.equal(tx.toJson().withdrawAmount, undefined);
168
+ tx.inputs.length.should.equal(1);
169
+ tx.inputs[0].should.deepEqual({
170
+ address: testData.sender.address,
171
+ value: testData.recipients[0].amount,
172
+ coin: 'tton',
173
+ });
174
+ tx.outputs.length.should.equal(1);
175
+ tx.outputs[0].should.deepEqual({
176
+ address: testData.recipients[0].address,
177
+ value: testData.recipients[0].amount,
178
+ coin: 'tton',
179
+ });
180
+ const rawTx = tx.toBroadcastFormat();
181
+ // Verify the raw transaction can be parsed back as a full withdrawal
182
+ // Full withdrawal is inferred by: transactionType === SingleNominatorWithdraw && !withdrawAmount
183
+ const txBuilder2 = factory.from(rawTx);
184
+ const tx2 = await txBuilder2.build();
185
+ should_1.default.equal(tx2.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
186
+ should_1.default.equal(tx2.toJson().withdrawAmount, undefined);
187
+ should_1.default.equal(tx2.toBroadcastFormat(), rawTx);
188
+ });
189
+ it('should build a signed full withdrawal tx using add signature', async function () {
190
+ const keyPair = new keyPair_1.KeyPair({ prv: testData.privateKeys.prvKey1 });
191
+ const publicKey = keyPair.getKeys().pub;
192
+ const address = await utils.default.getAddressFromPublicKey(publicKey);
193
+ const txBuilder = factory.getSingleNominatorWithdrawBuilder();
194
+ txBuilder.sender(address);
195
+ txBuilder.sequenceNumber(0);
196
+ txBuilder.publicKey(publicKey);
197
+ const expireAt = Math.floor(Date.now() / 1e3) + 60 * 60 * 24 * 7;
198
+ txBuilder.expireTime(expireAt);
199
+ txBuilder.send(testData.recipients[0]);
200
+ txBuilder.setFullWithdrawalMessage();
201
+ const tx = await txBuilder.build();
202
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
203
+ should_1.default.equal(tx.toJson().withdrawAmount, undefined);
204
+ const signable = tx.signablePayload;
205
+ const signature = keyPair.signMessageinUint8Array(signable);
206
+ txBuilder.addSignature(keyPair.getKeys(), Buffer.from(signature));
207
+ const signedTx = await txBuilder.build();
208
+ const builder2 = factory.from(signedTx.toBroadcastFormat());
209
+ const tx2 = await builder2.build();
210
+ const signature2 = keyPair.signMessageinUint8Array(tx2.signablePayload);
211
+ should_1.default.equal(Buffer.from(signature).toString('hex'), Buffer.from(signature2).toString('hex'));
212
+ should_1.default.equal(tx.toBroadcastFormat(), tx2.toBroadcastFormat());
213
+ should_1.default.equal(tx2.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
214
+ should_1.default.equal(tx2.toJson().withdrawAmount, undefined);
215
+ });
216
+ xit('should build a signed withdraw tx and submit onchain', async function () {
217
+ const tonweb = new tonweb_1.default(new tonweb_1.default.HttpProvider('https://testnet.toncenter.com/api/v2/jsonRPC'));
218
+ const keyPair = new keyPair_1.KeyPair({ prv: testData.privateKeys.prvKey1 });
219
+ const publicKey = keyPair.getKeys().pub;
220
+ const address = await utils.default.getAddressFromPublicKey(publicKey);
221
+ const txBuilder = factory.getSingleNominatorWithdrawBuilder();
222
+ txBuilder.sender(address);
223
+ const WalletClass = tonweb.wallet.all['v4R2'];
224
+ const wallet = new WalletClass(tonweb.provider, {
225
+ publicKey: tonweb.utils.hexToBytes(publicKey),
226
+ wc: 0,
227
+ });
228
+ const seqno = await wallet.methods.seqno().call();
229
+ txBuilder.sequenceNumber(seqno);
230
+ txBuilder.publicKey(publicKey);
231
+ const expireAt = Math.floor(Date.now() / 1e3) + 60 * 60 * 24 * 7; // 7 days
232
+ txBuilder.expireTime(expireAt);
233
+ txBuilder.send({
234
+ address: 'kf9vYg5iDMPiOpv9ypv9_B7pwYee4wjcQ0SHLpN9V65YF_Ig',
235
+ amount: '100000000',
236
+ });
237
+ txBuilder.setWithdrawAmount('1');
238
+ txBuilder.setWithdrawMessage();
239
+ const tx = await txBuilder.build();
240
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
241
+ const signable = tx.signablePayload;
242
+ const signature = keyPair.signMessageinUint8Array(signable);
243
+ const signedTx = await txBuilder.build();
244
+ const builder2 = factory.from(signedTx.toBroadcastFormat());
245
+ builder2.addSignature(keyPair.getKeys(), Buffer.from(signature));
246
+ const tx2 = await builder2.build();
247
+ const signature2 = keyPair.signMessageinUint8Array(tx2.signablePayload);
248
+ should_1.default.equal(Buffer.from(signature).toString('hex'), Buffer.from(signature2).toString('hex'));
249
+ await new Promise((resolve) => setTimeout(resolve, 2000));
250
+ const result = await tonweb.provider.sendBoc(tx2.toBroadcastFormat());
251
+ console.log(result);
252
+ });
253
+ it('should build a signed withdraw tx using add signature', async function () {
254
+ const keyPair = new keyPair_1.KeyPair({ prv: testData.privateKeys.prvKey1 });
255
+ const publicKey = keyPair.getKeys().pub;
256
+ const address = await utils.default.getAddressFromPublicKey(publicKey);
257
+ const txBuilder = factory.getSingleNominatorWithdrawBuilder();
258
+ txBuilder.sender(address);
259
+ txBuilder.sequenceNumber(0);
260
+ txBuilder.publicKey(publicKey);
261
+ const expireAt = Math.floor(Date.now() / 1e3) + 60 * 60 * 24 * 7;
262
+ txBuilder.expireTime(expireAt);
263
+ txBuilder.send(testData.recipients[0]);
264
+ txBuilder.setWithdrawAmount('1');
265
+ txBuilder.setWithdrawMessage();
266
+ const tx = await txBuilder.build();
267
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
268
+ const signable = tx.signablePayload;
269
+ const signature = keyPair.signMessageinUint8Array(signable);
270
+ txBuilder.addSignature(keyPair.getKeys(), Buffer.from(signature));
271
+ const signedTx = await txBuilder.build();
272
+ const builder2 = factory.from(signedTx.toBroadcastFormat());
273
+ const tx2 = await builder2.build();
274
+ const signature2 = keyPair.signMessageinUint8Array(tx2.signablePayload);
275
+ should_1.default.equal(Buffer.from(signature).toString('hex'), Buffer.from(signature2).toString('hex'));
276
+ should_1.default.equal(tx.toBroadcastFormat(), tx2.toBroadcastFormat());
277
+ });
278
+ it('should build withdraw tx for non-bounceable address', async function () {
279
+ const txBuilder = factory.getSingleNominatorWithdrawBuilder();
280
+ txBuilder.sender(testData.sender.address);
281
+ txBuilder.sequenceNumber(0);
282
+ txBuilder.publicKey(testData.sender.publicKey);
283
+ txBuilder.expireTime(1234567890);
284
+ const address = 'EQAWzEKcdnykvXfUNouqdS62tvrp32bCxuKS6eQrS6ISgcLo';
285
+ const otherFormat = 'UQAWzEKcdnykvXfUNouqdS62tvrp32bCxuKS6eQrS6ISgZ8t';
286
+ const amount = '100000000';
287
+ txBuilder.send({ address, amount });
288
+ txBuilder.setWithdrawAmount(singleNominatorWithdrawAmount);
289
+ txBuilder.setWithdrawMessage();
290
+ const tx = await txBuilder.build();
291
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.SingleNominatorWithdraw);
292
+ tx.inputs.length.should.equal(1);
293
+ tx.inputs[0].should.deepEqual({
294
+ address: testData.sender.address,
295
+ value: amount,
296
+ coin: 'tton',
297
+ });
298
+ tx.outputs.length.should.equal(1);
299
+ tx.outputs[0].should.deepEqual({
300
+ address,
301
+ value: amount,
302
+ coin: 'tton',
303
+ });
304
+ const txJson = tx.toJson();
305
+ txJson.destination.should.equal(address);
306
+ should_1.default.equal(tx.toJson().withdrawAmount, singleNominatorWithdrawAmount);
307
+ const builder2 = factory.from(tx.toBroadcastFormat());
308
+ const tx2 = await builder2.build();
309
+ const txJson2 = tx2.toJson();
310
+ txJson2.destinationAlias.should.equal(otherFormat);
311
+ should_1.default.equal(tx.toJson().withdrawAmount, singleNominatorWithdrawAmount);
312
+ });
313
+ });
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlTm9taW5hdG9yV2l0aGRyYXdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3NpbmdsZU5vbWluYXRvcldpdGhkcmF3QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBa0Q7QUFDbEQsdUZBQW9GO0FBQ3BGLDRDQUF1QztBQUN2QywyREFBNkM7QUFDN0MsbURBQWdEO0FBQ2hELDJEQUE2QztBQUM3QyxvREFBNEI7QUFFNUIsUUFBUSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtJQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHFEQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLDZCQUE2QixHQUFHLGlCQUFpQixDQUFDO0lBQ3hELEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLO1FBQzdDLE1BQU0sSUFBSSxHQUFHLDhDQUE4QyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztRQUM5RCxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxTQUFTLENBQUMsaUJBQWlCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUMzRCxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMvRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUN4RSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUM1QixPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQ2hDLEtBQUssRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDcEMsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUM3QixPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3ZDLEtBQUssRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDcEMsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDaEIsOHhDQUE4eEMsQ0FDL3hDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLO1FBQ2xFLE1BQU0sSUFBSSxHQUFHLDhDQUE4QyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztRQUM5RCxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxTQUFTLENBQUMsaUJBQWlCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUMzRCxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQixTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsMEJBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQy9ELGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3hFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQzVCLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU87WUFDaEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNwQyxJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQzdCLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDdkMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNwQyxJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDaEIsOHhDQUE4eEMsQ0FDL3hDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLO1FBQzVDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNwRSxnQkFBTSxDQUFDLEtBQUssQ0FDVixPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFDMUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLFFBQVEsQ0FDM0QsQ0FBQztRQUNGLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNyRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLENBQUMsd0NBQXdDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuSCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxnQkFBTSxDQUFDLEtBQUssQ0FDVixRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFDM0MsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLGtCQUFrQixDQUNyRSxDQUFDO1FBQ0YsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsd0NBQXdDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUs7UUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxxREFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckYsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV6RyxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFlBQVksR0FBRyxNQUFNLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZELEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsY0FBYyxFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDeEUsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELGdCQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztJQUNwRixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxLQUFLO1FBQzFFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBQzlELFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsMEJBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQy9ELGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwRCxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUM1QixPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQ2hDLEtBQUssRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDcEMsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUM3QixPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3ZDLEtBQUssRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDcEMsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxxRUFBcUU7UUFDckUsaUdBQWlHO1FBQ2pHLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxHQUFHLEdBQUcsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxLQUFLO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFDOUQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsU0FBUyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDckMsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDL0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwRCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQzlELGdCQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsMEJBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2hFLGdCQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsc0RBQXNELEVBQUUsS0FBSztRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGdCQUFNLENBQUMsSUFBSSxnQkFBTSxDQUFDLFlBQVksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDLENBQUM7UUFDbkcsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztRQUM5RCxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDOUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUM3QyxFQUFFLEVBQUUsQ0FBQztTQUNOLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQzFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUMzRSxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDYixPQUFPLEVBQUUsa0RBQWtEO1lBQzNELE1BQU0sRUFBRSxXQUFXO1NBQ3BCLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMvRCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDNUQsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsS0FBSztRQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBQzlELFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRSxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMvRCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUs7UUFDN0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFDOUQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsa0RBQWtELENBQUM7UUFDbkUsTUFBTSxXQUFXLEdBQUcsa0RBQWtELENBQUM7UUFDdkUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUMzRCxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMvRCxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUM1QixPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQ2hDLEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUM3QixPQUFPO1lBQ1AsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUN0RCxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO0lBQzFFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy90b24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYy9saWIva2V5UGFpcic7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCBUb25XZWIgZnJvbSAndG9ud2ViJztcblxuZGVzY3JpYmUoJ1RvbiBTaW5nbGUgTm9taW5hdG9yIFdpdGhkcmF3IEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3R0b24nKSk7XG4gIGNvbnN0IHNpbmdsZU5vbWluYXRvcldpdGhkcmF3QW1vdW50ID0gJzkzMjE3ODExMjMzMDAwMCc7XG4gIGl0KCdzaG91bGQgYnVpbGQgYSB1bnNpZ25lZCB3aXRoZHJhdyB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eElkID0gJ24xcnItUUw2MVdaN1VKTjdFU0gyaVBRTzd0b1R5OVdMcVhvU0lHMUp0WGc9Jy5yZXBsYWNlKC9cXC8vZywgJ18nKS5yZXBsYWNlKC9cXCsvZywgJy0nKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFNpbmdsZU5vbWluYXRvcldpdGhkcmF3QnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuc2VuZGVyLmFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5zZXF1ZW5jZU51bWJlcigwKTtcbiAgICB0eEJ1aWxkZXIucHVibGljS2V5KHRlc3REYXRhLnNlbmRlci5wdWJsaWNLZXkpO1xuICAgIHR4QnVpbGRlci5leHBpcmVUaW1lKDEyMzQ1Njc4OTApO1xuICAgIHR4QnVpbGRlci5zZW5kKHRlc3REYXRhLnJlY2lwaWVudHNbMF0pO1xuICAgIHR4QnVpbGRlci5zZXRXaXRoZHJhd0Ftb3VudChzaW5nbGVOb21pbmF0b3JXaXRoZHJhd0Ftb3VudCk7XG4gICAgdHhCdWlsZGVyLnNldFdpdGhkcmF3TWVzc2FnZSgpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVOb21pbmF0b3JXaXRoZHJhdyk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLmJvdW5jZWFibGUsIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkud2l0aGRyYXdBbW91bnQsIHNpbmdsZU5vbWluYXRvcldpdGhkcmF3QW1vdW50KTtcbiAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgIGNvaW46ICd0dG9uJyxcbiAgICB9KTtcbiAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnJlY2lwaWVudHNbMF0uYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgIGNvaW46ICd0dG9uJyxcbiAgICB9KTtcbiAgICB0eC5pZC5zaG91bGQuZXF1YWwodHhJZCk7XG4gICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIGZhY3RvcnkuZnJvbShyYXdUeCk7XG4gICAgcmF3VHguc2hvdWxkLmVxdWFsKFxuICAgICAgJ3RlNmNja0VDR0FFQUE4TUFBdUdJQURaTjBIMG4xdHo2eGtZZ1dxSlNSbWtVUktZYWpqRWdYZWF3Qm85Y2lmUElHQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNtcG94ZEpsZ0xTQUFBQUFBQURnRVhBZ0UwQWhZQkZQOEE5S1FUOUx6eXlBc0RBZ0VnQkJFQ0FVZ0ZDQUxtMEFIUTB3TWhjYkNTWHdUZ0l0ZEp3U0NTWHdUZ0F0TWZJWUlRY0d4MVo3MGlnaEJrYzNSeXZiQ1NYd1hnQS9wQU1DRDZSQUhJeWdmTC84blE3VVRRZ1FGQTF5SDBCREJjZ1FFSTlBcHZvVEd6a2w4SDRBWFRQOGdsZ2hCd2JIVm51cEk0TU9NTkE0SVFaSE4wY3JxU1h3YmpEUVlIQUhnQitnRDBCREQ0SjI4aU1GQUtvU0crOHVCUWdoQndiSFZuZ3g2eGNJQVlVQVRMQlNiUEZsajZBaG4wQU10cEY4c2ZVbURMUHlESmdFRDdBQVlBaWxBRWdRRUk5Rmt3N1VUUWdRRkExeURJQWM4VzlBREo3VlFCY3JDT0k0SVFaSE4wY29NZXNYQ0FHRkFGeXdWUUE4OFdJL29DRTh0cXl4L0xQOG1BUVBzQWtsOEQ0Z0lCSUFrUUFnRWdDZzhDQVZnTERBQTlzcDM3VVRRZ1FGQTF5SDBCREFDeU1vSHkvL0owQUdCQVFqMENtK2hNWUFJQklBME9BQm10em5haWFFQWdhNURyaGYvQUFCbXZIZmFpYUVBUWE1RHJoWS9BQUJHNHlYN1VUUTF3c2ZnQVdiMGtLMjlxSm9RSUNnYTVENkFoaEhEVUNBaEhwSk45S1pFTTVwQStuL21EZUJLQUczZ1FGSW1IRlo4eGhBVDQ4b01JMXhnZzB4L1RIOU1mQXZnanUvSms3VVRRMHgvVEg5UC85QVRSVVVPNjhxRlJVYnJ5b2dYNUFWUVFaUGtROHFQNEFDU2t5TXNmVWtETEgxSXd5LzlTRVBRQXllMVUrQThCMHdjaHdBQ2ZiRkdUSU5kS2x0TUgxQUw3QU9ndzRDSEFBZU1BSWNBQzR3QUJ3QU9STU9NTkE2VEl5eDhTeXgvTC94SVRGQlVBYnRJSCtnRFUxQ0w1QUFYSXlnY1Z5Ly9KMEhkMGdCakl5d1hMQWlMUEZsQUYrZ0lVeTJzU3pNekpjL3NBeUVBVWdRRUk5Rkh5cHdJQWNJRUJDTmNZK2dEVFA4aFVJRWVCQVFqMFVmS25naEJ1YjNSbGNIU0FHTWpMQmNzQ1VBYlBGbEFFK2dJVXkyb1N5eC9MUDhseit3QUNBR3lCQVFqWEdQb0Ewejh3VWlTQkFRajBXZktuZ2hCa2MzUnljSFNBR01qTEJjc0NVQVhQRmxBRCtnSVR5MnJMSHhMTFA4bHord0FBQ3ZRQXllMVVBRkVBQUFBQUthbWpGOEREdWR3Smt5RWg3alViSkVqRkNqcmlWeHNTbFJKRnlGODcyVjFlZWdiNFFBQ1BRZ0FhUmVmQk9qVGkvaHdxRGp2KzdJNm5HajlXRUFlM2xzL3JGdUJFUXZnZ3I2QTYxM29BQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBSEEwL1BvVUM1RUlFeVd1UGc9PSdcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgdW5zaWduZWQgd2l0aGRyYXcgdHggd2l0aCBib3VuY2VhYmxlIGZsYWcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhJZCA9ICdZUzNSRkhaeF9TS3lhbkZOakdsdnREbXg2STAyZGVBUVVKVVN5VlA5cmFnPScucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvXFwrL2csICctJyk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd0J1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLnNlbmRlci5hZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2VOdW1iZXIoMCk7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleSh0ZXN0RGF0YS5zZW5kZXIucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIuZXhwaXJlVGltZSgxMjM0NTY3ODkwKTtcbiAgICB0eEJ1aWxkZXIuc2VuZCh0ZXN0RGF0YS5yZWNpcGllbnRzWzBdKTtcbiAgICB0eEJ1aWxkZXIuc2V0V2l0aGRyYXdBbW91bnQoc2luZ2xlTm9taW5hdG9yV2l0aGRyYXdBbW91bnQpO1xuICAgIHR4QnVpbGRlci5zZXRXaXRoZHJhd01lc3NhZ2UoKTtcbiAgICB0eEJ1aWxkZXIuYm91bmNlYWJsZSh0cnVlKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2luZ2xlTm9taW5hdG9yV2l0aGRyYXcpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS5ib3VuY2VhYmxlLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkud2l0aGRyYXdBbW91bnQsIHNpbmdsZU5vbWluYXRvcldpdGhkcmF3QW1vdW50KTtcbiAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgIGNvaW46ICd0dG9uJyxcbiAgICB9KTtcbiAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnJlY2lwaWVudHNbMF0uYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgIGNvaW46ICd0dG9uJyxcbiAgICB9KTtcbiAgICB0eC5pZC5zaG91bGQuZXF1YWwodHhJZCk7XG4gICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHJhd1R4LnNob3VsZC5lcXVhbChcbiAgICAgICd0ZTZjY2tFQ0dBRUFBOE1BQXVHSUFEWk4wSDBuMXR6NnhrWWdXcUpTUm1rVVJLWWFqakVnWGVhd0JvOWNpZlBJR0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDbXBveGRKbGdMU0FBQUFBQUFEZ0VYQWdFMEFoWUJGUDhBOUtRVDlMenl5QXNEQWdFZ0JCRUNBVWdGQ0FMbTBBSFEwd01oY2JDU1h3VGdJdGRKd1NDU1h3VGdBdE1mSVlJUWNHeDFaNzBpZ2hCa2MzUnl2YkNTWHdYZ0EvcEFNQ0Q2UkFISXlnZkwvOG5RN1VUUWdRRkExeUgwQkRCY2dRRUk5QXB2b1RHemtsOEg0QVhUUDhnbGdoQndiSFZudXBJNE1PTU5BNElRWkhOMGNycVNYd2JqRFFZSEFIZ0IrZ0QwQkRENEoyOGlNRkFLb1NHKzh1QlFnaEJ3YkhWbmd4NnhjSUFZVUFUTEJTYlBGbGo2QWhuMEFNdHBGOHNmVW1ETFB5REpnRUQ3QUFZQWlsQUVnUUVJOUZrdzdVVFFnUUZBMXlESUFjOFc5QURKN1ZRQmNyQ09JNElRWkhOMGNvTWVzWENBR0ZBRnl3VlFBODhXSS9vQ0U4dHF5eC9MUDhtQVFQc0FrbDhENGdJQklBa1FBZ0VnQ2c4Q0FWZ0xEQUE5c3AzN1VUUWdRRkExeUgwQkRBQ3lNb0h5Ly9KMEFHQkFRajBDbStoTVlBSUJJQTBPQUJtdHpuYWlhRUFnYTVEcmhmL0FBQm12SGZhaWFFQVFhNURyaFkvQUFCRzR5WDdVVFExd3NmZ0FXYjBrSzI5cUpvUUlDZ2E1RDZBaGhIRFVDQWhIcEpOOUtaRU01cEErbi9tRGVCS0FHM2dRRkltSEZaOHhoQVQ0OG9NSTF4Z2cweC9USDlNZkF2Z2p1L0prN1VUUTB4L1RIOVAvOUFUUlVVTzY4cUZSVWJyeW9nWDVBVlFRWlBrUThxUDRBQ1NreU1zZlVrRExIMUl3eS85U0VQUUF5ZTFVK0E4QjB3Y2h3QUNmYkZHVElOZEtsdE1IMUFMN0FPZ3c0Q0hBQWVNQUljQUM0d0FCd0FPUk1PTU5BNlRJeXg4U3l4L0wveElURkJVQWJ0SUgrZ0RVMUNMNUFBWEl5Z2NWeS8vSjBIZDBnQmpJeXdYTEFpTFBGbEFGK2dJVXkyc1N6TXpKYy9zQXlFQVVnUUVJOUZIeXB3SUFjSUVCQ05jWStnRFRQOGhVSUVlQkFRajBVZktuZ2hCdWIzUmxjSFNBR01qTEJjc0NVQWJQRmxBRStnSVV5Mm9TeXgvTFA4bHord0FDQUd5QkFRalhHUG9BMHo4d1VpU0JBUWowV2ZLbmdoQmtjM1J5Y0hTQUdNakxCY3NDVUFYUEZsQUQrZ0lUeTJyTEh4TExQOGx6K3dBQUN2UUF5ZTFVQUZFQUFBQUFLYW1qRjhERHVkd0preUVoN2pVYkpFakZDanJpVnhzU2xSSkZ5Rjg3MlYxZWVnYjRRQUNQWWdBYVJlZkJPalRpL2h3cURqdis3STZuR2o5V0VBZTNscy9yRnVCRVF2Z2dyNkE2MTNvQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUhBMC9Qb1VDNUVJQkRkZEhRPT0nXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHdpdGhkcmF3IGZyb20gcmF3VHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgpO1xuICAgIGNvbnN0IGJ1aWx0VHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBqc29uVHggPSBidWlsdFR4LnRvSnNvbigpO1xuICAgIHNob3VsZC5lcXVhbChidWlsdFR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVOb21pbmF0b3JXaXRoZHJhdyk7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgYnVpbHRUeC5zaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi5zaWduYWJsZVxuICAgICk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHguaWQsIHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHhJZCk7XG4gICAgY29uc3QgYnVpbGRlcjIgPSBmYWN0b3J5LmZyb20oYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICBjb25zdCBidWlsdFR4MiA9IGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHgyLnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVOb21pbmF0b3JXaXRoZHJhdyk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eCk7XG4gICAgYnVpbHRUeC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBidWlsdFR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBqc29uVHguc2VuZGVyLnNob3VsZC5lcXVhbCgnRVFBYkp1Zy1rLXR1ZldNakVDMVJLU00waWlKVERVY1lrQzd6V0FOSHJrVDU1Rm9sJyk7XG4gICAganNvblR4LmRlc3RpbmF0aW9uLnNob3VsZC5lcXVhbCgnRVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYd3RHJyk7XG4gICAganNvblR4LmFtb3VudC5zaG91bGQuZXF1YWwoJzEyMzQwMDAwMCcpO1xuICAgIGpzb25UeC5zZXFuby5zaG91bGQuZXF1YWwoMCk7XG4gICAganNvblR4LmV4cGlyYXRpb25UaW1lLnNob3VsZC5lcXVhbCgxMjM0NTY3ODkwKTtcbiAgICBqc29uVHgud2l0aGRyYXdBbW91bnQuc2hvdWxkLmVxdWFsKHNpbmdsZU5vbWluYXRvcldpdGhkcmF3QW1vdW50KTtcblxuICAgIGNvbnN0IGJ1aWx0VHgzID0gYXdhaXQgdHhCdWlsZGVyLmJvdW5jZWFibGUoZmFsc2UpLmZyb21BZGRyZXNzQm91bmNlYWJsZShmYWxzZSkudG9BZGRyZXNzQm91bmNlYWJsZShmYWxzZSkuYnVpbGQoKTtcbiAgICB0eEJ1aWxkZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4KTtcbiAgICBjb25zdCBqc29uVHgzID0gYnVpbHRUeDMudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKGpzb25UeDMuYm91bmNlYWJsZSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIGJ1aWx0VHgzLnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLmJvdW5jZWFibGVTaWduYWJsZVxuICAgICk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHgzLmlkLCB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4SWRCb3VuY2VhYmxlKTtcbiAgICBzaG91bGQuZXF1YWwoYnVpbHRUeDMudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eCk7XG4gICAganNvblR4My5zZW5kZXIuc2hvdWxkLmVxdWFsKCdVUUFiSnVnLWstdHVmV01qRUMxUktTTTBpaUpURFVjWWtDN3pXQU5IcmtUNTVBZmcnKTtcbiAgICBqc29uVHgzLmRlc3RpbmF0aW9uLnNob3VsZC5lcXVhbCgnVVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYMWFEJyk7XG4gICAganNvblR4My5hbW91bnQuc2hvdWxkLmVxdWFsKCcxMjM0MDAwMDAnKTtcbiAgICBqc29uVHgzLnNlcW5vLnNob3VsZC5lcXVhbCgwKTtcbiAgICBqc29uVHgzLmV4cGlyYXRpb25UaW1lLnNob3VsZC5lcXVhbCgxMjM0NTY3ODkwKTtcbiAgICBqc29uVHgud2l0aGRyYXdBbW91bnQuc2hvdWxkLmVxdWFsKHNpbmdsZU5vbWluYXRvcldpdGhkcmF3QW1vdW50KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXJzZSBhIHJhdyB0cmFuc2FjdGlvbiBhbmQgc2V0IGZsYWdzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3R0b24nKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgpO1xuICAgIGNvbnN0IHR4QnVpbGRlckJvdW5jZWFibGUgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eEJvdW5jZWFibGUpO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEJvdW5jZWFibGUgPSBhd2FpdCB0eEJ1aWxkZXJCb3VuY2VhYmxlLmJ1aWxkKCk7XG4gICAgdHgudG9Kc29uKCkuYm91bmNlYWJsZS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS53aXRoZHJhd0Ftb3VudCwgc2luZ2xlTm9taW5hdG9yV2l0aGRyYXdBbW91bnQpO1xuICAgIHR4Qm91bmNlYWJsZS50b0pzb24oKS5ib3VuY2VhYmxlLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwodHhCb3VuY2VhYmxlLnRvSnNvbigpLndpdGhkcmF3QW1vdW50LCBzaW5nbGVOb21pbmF0b3JXaXRoZHJhd0Ftb3VudCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSBmdWxsIHdpdGhkcmF3YWwgdHggdXNpbmcgc2V0RnVsbFdpdGhkcmF3YWxNZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U2luZ2xlTm9taW5hdG9yV2l0aGRyYXdCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnNlcXVlbmNlTnVtYmVyKDApO1xuICAgIHR4QnVpbGRlci5wdWJsaWNLZXkodGVzdERhdGEuc2VuZGVyLnB1YmxpY0tleSk7XG4gICAgdHhCdWlsZGVyLmV4cGlyZVRpbWUoMTIzNDU2Nzg5MCk7XG4gICAgdHhCdWlsZGVyLnNlbmQodGVzdERhdGEucmVjaXBpZW50c1swXSk7XG4gICAgdHhCdWlsZGVyLnNldEZ1bGxXaXRoZHJhd2FsTWVzc2FnZSgpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVOb21pbmF0b3JXaXRoZHJhdyk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLmJvdW5jZWFibGUsIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkud2l0aGRyYXdBbW91bnQsIHVuZGVmaW5lZCk7XG4gICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogdGVzdERhdGEuc2VuZGVyLmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGVzdERhdGEucmVjaXBpZW50c1swXS5hbW91bnQsXG4gICAgICBjb2luOiAndHRvbicsXG4gICAgfSk7XG4gICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGVzdERhdGEucmVjaXBpZW50c1swXS5hbW91bnQsXG4gICAgICBjb2luOiAndHRvbicsXG4gICAgfSk7XG4gICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIC8vIFZlcmlmeSB0aGUgcmF3IHRyYW5zYWN0aW9uIGNhbiBiZSBwYXJzZWQgYmFjayBhcyBhIGZ1bGwgd2l0aGRyYXdhbFxuICAgIC8vIEZ1bGwgd2l0aGRyYXdhbCBpcyBpbmZlcnJlZCBieTogdHJhbnNhY3Rpb25UeXBlID09PSBTaW5nbGVOb21pbmF0b3JXaXRoZHJhdyAmJiAhd2l0aGRyYXdBbW91bnRcbiAgICBjb25zdCB0eEJ1aWxkZXIyID0gZmFjdG9yeS5mcm9tKHJhd1R4KTtcbiAgICBjb25zdCB0eDIgPSBhd2FpdCB0eEJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4Mi50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2luZ2xlTm9taW5hdG9yV2l0aGRyYXcpO1xuICAgIHNob3VsZC5lcXVhbCh0eDIudG9Kc29uKCkud2l0aGRyYXdBbW91bnQsIHVuZGVmaW5lZCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4Mi50b0Jyb2FkY2FzdEZvcm1hdCgpLCByYXdUeCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSBzaWduZWQgZnVsbCB3aXRoZHJhd2FsIHR4IHVzaW5nIGFkZCBzaWduYXR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcml2YXRlS2V5cy5wcnZLZXkxIH0pO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IGtleVBhaXIuZ2V0S2V5cygpLnB1YjtcbiAgICBjb25zdCBhZGRyZXNzID0gYXdhaXQgdXRpbHMuZGVmYXVsdC5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXkpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U2luZ2xlTm9taW5hdG9yV2l0aGRyYXdCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLnNlbmRlcihhZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2VOdW1iZXIoMCk7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleShwdWJsaWNLZXkpO1xuICAgIGNvbnN0IGV4cGlyZUF0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMWUzKSArIDYwICogNjAgKiAyNCAqIDc7XG4gICAgdHhCdWlsZGVyLmV4cGlyZVRpbWUoZXhwaXJlQXQpO1xuICAgIHR4QnVpbGRlci5zZW5kKHRlc3REYXRhLnJlY2lwaWVudHNbMF0pO1xuICAgIHR4QnVpbGRlci5zZXRGdWxsV2l0aGRyYXdhbE1lc3NhZ2UoKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2luZ2xlTm9taW5hdG9yV2l0aGRyYXcpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS53aXRoZHJhd0Ftb3VudCwgdW5kZWZpbmVkKTtcbiAgICBjb25zdCBzaWduYWJsZSA9IHR4LnNpZ25hYmxlUGF5bG9hZDtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBrZXlQYWlyLnNpZ25NZXNzYWdlaW5VaW50OEFycmF5KHNpZ25hYmxlKTtcbiAgICB0eEJ1aWxkZXIuYWRkU2lnbmF0dXJlKGtleVBhaXIuZ2V0S2V5cygpLCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IGJ1aWxkZXIyID0gZmFjdG9yeS5mcm9tKHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIGNvbnN0IHR4MiA9IGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlMiA9IGtleVBhaXIuc2lnbk1lc3NhZ2VpblVpbnQ4QXJyYXkodHgyLnNpZ25hYmxlUGF5bG9hZCk7XG4gICAgc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkudG9TdHJpbmcoJ2hleCcpLCBCdWZmZXIuZnJvbShzaWduYXR1cmUyKS50b1N0cmluZygnaGV4JykpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgc2hvdWxkLmVxdWFsKHR4Mi50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2luZ2xlTm9taW5hdG9yV2l0aGRyYXcpO1xuICAgIHNob3VsZC5lcXVhbCh0eDIudG9Kc29uKCkud2l0aGRyYXdBbW91bnQsIHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIHhpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIHdpdGhkcmF3IHR4IGFuZCBzdWJtaXQgb25jaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0b253ZWIgPSBuZXcgVG9uV2ViKG5ldyBUb25XZWIuSHR0cFByb3ZpZGVyKCdodHRwczovL3Rlc3RuZXQudG9uY2VudGVyLmNvbS9hcGkvdjIvanNvblJQQycpKTtcbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnByaXZhdGVLZXlzLnBydktleTEgfSk7XG4gICAgY29uc3QgcHVibGljS2V5ID0ga2V5UGFpci5nZXRLZXlzKCkucHViO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBhd2FpdCB1dGlscy5kZWZhdWx0LmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd0J1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKGFkZHJlc3MpO1xuXG4gICAgY29uc3QgV2FsbGV0Q2xhc3MgPSB0b253ZWIud2FsbGV0LmFsbFsndjRSMiddO1xuICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXRDbGFzcyh0b253ZWIucHJvdmlkZXIsIHtcbiAgICAgIHB1YmxpY0tleTogdG9ud2ViLnV0aWxzLmhleFRvQnl0ZXMocHVibGljS2V5KSxcbiAgICAgIHdjOiAwLFxuICAgIH0pO1xuICAgIGNvbnN0IHNlcW5vID0gYXdhaXQgd2FsbGV0Lm1ldGhvZHMuc2Vxbm8oKS5jYWxsKCk7XG4gICAgdHhCdWlsZGVyLnNlcXVlbmNlTnVtYmVyKHNlcW5vIGFzIG51bWJlcik7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleShwdWJsaWNLZXkpO1xuICAgIGNvbnN0IGV4cGlyZUF0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMWUzKSArIDYwICogNjAgKiAyNCAqIDc7IC8vIDcgZGF5c1xuICAgIHR4QnVpbGRlci5leHBpcmVUaW1lKGV4cGlyZUF0KTtcbiAgICB0eEJ1aWxkZXIuc2VuZCh7XG4gICAgICBhZGRyZXNzOiAna2Y5dllnNWlETVBpT3B2OXlwdjlfQjdwd1llZTR3amNRMFNITHBOOVY2NVlGX0lnJyxcbiAgICAgIGFtb3VudDogJzEwMDAwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLnNldFdpdGhkcmF3QW1vdW50KCcxJyk7XG4gICAgdHhCdWlsZGVyLnNldFdpdGhkcmF3TWVzc2FnZSgpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVOb21pbmF0b3JXaXRoZHJhdyk7XG4gICAgY29uc3Qgc2lnbmFibGUgPSB0eC5zaWduYWJsZVBheWxvYWQ7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0ga2V5UGFpci5zaWduTWVzc2FnZWluVWludDhBcnJheShzaWduYWJsZSk7XG4gICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBidWlsZGVyMiA9IGZhY3RvcnkuZnJvbShzaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICBidWlsZGVyMi5hZGRTaWduYXR1cmUoa2V5UGFpci5nZXRLZXlzKCksIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuICAgIGNvbnN0IHR4MiA9IGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlMiA9IGtleVBhaXIuc2lnbk1lc3NhZ2VpblVpbnQ4QXJyYXkodHgyLnNpZ25hYmxlUGF5bG9hZCk7XG4gICAgc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkudG9TdHJpbmcoJ2hleCcpLCBCdWZmZXIuZnJvbShzaWduYXR1cmUyKS50b1N0cmluZygnaGV4JykpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMDApKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b253ZWIucHJvdmlkZXIuc2VuZEJvYyh0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCB3aXRoZHJhdyB0eCB1c2luZyBhZGQgc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEucHJpdmF0ZUtleXMucHJ2S2V5MSB9KTtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wdWI7XG4gICAgY29uc3QgYWRkcmVzcyA9IGF3YWl0IHV0aWxzLmRlZmF1bHQuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFNpbmdsZU5vbWluYXRvcldpdGhkcmF3QnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIoYWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnNlcXVlbmNlTnVtYmVyKDApO1xuICAgIHR4QnVpbGRlci5wdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICBjb25zdCBleHBpcmVBdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDFlMykgKyA2MCAqIDYwICogMjQgKiA3O1xuICAgIHR4QnVpbGRlci5leHBpcmVUaW1lKGV4cGlyZUF0KTtcbiAgICB0eEJ1aWxkZXIuc2VuZCh0ZXN0RGF0YS5yZWNpcGllbnRzWzBdKTtcbiAgICB0eEJ1aWxkZXIuc2V0V2l0aGRyYXdBbW91bnQoJzEnKTtcbiAgICB0eEJ1aWxkZXIuc2V0V2l0aGRyYXdNZXNzYWdlKCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNpbmdsZU5vbWluYXRvcldpdGhkcmF3KTtcbiAgICBjb25zdCBzaWduYWJsZSA9IHR4LnNpZ25hYmxlUGF5bG9hZDtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBrZXlQYWlyLnNpZ25NZXNzYWdlaW5VaW50OEFycmF5KHNpZ25hYmxlKTtcbiAgICB0eEJ1aWxkZXIuYWRkU2lnbmF0dXJlKGtleVBhaXIuZ2V0S2V5cygpLCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IGJ1aWxkZXIyID0gZmFjdG9yeS5mcm9tKHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIGNvbnN0IHR4MiA9IGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlMiA9IGtleVBhaXIuc2lnbk1lc3NhZ2VpblVpbnQ4QXJyYXkodHgyLnNpZ25hYmxlUGF5bG9hZCk7XG4gICAgc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkudG9TdHJpbmcoJ2hleCcpLCBCdWZmZXIuZnJvbShzaWduYXR1cmUyKS50b1N0cmluZygnaGV4JykpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgd2l0aGRyYXcgdHggZm9yIG5vbi1ib3VuY2VhYmxlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd0J1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLnNlbmRlci5hZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2VOdW1iZXIoMCk7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleSh0ZXN0RGF0YS5zZW5kZXIucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIuZXhwaXJlVGltZSgxMjM0NTY3ODkwKTtcbiAgICBjb25zdCBhZGRyZXNzID0gJ0VRQVd6RUtjZG55a3ZYZlVOb3VxZFM2MnR2cnAzMmJDeHVLUzZlUXJTNklTZ2NMbyc7XG4gICAgY29uc3Qgb3RoZXJGb3JtYXQgPSAnVVFBV3pFS2NkbnlrdlhmVU5vdXFkUzYydHZycDMyYkN4dUtTNmVRclM2SVNnWjh0JztcbiAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwMDAwJztcbiAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3MsIGFtb3VudCB9KTtcbiAgICB0eEJ1aWxkZXIuc2V0V2l0aGRyYXdBbW91bnQoc2luZ2xlTm9taW5hdG9yV2l0aGRyYXdBbW91bnQpO1xuICAgIHR4QnVpbGRlci5zZXRXaXRoZHJhd01lc3NhZ2UoKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2luZ2xlTm9taW5hdG9yV2l0aGRyYXcpO1xuICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnNlbmRlci5hZGRyZXNzLFxuICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgIGNvaW46ICd0dG9uJyxcbiAgICB9KTtcbiAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgY29pbjogJ3R0b24nLFxuICAgIH0pO1xuICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgIHR4SnNvbi5kZXN0aW5hdGlvbi5zaG91bGQuZXF1YWwoYWRkcmVzcyk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLndpdGhkcmF3QW1vdW50LCBzaW5nbGVOb21pbmF0b3JXaXRoZHJhd0Ftb3VudCk7XG4gICAgY29uc3QgYnVpbGRlcjIgPSBmYWN0b3J5LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgY29uc3QgdHgyID0gYXdhaXQgYnVpbGRlcjIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEpzb24yID0gdHgyLnRvSnNvbigpO1xuICAgIHR4SnNvbjIuZGVzdGluYXRpb25BbGlhcy5zaG91bGQuZXF1YWwob3RoZXJGb3JtYXQpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS53aXRoZHJhd0Ftb3VudCwgc2luZ2xlTm9taW5hdG9yV2l0aGRyYXdBbW91bnQpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/tokenTransferBuilder.ts"],"names":[],"mappings":""}