@bitgo-beta/sdk-coin-dot 2.2.8-beta.132 → 2.2.8-beta.1321

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 (112) hide show
  1. package/dist/src/dot.d.ts +8 -12
  2. package/dist/src/dot.d.ts.map +1 -1
  3. package/dist/src/dot.js +55 -41
  4. package/dist/src/index.js +6 -2
  5. package/dist/src/lib/addressInitializationBuilder.js +8 -10
  6. package/dist/src/lib/batchTransactionBuilder.d.ts +1 -0
  7. package/dist/src/lib/batchTransactionBuilder.d.ts.map +1 -1
  8. package/dist/src/lib/batchTransactionBuilder.js +21 -12
  9. package/dist/src/lib/claimBuilder.js +4 -6
  10. package/dist/src/lib/iface.d.ts +16 -13
  11. package/dist/src/lib/iface.d.ts.map +1 -1
  12. package/dist/src/lib/iface.js +5 -5
  13. package/dist/src/lib/iface_utils.js +8 -9
  14. package/dist/src/lib/index.js +23 -9
  15. package/dist/src/lib/keyPair.d.ts +7 -0
  16. package/dist/src/lib/keyPair.d.ts.map +1 -1
  17. package/dist/src/lib/keyPair.js +51 -4
  18. package/dist/src/lib/nativeTransferBuilder.js +10 -12
  19. package/dist/src/lib/proxyBuilder.js +6 -8
  20. package/dist/src/lib/singletonRegistry.js +2 -2
  21. package/dist/src/lib/stakingBuilder.js +6 -8
  22. package/dist/src/lib/transaction.d.ts +0 -1
  23. package/dist/src/lib/transaction.d.ts.map +1 -1
  24. package/dist/src/lib/transaction.js +72 -52
  25. package/dist/src/lib/transactionBuilder.d.ts +0 -1
  26. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  27. package/dist/src/lib/transactionBuilder.js +30 -16
  28. package/dist/src/lib/transactionBuilderFactory.js +3 -4
  29. package/dist/src/lib/txnSchema.js +3 -3
  30. package/dist/src/lib/unnominateBuilder.js +4 -6
  31. package/dist/src/lib/unstakeBuilder.js +4 -6
  32. package/dist/src/lib/utils.d.ts +10 -2
  33. package/dist/src/lib/utils.d.ts.map +1 -1
  34. package/dist/src/lib/utils.js +67 -34
  35. package/dist/src/lib/withdrawUnstakedBuilder.js +4 -6
  36. package/dist/src/resources/index.d.ts +2 -0
  37. package/dist/src/resources/index.d.ts.map +1 -1
  38. package/dist/src/resources/index.js +8 -2
  39. package/dist/src/resources/polkadotAssetHub.d.ts +2 -0
  40. package/dist/src/resources/polkadotAssetHub.d.ts.map +1 -0
  41. package/dist/src/resources/polkadotAssetHub.js +5 -0
  42. package/dist/src/resources/westendAssetHub.d.ts +2 -0
  43. package/dist/src/resources/westendAssetHub.d.ts.map +1 -0
  44. package/dist/src/resources/westendAssetHub.js +5 -0
  45. package/dist/src/tdot.js +1 -1
  46. package/dist/test/fixtures.d.ts +283 -0
  47. package/dist/test/fixtures.d.ts.map +1 -0
  48. package/dist/test/fixtures.js +439 -0
  49. package/dist/test/resources/index.d.ts +141 -0
  50. package/dist/test/resources/index.d.ts.map +1 -0
  51. package/dist/test/resources/index.js +157 -0
  52. package/dist/test/resources/materialData.json +8 -0
  53. package/dist/test/resources/materialDataModified.json +8 -0
  54. package/dist/test/resources/testnet.d.ts +2 -0
  55. package/dist/test/resources/testnet.d.ts.map +1 -0
  56. package/dist/test/resources/testnet.js +5 -0
  57. package/dist/test/unit/address.d.ts +2 -0
  58. package/dist/test/unit/address.d.ts.map +1 -0
  59. package/dist/test/unit/address.js +45 -0
  60. package/dist/test/unit/dot.d.ts +2 -0
  61. package/dist/test/unit/dot.d.ts.map +1 -0
  62. package/dist/test/unit/dot.js +690 -0
  63. package/dist/test/unit/keypair.d.ts +2 -0
  64. package/dist/test/unit/keypair.d.ts.map +1 -0
  65. package/dist/test/unit/keypair.js +111 -0
  66. package/dist/test/unit/transaction.d.ts +2 -0
  67. package/dist/test/unit/transaction.d.ts.map +1 -0
  68. package/dist/test/unit/transaction.js +269 -0
  69. package/dist/test/unit/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
  70. package/dist/test/unit/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  71. package/dist/test/unit/transactionBuilder/addressInitializationBuilder.js +265 -0
  72. package/dist/test/unit/transactionBuilder/base.d.ts +8 -0
  73. package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
  74. package/dist/test/unit/transactionBuilder/base.js +233 -0
  75. package/dist/test/unit/transactionBuilder/batchTransactionBuilder.d.ts +2 -0
  76. package/dist/test/unit/transactionBuilder/batchTransactionBuilder.d.ts.map +1 -0
  77. package/dist/test/unit/transactionBuilder/batchTransactionBuilder.js +521 -0
  78. package/dist/test/unit/transactionBuilder/claimBuilder.d.ts +2 -0
  79. package/dist/test/unit/transactionBuilder/claimBuilder.d.ts.map +1 -0
  80. package/dist/test/unit/transactionBuilder/claimBuilder.js +129 -0
  81. package/dist/test/unit/transactionBuilder/proxyBuilder.d.ts +2 -0
  82. package/dist/test/unit/transactionBuilder/proxyBuilder.d.ts.map +1 -0
  83. package/dist/test/unit/transactionBuilder/proxyBuilder.js +88 -0
  84. package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts +2 -0
  85. package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +1 -0
  86. package/dist/test/unit/transactionBuilder/singeltonRegistry.js +59 -0
  87. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
  88. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  89. package/dist/test/unit/transactionBuilder/stakingBuilder.js +235 -0
  90. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  91. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  92. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +107 -0
  93. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  94. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  95. package/dist/test/unit/transactionBuilder/transferBuilder.js +437 -0
  96. package/dist/test/unit/transactionBuilder/unnominateBuilder.d.ts +2 -0
  97. package/dist/test/unit/transactionBuilder/unnominateBuilder.d.ts.map +1 -0
  98. package/dist/test/unit/transactionBuilder/unnominateBuilder.js +97 -0
  99. package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts +2 -0
  100. package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +1 -0
  101. package/dist/test/unit/transactionBuilder/unstakeBuilder.js +116 -0
  102. package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts +2 -0
  103. package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts.map +1 -0
  104. package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.js +115 -0
  105. package/dist/test/unit/utils.d.ts +2 -0
  106. package/dist/test/unit/utils.d.ts.map +1 -0
  107. package/dist/test/unit/utils.js +117 -0
  108. package/dist/tsconfig.tsbuildinfo +1 -0
  109. package/package.json +20 -16
  110. package/.eslintignore +0 -5
  111. package/.mocharc.yml +0 -8
  112. package/CHANGELOG.md +0 -400
@@ -0,0 +1,437 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const should_1 = __importDefault(require("should"));
8
+ const sinon_1 = __importDefault(require("sinon"));
9
+ const lib_1 = require("../../../src/lib");
10
+ const iface_1 = require("../../../src/lib/iface");
11
+ const utils_1 = __importDefault(require("../../../src/lib/utils"));
12
+ const resources_1 = require("../../resources");
13
+ const base_1 = require("./base");
14
+ describe('Dot Transfer Builder', () => {
15
+ let builder;
16
+ const proxySender = resources_1.accounts.account3;
17
+ const sender = resources_1.accounts.account1;
18
+ const receiver = resources_1.accounts.account2;
19
+ // Consolidation/sweep tx's do not deseialize amounts.
20
+ const consolidationValue = '0';
21
+ beforeEach(() => {
22
+ const config = (0, base_1.buildTestConfig)();
23
+ builder = new lib_1.TransferBuilder(config).material(utils_1.default.getMaterial(config));
24
+ });
25
+ describe('setter validation', () => {
26
+ it('should validate real address', () => {
27
+ const spy = sinon_1.default.spy(builder, 'validateAddress');
28
+ assert_1.default.throws(() => builder.owner({ address: 'asd' }), (e) => e.message === `The address 'asd' is not a well-formed dot address`);
29
+ should_1.default.doesNotThrow(() => builder.owner({ address: sender.address }));
30
+ sinon_1.default.assert.calledTwice(spy);
31
+ });
32
+ it('should validate to address', () => {
33
+ const spy = sinon_1.default.spy(builder, 'validateAddress');
34
+ assert_1.default.throws(() => builder.to({ address: 'asd' }), (e) => e.message === `The address 'asd' is not a well-formed dot address`);
35
+ should_1.default.doesNotThrow(() => builder.to({ address: sender.address }));
36
+ sinon_1.default.assert.calledTwice(spy);
37
+ });
38
+ it('should validate transfer amount', () => {
39
+ const spy = sinon_1.default.spy(builder, 'validateValue');
40
+ assert_1.default.throws(() => builder.amount('-1'), (e) => e.message === 'Value cannot be less than zero');
41
+ should_1.default.doesNotThrow(() => builder.amount('1000'));
42
+ sinon_1.default.assert.calledTwice(spy);
43
+ });
44
+ });
45
+ describe('build transfer transaction', () => {
46
+ it('should build a transfer transaction', async () => {
47
+ builder
48
+ .amount('90034235235322')
49
+ .to({ address: receiver.address })
50
+ .sender({ address: sender.address })
51
+ .validity({ firstValid: 3933, maxDuration: 64 })
52
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
53
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
54
+ .fee({ amount: 0, type: 'tip' });
55
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
56
+ const tx = await builder.build();
57
+ const txJson = tx.toJson();
58
+ should_1.default.deepEqual(txJson.amount, '90034235235322');
59
+ should_1.default.deepEqual(txJson.to, receiver.address);
60
+ should_1.default.deepEqual(txJson.sender, sender.address);
61
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
62
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
63
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
64
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
65
+ should_1.default.deepEqual(txJson.nonce, 200);
66
+ should_1.default.deepEqual(txJson.tip, 0);
67
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
68
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
69
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
70
+ const inputs = tx.inputs[0];
71
+ should_1.default.deepEqual(inputs.address, sender.address);
72
+ should_1.default.deepEqual(inputs.value, '90034235235322');
73
+ const outputs = tx.outputs[0];
74
+ should_1.default.deepEqual(outputs.address, receiver.address);
75
+ should_1.default.deepEqual(outputs.value, '90034235235322');
76
+ });
77
+ it('should build a transaction with zero maxDuration (immortal)', async () => {
78
+ builder
79
+ .amount('90034235235322')
80
+ .to({ address: receiver.address })
81
+ .sender({ address: sender.address })
82
+ .validity({ firstValid: 3933, maxDuration: 0 })
83
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
84
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
85
+ .fee({ amount: 0, type: 'tip' });
86
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
87
+ const tx = await builder.build();
88
+ const txJson = tx.toJson();
89
+ should_1.default.deepEqual(txJson.amount, '90034235235322');
90
+ should_1.default.deepEqual(txJson.to, receiver.address);
91
+ should_1.default.deepEqual(txJson.sender, sender.address);
92
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
93
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
94
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
95
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
96
+ should_1.default.deepEqual(txJson.nonce, 200);
97
+ should_1.default.deepEqual(txJson.tip, 0);
98
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
99
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
100
+ should_1.default.deepEqual(txJson.eraPeriod, 0);
101
+ const inputs = tx.inputs[0];
102
+ should_1.default.deepEqual(inputs.address, sender.address);
103
+ should_1.default.deepEqual(inputs.value, '90034235235322');
104
+ const outputs = tx.outputs[0];
105
+ should_1.default.deepEqual(outputs.address, receiver.address);
106
+ should_1.default.deepEqual(outputs.value, '90034235235322');
107
+ });
108
+ it('should build an unsigned transfer transaction', async () => {
109
+ builder
110
+ .amount('90034235235322')
111
+ .to({ address: receiver.address })
112
+ .sender({ address: sender.address })
113
+ .validity({ firstValid: 3933, maxDuration: 64 })
114
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
115
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
116
+ .fee({ amount: 0, type: 'tip' });
117
+ const tx = await builder.build();
118
+ const txJson = tx.toJson();
119
+ should_1.default.deepEqual(txJson.amount, '90034235235322');
120
+ should_1.default.deepEqual(txJson.to, receiver.address);
121
+ should_1.default.deepEqual(txJson.sender, sender.address);
122
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
123
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
124
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
125
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
126
+ should_1.default.deepEqual(txJson.nonce, 200);
127
+ should_1.default.deepEqual(txJson.tip, 0);
128
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
129
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
130
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
131
+ });
132
+ it('should build from raw signed tx', async () => {
133
+ builder.from(resources_1.rawTx.transfer.signed);
134
+ builder
135
+ .validity({ firstValid: 3933, maxDuration: 64 })
136
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
137
+ const tx = await builder.build();
138
+ const txJson = tx.toJson();
139
+ should_1.default.deepEqual(txJson.amount, '90034235235322');
140
+ should_1.default.deepEqual(txJson.to, receiver.address);
141
+ should_1.default.deepEqual(txJson.sender, sender.address);
142
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
143
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
144
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
145
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
146
+ should_1.default.deepEqual(txJson.nonce, 200);
147
+ should_1.default.deepEqual(txJson.tip, 0);
148
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
149
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
150
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
151
+ });
152
+ it('should build from raw unsigned tx', async () => {
153
+ builder.from(resources_1.rawTx.transfer.unsigned);
154
+ builder
155
+ .validity({ firstValid: 3933, maxDuration: 64 })
156
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
157
+ .sender({ address: sender.address })
158
+ .addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
159
+ const tx = await builder.build();
160
+ const txJson = tx.toJson();
161
+ should_1.default.deepEqual(txJson.amount, '90034235235322');
162
+ should_1.default.deepEqual(txJson.to, receiver.address);
163
+ should_1.default.deepEqual(txJson.sender, sender.address);
164
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
165
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
166
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
167
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
168
+ should_1.default.deepEqual(txJson.nonce, 200);
169
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
170
+ should_1.default.deepEqual(txJson.tip, 0);
171
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
172
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
173
+ });
174
+ it('should build from raw signed westend tx', async () => {
175
+ builder.from(resources_1.rawTx.transfer.westendSigned);
176
+ builder
177
+ .validity({ firstValid: 3933, maxDuration: 64 })
178
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
179
+ const tx = await builder.build();
180
+ const txJson = tx.toJson();
181
+ should_1.default.deepEqual(txJson.amount, '10000000000');
182
+ should_1.default.deepEqual(txJson.to, receiver.address);
183
+ should_1.default.deepEqual(txJson.sender, sender.address);
184
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
185
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
186
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
187
+ should_1.default.deepEqual(txJson.nonce, 200);
188
+ should_1.default.deepEqual(txJson.tip, 0);
189
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
190
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
191
+ });
192
+ });
193
+ describe('build proxy transfer transaction', () => {
194
+ it('should build a proxy transaction', async () => {
195
+ builder
196
+ .owner({ address: sender.address })
197
+ .forceProxyType(iface_1.ProxyType.ANY)
198
+ .to({ address: receiver.address })
199
+ .amount('90034235235322')
200
+ .sender({ address: proxySender.address })
201
+ .validity({ firstValid: 3933, maxDuration: 64 })
202
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
203
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
204
+ .fee({ amount: 0, type: 'tip' })
205
+ .addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
206
+ const tx = await builder.build();
207
+ const txJson = tx.toJson();
208
+ should_1.default.deepEqual(txJson.owner, sender.address);
209
+ should_1.default.deepEqual(txJson.forceProxyType, iface_1.ProxyType.ANY);
210
+ should_1.default.deepEqual(txJson.sender, proxySender.address);
211
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
212
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
213
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
214
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
215
+ should_1.default.deepEqual(txJson.nonce, 200);
216
+ should_1.default.deepEqual(txJson.tip, 0);
217
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
218
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
219
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
220
+ const inputs = tx.inputs[0];
221
+ should_1.default.deepEqual(inputs.address, sender.address);
222
+ should_1.default.deepEqual(inputs.value, '90034235235322');
223
+ const outputs = tx.outputs[0];
224
+ should_1.default.deepEqual(outputs.address, receiver.address);
225
+ should_1.default.deepEqual(outputs.value, '90034235235322');
226
+ });
227
+ it('should build an unsigned proxy transaction', async () => {
228
+ builder
229
+ .owner({ address: sender.address })
230
+ .forceProxyType(iface_1.ProxyType.ANY)
231
+ .to({ address: receiver.address })
232
+ .amount('90034235235322')
233
+ .sender({ address: proxySender.address })
234
+ .validity({ firstValid: 3933, maxDuration: 64 })
235
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
236
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
237
+ .fee({ amount: 0, type: 'tip' });
238
+ const tx = await builder.build();
239
+ const txJson = tx.toJson();
240
+ should_1.default.deepEqual(txJson.owner, sender.address);
241
+ should_1.default.deepEqual(txJson.forceProxyType, iface_1.ProxyType.ANY);
242
+ should_1.default.deepEqual(txJson.sender, proxySender.address);
243
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
244
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
245
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
246
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
247
+ should_1.default.deepEqual(txJson.nonce, 200);
248
+ should_1.default.deepEqual(txJson.tip, 0);
249
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
250
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
251
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
252
+ });
253
+ it('should build from raw signed tx', async () => {
254
+ builder.from(resources_1.rawTx.proxy.signed);
255
+ builder
256
+ .validity({ firstValid: 3933, maxDuration: 64 })
257
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
258
+ const tx = await builder.build();
259
+ const txJson = tx.toJson();
260
+ should_1.default.deepEqual(txJson.owner, sender.address);
261
+ should_1.default.deepEqual(txJson.forceProxyType, iface_1.ProxyType.ANY);
262
+ should_1.default.deepEqual(txJson.sender, proxySender.address);
263
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
264
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
265
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
266
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
267
+ should_1.default.deepEqual(txJson.nonce, 200);
268
+ should_1.default.deepEqual(txJson.tip, 0);
269
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
270
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
271
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
272
+ });
273
+ it('should build from raw unsigned tx', async () => {
274
+ builder.from(resources_1.rawTx.proxy.unsigned);
275
+ builder
276
+ .validity({ firstValid: 3933, maxDuration: 64 })
277
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
278
+ .sender({ address: proxySender.address })
279
+ .addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
280
+ const tx = await builder.build();
281
+ const txJson = tx.toJson();
282
+ should_1.default.deepEqual(txJson.owner, sender.address);
283
+ should_1.default.deepEqual(txJson.forceProxyType, iface_1.ProxyType.ANY);
284
+ should_1.default.deepEqual(txJson.sender, proxySender.address);
285
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
286
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
287
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
288
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
289
+ should_1.default.deepEqual(txJson.nonce, 200);
290
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
291
+ should_1.default.deepEqual(txJson.tip, 0);
292
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
293
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
294
+ });
295
+ });
296
+ describe('build sweep transfer transaction', () => {
297
+ it('should build a signed sweep transaction', async () => {
298
+ builder
299
+ .sweep()
300
+ .to({ address: receiver.address })
301
+ .amount('90034235235322')
302
+ .sender({ address: sender.address })
303
+ .validity({ firstValid: 3933, maxDuration: 64 })
304
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
305
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
306
+ .fee({ amount: 0, type: 'tip' })
307
+ .addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
308
+ const tx = await builder.build();
309
+ const txJson = tx.toJson();
310
+ should_1.default.deepEqual(txJson.sender, sender.address);
311
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
312
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
313
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
314
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
315
+ should_1.default.deepEqual(txJson.nonce, 200);
316
+ should_1.default.deepEqual(txJson.tip, 0);
317
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
318
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
319
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
320
+ const inputs = tx.inputs[0];
321
+ should_1.default.deepEqual(inputs.address, sender.address);
322
+ should_1.default.deepEqual(inputs.value, consolidationValue);
323
+ const outputs = tx.outputs[0];
324
+ should_1.default.deepEqual(outputs.address, receiver.address);
325
+ should_1.default.deepEqual(outputs.value, consolidationValue);
326
+ });
327
+ it('should build an unsigned sweep transaction', async () => {
328
+ builder
329
+ .sweep()
330
+ .to({ address: receiver.address })
331
+ .amount('90034235235322')
332
+ .sender({ address: sender.address })
333
+ .validity({ firstValid: 3933, maxDuration: 64 })
334
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
335
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
336
+ .fee({ amount: 0, type: 'tip' });
337
+ const tx = await builder.build();
338
+ const txJson = tx.toJson();
339
+ should_1.default.deepEqual(txJson.sender, sender.address);
340
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
341
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
342
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
343
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
344
+ should_1.default.deepEqual(txJson.nonce, 200);
345
+ should_1.default.deepEqual(txJson.tip, 0);
346
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
347
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
348
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
349
+ const inputs = tx.inputs[0];
350
+ should_1.default.deepEqual(inputs.address, sender.address);
351
+ should_1.default.deepEqual(inputs.value, consolidationValue);
352
+ const outputs = tx.outputs[0];
353
+ should_1.default.deepEqual(outputs.address, receiver.address);
354
+ should_1.default.deepEqual(outputs.value, consolidationValue);
355
+ });
356
+ it('should build an unsigned sweep transaction with keepAlive as false', async () => {
357
+ builder
358
+ .sweep(false)
359
+ .to({ address: receiver.address })
360
+ .amount('90034235235322')
361
+ .sender({ address: sender.address })
362
+ .validity({ firstValid: 3933, maxDuration: 64 })
363
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
364
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
365
+ .fee({ amount: 0, type: 'tip' });
366
+ const tx = await builder.build();
367
+ const txJson = tx.toJson();
368
+ should_1.default.deepEqual(txJson.sender, sender.address);
369
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
370
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
371
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
372
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
373
+ should_1.default.deepEqual(txJson.nonce, 200);
374
+ should_1.default.deepEqual(txJson.tip, 0);
375
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
376
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
377
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
378
+ const inputs = tx.inputs[0];
379
+ should_1.default.deepEqual(inputs.address, sender.address);
380
+ should_1.default.deepEqual(inputs.value, consolidationValue);
381
+ const outputs = tx.outputs[0];
382
+ should_1.default.deepEqual(outputs.address, receiver.address);
383
+ should_1.default.deepEqual(outputs.value, consolidationValue);
384
+ });
385
+ it('should build from raw signed sweep transaction', async () => {
386
+ builder.from(resources_1.rawTx.transferAll.signed);
387
+ builder
388
+ .validity({ firstValid: 3933, maxDuration: 64 })
389
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
390
+ const tx = await builder.build();
391
+ const txJson = tx.toJson();
392
+ should_1.default.deepEqual(txJson.sender, sender.address);
393
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
394
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
395
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
396
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
397
+ should_1.default.deepEqual(txJson.nonce, 200);
398
+ should_1.default.deepEqual(txJson.tip, 0);
399
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
400
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
401
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
402
+ const inputs = tx.inputs[0];
403
+ should_1.default.deepEqual(inputs.address, sender.address);
404
+ should_1.default.deepEqual(inputs.value, consolidationValue);
405
+ const outputs = tx.outputs[0];
406
+ should_1.default.deepEqual(outputs.address, receiver.address);
407
+ should_1.default.deepEqual(outputs.value, consolidationValue);
408
+ });
409
+ it('should build from an unsigned sweep transaction', async () => {
410
+ builder.from(resources_1.rawTx.transferAll.unsigned);
411
+ builder
412
+ .validity({ firstValid: 3933, maxDuration: 64 })
413
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
414
+ .sender({ address: sender.address })
415
+ .addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
416
+ const tx = await builder.build();
417
+ const txJson = tx.toJson();
418
+ should_1.default.deepEqual(txJson.sender, sender.address);
419
+ should_1.default.deepEqual(txJson.blockNumber, 3933);
420
+ should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
421
+ should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
422
+ should_1.default.deepEqual(txJson.specVersion, resources_1.specVersion);
423
+ should_1.default.deepEqual(txJson.nonce, 200);
424
+ should_1.default.deepEqual(txJson.tip, 0);
425
+ should_1.default.deepEqual(txJson.transactionVersion, resources_1.txVersion);
426
+ should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
427
+ should_1.default.deepEqual(txJson.eraPeriod, 64);
428
+ const inputs = tx.inputs[0];
429
+ should_1.default.deepEqual(inputs.address, sender.address);
430
+ should_1.default.deepEqual(inputs.value, consolidationValue);
431
+ const outputs = tx.outputs[0];
432
+ should_1.default.deepEqual(outputs.address, receiver.address);
433
+ should_1.default.deepEqual(outputs.value, consolidationValue);
434
+ });
435
+ });
436
+ });
437
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGtEQUEwQjtBQUMxQiwwQ0FBbUQ7QUFDbkQsa0RBQW1EO0FBQ25ELG1FQUEyQztBQUMzQywrQ0FBb0g7QUFDcEgsaUNBQXlDO0FBRXpDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7SUFDcEMsSUFBSSxPQUF3QixDQUFDO0lBRTdCLE1BQU0sV0FBVyxHQUFHLG9CQUFRLENBQUMsUUFBUSxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLG9CQUFRLENBQUMsUUFBUSxDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLG9CQUFRLENBQUMsUUFBUSxDQUFDO0lBRW5DLHNEQUFzRDtJQUN0RCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztJQUUvQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7UUFDakMsT0FBTyxHQUFHLElBQUkscUJBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxFQUFFLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sR0FBRyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDbEQsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxL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LFdBQVcsRUFBRSx1QkFBVyxDQUFDLENBQUM7WUFDbEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNwQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxxQkFBUyxDQUFDLENBQUM7WUFDdkQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxxQkFBUyxDQUFDLENBQUM7WUFDOUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV2QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUVuRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLGdCQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELGdCQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBQcm94eVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IGFjY291bnRzLCByYXdUeCwgY2hhaW5OYW1lLCB0eFZlcnNpb24sIGdlbmVzaXNIYXNoLCBzcGVjVmVyc2lvbiwgbW9ja1Rzc1NpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuXG5kZXNjcmliZSgnRG90IFRyYW5zZmVyIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGxldCBidWlsZGVyOiBUcmFuc2ZlckJ1aWxkZXI7XG5cbiAgY29uc3QgcHJveHlTZW5kZXIgPSBhY2NvdW50cy5hY2NvdW50MztcbiAgY29uc3Qgc2VuZGVyID0gYWNjb3VudHMuYWNjb3VudDE7XG4gIGNvbnN0IHJlY2VpdmVyID0gYWNjb3VudHMuYWNjb3VudDI7XG5cbiAgLy8gQ29uc29saWRhdGlvbi9zd2VlcCB0eCdzIGRvIG5vdCBkZXNlaWFsaXplIGFtb3VudHMuXG4gIGNvbnN0IGNvbnNvbGlkYXRpb25WYWx1ZSA9ICcwJztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcbiAgICBidWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKHV0aWxzLmdldE1hdGVyaWFsKGNvbmZpZykpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSByZWFsIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzcHkgPSBzaW5vbi5zcHkoYnVpbGRlciwgJ3ZhbGlkYXRlQWRkcmVzcycpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5vd25lcih7IGFkZHJlc3M6ICdhc2QnIH0pLFxuICAgICAgICAoZTogRXJyb3IpID0+IGUubWVzc2FnZSA9PT0gYFRoZSBhZGRyZXNzICdhc2QnIGlzIG5vdCBhIHdlbGwtZm9ybWVkIGRvdCBhZGRyZXNzYFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5vd25lcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShzcHkpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdG8gYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweShidWlsZGVyLCAndmFsaWRhdGVBZGRyZXNzJyk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBidWlsZGVyLnRvKHsgYWRkcmVzczogJ2FzZCcgfSksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSBgVGhlIGFkZHJlc3MgJ2FzZCcgaXMgbm90IGEgd2VsbC1mb3JtZWQgZG90IGFkZHJlc3NgXG4gICAgICApO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnRvKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSkpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFR3aWNlKHNweSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB0cmFuc2ZlciBhbW91bnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzcHkgPSBzaW5vbi5zcHkoYnVpbGRlciwgJ3ZhbGlkYXRlVmFsdWUnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuYW1vdW50KCctMScpLFxuICAgICAgICAoZTogRXJyb3IpID0+IGUubWVzc2FnZSA9PT0gJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybydcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIuYW1vdW50KCcxMDAwJykpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFR3aWNlKHNweSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZCB0cmFuc2ZlciB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hbW91bnQoJzkwMDM0MjM1MjM1MzIyJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMjAwIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICc5MDAzNDIzNTIzNTMyMicpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG8sIHJlY2VpdmVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsIGNoYWluTmFtZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgY29uc3QgaW5wdXRzID0gdHguaW5wdXRzWzBdO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMuYWRkcmVzcywgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMudmFsdWUsICc5MDAzNDIzNTIzNTMyMicpO1xuXG4gICAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy5hZGRyZXNzLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy52YWx1ZSwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCB6ZXJvIG1heER1cmF0aW9uIChpbW1vcnRhbCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hbW91bnQoJzkwMDM0MjM1MjM1MzIyJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDAgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50bywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgMCk7XG5cbiAgICAgIGNvbnN0IGlucHV0cyA9IHR4LmlucHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLmFkZHJlc3MsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLnZhbHVlLCAnOTAwMzQyMzUyMzUzMjInKTtcblxuICAgICAgY29uc3Qgb3V0cHV0cyA9IHR4Lm91dHB1dHNbMF07XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMuYWRkcmVzcywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMudmFsdWUsICc5MDAzNDIzNTIzNTMyMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhbiB1bnNpZ25lZCB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCgnOTAwMzQyMzUyMzUzMjInKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYW1vdW50LCAnOTAwMzQyMzUyMzUzMjInKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDM5MzMpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDIwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCBjaGFpbk5hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGZyb20gcmF3IHNpZ25lZCB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC50cmFuc2Zlci5zaWduZWQpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICc5MDAzNDIzNTIzNTMyMicpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG8sIHJlY2VpdmVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsIGNoYWluTmFtZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgZnJvbSByYXcgdW5zaWduZWQgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyLmZyb20ocmF3VHgudHJhbnNmZXIudW5zaWduZWQpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYW1vdW50LCAnOTAwMzQyMzUyMzUzMjInKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDM5MzMpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDIwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsIGNoYWluTmFtZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGZyb20gcmF3IHNpZ25lZCB3ZXN0ZW5kIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnRyYW5zZmVyLndlc3RlbmRTaWduZWQpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICcxMDAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG8sIHJlY2VpdmVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQgcHJveHkgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHByb3h5IHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAub3duZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZm9yY2VQcm94eVR5cGUoUHJveHlUeXBlLkFOWSlcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuYW1vdW50KCc5MDAzNDIzNTIzNTMyMicpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBwcm94eVNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ub3duZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZvcmNlUHJveHlUeXBlLCBQcm94eVR5cGUuQU5ZKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgcHJveHlTZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsIGNoYWluTmFtZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgY29uc3QgaW5wdXRzID0gdHguaW5wdXRzWzBdO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMuYWRkcmVzcywgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMudmFsdWUsICc5MDAzNDIzNTIzNTMyMicpO1xuXG4gICAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy5hZGRyZXNzLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy52YWx1ZSwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVuc2lnbmVkIHByb3h5IHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAub3duZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZm9yY2VQcm94eVR5cGUoUHJveHlUeXBlLkFOWSlcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuYW1vdW50KCc5MDAzNDIzNTIzNTMyMicpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBwcm94eVNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5vd25lciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZm9yY2VQcm94eVR5cGUsIFByb3h5VHlwZS5BTlkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBwcm94eVNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBmcm9tIHJhdyBzaWduZWQgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyLmZyb20ocmF3VHgucHJveHkuc2lnbmVkKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ub3duZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZvcmNlUHJveHlUeXBlLCBQcm94eVR5cGUuQU5ZKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgcHJveHlTZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsIGNoYWluTmFtZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgZnJvbSByYXcgdW5zaWduZWQgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyLmZyb20ocmF3VHgucHJveHkudW5zaWduZWQpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogcHJveHlTZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ub3duZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZvcmNlUHJveHlUeXBlLCBQcm94eVR5cGUuQU5ZKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgcHJveHlTZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgY2hhaW5OYW1lKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIHN3ZWVwIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzaWduZWQgc3dlZXAgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zd2VlcCgpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmFtb3VudCgnOTAwMzQyMzUyMzUzMjInKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMjAwIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pXG4gICAgICAgIC5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICBjb25zdCBpbnB1dHMgPSB0eC5pbnB1dHNbMF07XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGlucHV0cy5hZGRyZXNzLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGlucHV0cy52YWx1ZSwgY29uc29saWRhdGlvblZhbHVlKTtcblxuICAgICAgY29uc3Qgb3V0cHV0cyA9IHR4Lm91dHB1dHNbMF07XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMuYWRkcmVzcywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMudmFsdWUsIGNvbnNvbGlkYXRpb25WYWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc3dlZXAoKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC5hbW91bnQoJzkwMDM0MjM1MjM1MzIyJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdHhWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICBjb25zdCBpbnB1dHMgPSB0eC5pbnB1dHNbMF07XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGlucHV0cy5hZGRyZXNzLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGlucHV0cy52YWx1ZSwgY29uc29saWRhdGlvblZhbHVlKTtcblxuICAgICAgY29uc3Qgb3V0cHV0cyA9IHR4Lm91dHB1dHNbMF07XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMuYWRkcmVzcywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMudmFsdWUsIGNvbnNvbGlkYXRpb25WYWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uIHdpdGgga2VlcEFsaXZlIGFzIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc3dlZXAoZmFsc2UpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmFtb3VudCgnOTAwMzQyMzUyMzUzMjInKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMjAwIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDM5MzMpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDIwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCBjaGFpbk5hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG5cbiAgICAgIGNvbnN0IGlucHV0cyA9IHR4LmlucHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLmFkZHJlc3MsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLnZhbHVlLCBjb25zb2xpZGF0aW9uVmFsdWUpO1xuXG4gICAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy5hZGRyZXNzLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy52YWx1ZSwgY29uc29saWRhdGlvblZhbHVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgZnJvbSByYXcgc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnRyYW5zZmVyQWxsLnNpZ25lZCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDM5MzMpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDIwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLCBjaGFpbk5hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG5cbiAgICAgIGNvbnN0IGlucHV0cyA9IHR4LmlucHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLmFkZHJlc3MsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLnZhbHVlLCBjb25zb2xpZGF0aW9uVmFsdWUpO1xuXG4gICAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy5hZGRyZXNzLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy52YWx1ZSwgY29uc29saWRhdGlvblZhbHVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgZnJvbSBhbiB1bnNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC50cmFuc2ZlckFsbC51bnNpZ25lZCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBzcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHR4VmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsIGNoYWluTmFtZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgY29uc3QgaW5wdXRzID0gdHguaW5wdXRzWzBdO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMuYWRkcmVzcywgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMudmFsdWUsIGNvbnNvbGlkYXRpb25WYWx1ZSk7XG5cbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0eC5vdXRwdXRzWzBdO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChvdXRwdXRzLmFkZHJlc3MsIHJlY2VpdmVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChvdXRwdXRzLnZhbHVlLCBjb25zb2xpZGF0aW9uVmFsdWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=unnominateBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unnominateBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/unnominateBuilder.ts"],"names":[],"mappings":""}