@bitgo-beta/sdk-coin-celo 1.3.3-alpha.42 → 1.3.3-alpha.421
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.
- package/dist/src/celo.d.ts +4 -1
- package/dist/src/celo.d.ts.map +1 -1
- package/dist/src/celo.js +16 -1
- package/dist/src/celoToken.d.ts +1 -1
- package/dist/src/celoToken.d.ts.map +1 -1
- package/dist/src/celoToken.js +3 -3
- package/dist/src/index.js +6 -2
- package/dist/src/lib/index.d.ts +2 -1
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +28 -12
- package/dist/src/lib/resources.d.ts.map +1 -1
- package/dist/src/lib/resources.js +10 -7
- package/dist/src/lib/stakingBuilder.js +37 -23
- package/dist/src/lib/testnetTransactionBuilder.d.ts +15 -0
- package/dist/src/lib/testnetTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/testnetTransactionBuilder.js +68 -0
- package/dist/src/lib/transactionBuilder.d.ts +1 -7
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +6 -15
- package/dist/src/lib/utils.d.ts +0 -10
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +3 -72
- package/dist/src/tcelo.d.ts +2 -0
- package/dist/src/tcelo.d.ts.map +1 -1
- package/dist/src/tcelo.js +6 -1
- package/dist/test/resources/celo.d.ts +75 -0
- package/dist/test/resources/celo.d.ts.map +1 -0
- package/dist/test/resources/celo.js +93 -0
- package/dist/test/unit/celo.d.ts +2 -0
- package/dist/test/unit/celo.d.ts.map +1 -0
- package/dist/test/unit/celo.js +42 -0
- package/dist/test/unit/celoToken.d.ts +2 -0
- package/dist/test/unit/celoToken.d.ts.map +1 -0
- package/dist/test/unit/celoToken.js +31 -0
- package/dist/test/unit/getBuilder.d.ts +3 -0
- package/dist/test/unit/getBuilder.d.ts.map +1 -0
- package/dist/test/unit/getBuilder.js +10 -0
- package/dist/test/unit/stakingBuilder.d.ts +2 -0
- package/dist/test/unit/stakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/stakingBuilder.js +247 -0
- package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/addressInitialization.js +107 -0
- package/dist/test/unit/transactionBuilder/send.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/send.js +379 -0
- package/dist/test/unit/transactionBuilder/singleSigSend.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/singleSigSend.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/singleSigSend.js +86 -0
- package/dist/test/unit/transactionBuilder/staking.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/staking.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/staking.js +345 -0
- package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/walletInitialization.js +135 -0
- package/dist/test/unit/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transferBuilder.js +102 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +18 -17
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -100
- package/dist/src/lib/transaction.d.ts +0 -9
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -37
- package/dist/src/lib/types.d.ts +0 -51
- package/dist/src/lib/types.d.ts.map +0 -1
- package/dist/src/lib/types.js +0 -223
|
@@ -0,0 +1,345 @@
|
|
|
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 assert_1 = __importDefault(require("assert"));
|
|
40
|
+
const should_1 = __importDefault(require("should"));
|
|
41
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
42
|
+
const getBuilder_1 = require("../getBuilder");
|
|
43
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
44
|
+
const testData = __importStar(require("../../resources/celo"));
|
|
45
|
+
describe('Celo staking transaction builder', () => {
|
|
46
|
+
let txBuilder;
|
|
47
|
+
beforeEach(() => {
|
|
48
|
+
txBuilder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
49
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingLock);
|
|
50
|
+
txBuilder.fee({
|
|
51
|
+
fee: '1000000000',
|
|
52
|
+
gasLimit: '12100000',
|
|
53
|
+
});
|
|
54
|
+
txBuilder.counter(1);
|
|
55
|
+
});
|
|
56
|
+
const coin = statics_1.coins.get('tcelo');
|
|
57
|
+
const LockOperation = (0, sdk_core_1.getOperationConfig)(sdk_core_1.StakingOperationTypes.LOCK, coin.network.type);
|
|
58
|
+
const UnlockOperation = (0, sdk_core_1.getOperationConfig)(sdk_core_1.StakingOperationTypes.UNLOCK, coin.network.type);
|
|
59
|
+
const WithdrawOperation = (0, sdk_core_1.getOperationConfig)(sdk_core_1.StakingOperationTypes.WITHDRAW, coin.network.type);
|
|
60
|
+
const VoteOperation = (0, sdk_core_1.getOperationConfig)(sdk_core_1.StakingOperationTypes.VOTE, coin.network.type);
|
|
61
|
+
const UnvoteOperation = (0, sdk_core_1.getOperationConfig)(sdk_core_1.StakingOperationTypes.UNVOTE, coin.network.type);
|
|
62
|
+
const ActivateOperation = (0, sdk_core_1.getOperationConfig)(sdk_core_1.StakingOperationTypes.ACTIVATE, coin.network.type);
|
|
63
|
+
describe('lock', () => {
|
|
64
|
+
it('should build a lock transaction', async function () {
|
|
65
|
+
txBuilder.lock().amount('100');
|
|
66
|
+
const txJson = (await txBuilder.build()).toJson();
|
|
67
|
+
should_1.default.equal(txJson.to, LockOperation.contractAddress);
|
|
68
|
+
txJson.data.should.startWith(LockOperation.methodId);
|
|
69
|
+
should_1.default.equal(txJson.data, LockOperation.methodId);
|
|
70
|
+
});
|
|
71
|
+
it('should build a lock transaction using the previous instance', async function () {
|
|
72
|
+
txBuilder.lock().amount('200');
|
|
73
|
+
txBuilder.lock().amount('100');
|
|
74
|
+
const txJson = (await txBuilder.build()).toJson();
|
|
75
|
+
should_1.default.equal(txJson.to, LockOperation.contractAddress);
|
|
76
|
+
txJson.data.should.startWith(LockOperation.methodId);
|
|
77
|
+
should_1.default.equal(txJson.data, LockOperation.methodId);
|
|
78
|
+
});
|
|
79
|
+
it('should sign and build a lock transaction from serialized', async function () {
|
|
80
|
+
const builder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
81
|
+
builder.from(testData.LOCK_SERIALIZED);
|
|
82
|
+
builder.sign({ key: testData.PRIVATE_KEY });
|
|
83
|
+
const tx = await builder.build();
|
|
84
|
+
const txJson = tx.toJson();
|
|
85
|
+
should_1.default.equal(txJson.to, LockOperation.contractAddress);
|
|
86
|
+
txJson.data.should.startWith(LockOperation.methodId);
|
|
87
|
+
should_1.default.equal(txJson.data, LockOperation.methodId);
|
|
88
|
+
should_1.default.equal(txJson.from, testData.ACCOUNT1);
|
|
89
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.LOCK_BROADCAST_TX);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe('vote', () => {
|
|
93
|
+
it('should build a vote transaction', async function () {
|
|
94
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingVote);
|
|
95
|
+
txBuilder
|
|
96
|
+
.vote()
|
|
97
|
+
.group(testData.GROUP_ADDRESS)
|
|
98
|
+
.lesser(testData.LESSER_ADDRESS)
|
|
99
|
+
.greater(testData.GREATER_ADDRESS)
|
|
100
|
+
.amount('100');
|
|
101
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
102
|
+
const txJson = (await txBuilder.build()).toJson();
|
|
103
|
+
should_1.default.equal(txJson.to, VoteOperation.contractAddress);
|
|
104
|
+
txJson.data.should.startWith(testData.VOTE_DATA_2);
|
|
105
|
+
should_1.default.equal(txJson.data, testData.VOTE_DATA_2);
|
|
106
|
+
});
|
|
107
|
+
it('should build a vote transaction using the previous instance', async function () {
|
|
108
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingVote);
|
|
109
|
+
txBuilder
|
|
110
|
+
.vote()
|
|
111
|
+
.group(testData.GROUP_ADDRESS_2)
|
|
112
|
+
.lesser(testData.LESSER_ADDRESS)
|
|
113
|
+
.greater(testData.GREATER_ADDRESS)
|
|
114
|
+
.amount('500');
|
|
115
|
+
txBuilder
|
|
116
|
+
.vote()
|
|
117
|
+
.group(testData.GROUP_ADDRESS)
|
|
118
|
+
.lesser(testData.LESSER_ADDRESS_2)
|
|
119
|
+
.greater(testData.GREATER_ADDRESS_2)
|
|
120
|
+
.amount('100');
|
|
121
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
122
|
+
const txJson = (await txBuilder.build()).toJson();
|
|
123
|
+
should_1.default.equal(txJson.to, VoteOperation.contractAddress);
|
|
124
|
+
txJson.data.should.startWith(testData.VOTE_DATA);
|
|
125
|
+
should_1.default.equal(txJson.data, testData.VOTE_DATA);
|
|
126
|
+
});
|
|
127
|
+
it('should sign and build a vote transaction from serialized', async function () {
|
|
128
|
+
const builder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
129
|
+
builder.from(testData.VOTE_BROADCAST_TX);
|
|
130
|
+
builder.sign({ key: testData.PRIVATE_KEY });
|
|
131
|
+
const tx = await builder.build();
|
|
132
|
+
const txJson = tx.toJson();
|
|
133
|
+
should_1.default.equal(txJson.to, VoteOperation.contractAddress);
|
|
134
|
+
should_1.default.equal(txJson.data, testData.VOTE_DATA_2);
|
|
135
|
+
should_1.default.equal(txJson.from, testData.ACCOUNT1);
|
|
136
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.VOTE_BROADCAST_TX);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
describe('activate', () => {
|
|
140
|
+
it('should build an activate transaction', async function () {
|
|
141
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingActivate);
|
|
142
|
+
txBuilder.activate().group(testData.GROUP_ADDRESS);
|
|
143
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
144
|
+
const tx = await txBuilder.build();
|
|
145
|
+
const txJson = tx.toJson();
|
|
146
|
+
should_1.default.equal(txJson.to, ActivateOperation.contractAddress);
|
|
147
|
+
txJson.data.should.startWith(testData.ACTIVATE_DATA);
|
|
148
|
+
should_1.default.equal(txJson.data, testData.ACTIVATE_DATA);
|
|
149
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.ACTIVATE_BROADCAST_TX);
|
|
150
|
+
});
|
|
151
|
+
it('should build an activate transaction from a previous instance', async function () {
|
|
152
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingActivate);
|
|
153
|
+
txBuilder.activate().group(testData.GROUP_ADDRESS_2);
|
|
154
|
+
txBuilder.activate().group(testData.GROUP_ADDRESS);
|
|
155
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
156
|
+
const tx = await txBuilder.build();
|
|
157
|
+
const txJson = tx.toJson();
|
|
158
|
+
should_1.default.equal(txJson.to, ActivateOperation.contractAddress);
|
|
159
|
+
txJson.data.should.startWith(testData.ACTIVATE_DATA);
|
|
160
|
+
should_1.default.equal(txJson.data, testData.ACTIVATE_DATA);
|
|
161
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.ACTIVATE_BROADCAST_TX);
|
|
162
|
+
});
|
|
163
|
+
it('should sign and build an activate transaction from serialized', async function () {
|
|
164
|
+
const builder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
165
|
+
builder.from(testData.ACTIVATE_BROADCAST_TX);
|
|
166
|
+
builder.sign({ key: testData.PRIVATE_KEY });
|
|
167
|
+
const tx = await builder.build();
|
|
168
|
+
const txJson = tx.toJson();
|
|
169
|
+
should_1.default.equal(txJson.to, ActivateOperation.contractAddress);
|
|
170
|
+
should_1.default.equal(txJson.data, testData.ACTIVATE_DATA);
|
|
171
|
+
should_1.default.equal(txJson.from, testData.ACCOUNT1);
|
|
172
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.ACTIVATE_BROADCAST_TX);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
describe('unvote', () => {
|
|
176
|
+
it('should build a unvote transaction', async function () {
|
|
177
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingUnvote);
|
|
178
|
+
txBuilder
|
|
179
|
+
.unvote()
|
|
180
|
+
.group(testData.GROUP_ADDRESS)
|
|
181
|
+
.lesser(testData.LESSER_ADDRESS)
|
|
182
|
+
.greater(testData.GREATER_ADDRESS)
|
|
183
|
+
.amount('100')
|
|
184
|
+
.index(1);
|
|
185
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
186
|
+
const txJson = (await txBuilder.build()).toJson();
|
|
187
|
+
should_1.default.equal(txJson.to, UnvoteOperation.contractAddress);
|
|
188
|
+
txJson.data.should.startWith(testData.UNVOTE_DATA);
|
|
189
|
+
should_1.default.equal(txJson.data, testData.UNVOTE_DATA);
|
|
190
|
+
});
|
|
191
|
+
it('should build a unvote transaction using the previous instance', async function () {
|
|
192
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingUnvote);
|
|
193
|
+
txBuilder
|
|
194
|
+
.unvote()
|
|
195
|
+
.group(testData.GROUP_ADDRESS_2)
|
|
196
|
+
.lesser(testData.LESSER_ADDRESS)
|
|
197
|
+
.greater(testData.GREATER_ADDRESS)
|
|
198
|
+
.amount('500')
|
|
199
|
+
.index(1);
|
|
200
|
+
txBuilder
|
|
201
|
+
.unvote()
|
|
202
|
+
.group(testData.GROUP_ADDRESS)
|
|
203
|
+
.lesser(testData.LESSER_ADDRESS_2)
|
|
204
|
+
.greater(testData.GREATER_ADDRESS_2)
|
|
205
|
+
.amount('100')
|
|
206
|
+
.index(1);
|
|
207
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
208
|
+
const txJson = (await txBuilder.build()).toJson();
|
|
209
|
+
should_1.default.equal(txJson.to, UnvoteOperation.contractAddress);
|
|
210
|
+
txJson.data.should.startWith(testData.UNVOTE_DATA_2);
|
|
211
|
+
should_1.default.equal(txJson.data, testData.UNVOTE_DATA_2);
|
|
212
|
+
});
|
|
213
|
+
it('should sign and build a unvote transaction from serialized', async function () {
|
|
214
|
+
const builder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
215
|
+
builder.from(testData.UNVOTE_BROADCAST_TX);
|
|
216
|
+
builder.sign({ key: testData.PRIVATE_KEY });
|
|
217
|
+
const tx = await builder.build();
|
|
218
|
+
const txJson = tx.toJson();
|
|
219
|
+
should_1.default.equal(txJson.to, UnvoteOperation.contractAddress);
|
|
220
|
+
should_1.default.equal(txJson.data, testData.UNVOTE_DATA);
|
|
221
|
+
should_1.default.equal(txJson.from, testData.ACCOUNT1);
|
|
222
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.UNVOTE_BROADCAST_TX);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe('unlock', () => {
|
|
226
|
+
it('should build an unlock transaction', async function () {
|
|
227
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingUnlock);
|
|
228
|
+
txBuilder.unlock().amount('100');
|
|
229
|
+
const txJson = (await txBuilder.build()).toJson();
|
|
230
|
+
should_1.default.equal(txJson.to, UnlockOperation.contractAddress);
|
|
231
|
+
txJson.data.should.startWith(UnlockOperation.methodId);
|
|
232
|
+
should_1.default.equal(txJson.data, testData.UNLOCK_DATA);
|
|
233
|
+
});
|
|
234
|
+
it('should build an unlock transaction from a previous instance', async function () {
|
|
235
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingUnlock);
|
|
236
|
+
txBuilder.unlock().amount('500');
|
|
237
|
+
txBuilder.unlock().amount('100');
|
|
238
|
+
const txJson = (await txBuilder.build()).toJson();
|
|
239
|
+
should_1.default.equal(txJson.to, UnlockOperation.contractAddress);
|
|
240
|
+
txJson.data.should.startWith(UnlockOperation.methodId);
|
|
241
|
+
should_1.default.equal(txJson.data, testData.UNLOCK_DATA);
|
|
242
|
+
});
|
|
243
|
+
it('should sign and build an unlock transaction from serialized', async function () {
|
|
244
|
+
const builder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
245
|
+
builder.type(sdk_core_1.TransactionType.StakingLock);
|
|
246
|
+
builder.from(testData.UNLOCK_BROADCAST_TX);
|
|
247
|
+
builder.sign({ key: testData.PRIVATE_KEY });
|
|
248
|
+
const tx = await builder.build();
|
|
249
|
+
const txJson = tx.toJson();
|
|
250
|
+
should_1.default.equal(txJson.to, UnlockOperation.contractAddress);
|
|
251
|
+
txJson.data.should.startWith(UnlockOperation.methodId);
|
|
252
|
+
should_1.default.equal(txJson.data, testData.UNLOCK_DATA);
|
|
253
|
+
should_1.default.equal(txJson.from, testData.ACCOUNT1);
|
|
254
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.UNLOCK_BROADCAST_TX);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
describe('withdraw', () => {
|
|
258
|
+
it('should build a withdraw transaction', async function () {
|
|
259
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingWithdraw);
|
|
260
|
+
txBuilder.withdraw().index(0);
|
|
261
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
262
|
+
const tx = await txBuilder.build();
|
|
263
|
+
const txJson = tx.toJson();
|
|
264
|
+
should_1.default.equal(txJson.to, WithdrawOperation.contractAddress);
|
|
265
|
+
txJson.data.should.startWith(WithdrawOperation.methodId);
|
|
266
|
+
should_1.default.equal(txJson.data, testData.WITHDRAW_DATA);
|
|
267
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.WITHDRAW_BROADCAST_TX);
|
|
268
|
+
});
|
|
269
|
+
it('should build a withdraw transaction from a previous instance', async function () {
|
|
270
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingWithdraw);
|
|
271
|
+
txBuilder.withdraw().index(2);
|
|
272
|
+
txBuilder.withdraw().index(0);
|
|
273
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
274
|
+
const tx = await txBuilder.build();
|
|
275
|
+
const txJson = tx.toJson();
|
|
276
|
+
should_1.default.equal(txJson.to, WithdrawOperation.contractAddress);
|
|
277
|
+
txJson.data.should.startWith(WithdrawOperation.methodId);
|
|
278
|
+
should_1.default.equal(txJson.data, testData.WITHDRAW_DATA);
|
|
279
|
+
should_1.default.equal(txJson.from, testData.KEYPAIR_PRV.getAddress());
|
|
280
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.WITHDRAW_BROADCAST_TX);
|
|
281
|
+
});
|
|
282
|
+
it('should sign and build a withdraw transaction from serialized', async function () {
|
|
283
|
+
const builder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
284
|
+
builder.type(sdk_core_1.TransactionType.StakingWithdraw);
|
|
285
|
+
builder.from(testData.WITHDRAW_BROADCAST_TX);
|
|
286
|
+
builder.sign({ key: testData.PRIVATE_KEY });
|
|
287
|
+
const tx = await builder.build();
|
|
288
|
+
const txJson = tx.toJson();
|
|
289
|
+
should_1.default.equal(txJson.to, WithdrawOperation.contractAddress);
|
|
290
|
+
txJson.data.should.startWith(WithdrawOperation.methodId);
|
|
291
|
+
should_1.default.equal(txJson.from, testData.KEYPAIR_PRV.getAddress());
|
|
292
|
+
should_1.default.equal(txJson.from, testData.ACCOUNT1);
|
|
293
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.WITHDRAW_BROADCAST_TX);
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
describe('type validation', () => {
|
|
297
|
+
it('should not fail if the type is changed', () => {
|
|
298
|
+
txBuilder.lock();
|
|
299
|
+
txBuilder.type(sdk_core_1.TransactionType.StakingVote);
|
|
300
|
+
should_1.default.doesNotThrow(() => {
|
|
301
|
+
txBuilder.vote();
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
it('should fail to call lock if it is not an staking lock type transaction', () => {
|
|
305
|
+
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
|
|
306
|
+
assert_1.default.throws(() => {
|
|
307
|
+
txBuilder.lock();
|
|
308
|
+
}, (e) => e.message === testData.LOCK_TRANSACTION_TYPE_ERROR);
|
|
309
|
+
});
|
|
310
|
+
it('should fail to call vote if it is not an staking vote type transaction', () => {
|
|
311
|
+
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
|
|
312
|
+
assert_1.default.throws(() => {
|
|
313
|
+
txBuilder.vote();
|
|
314
|
+
}, (e) => e.message === testData.VOTE_TRANSACTION_TYPE_ERROR);
|
|
315
|
+
});
|
|
316
|
+
it('should fail to call activate if it is not an staking activate type transaction', () => {
|
|
317
|
+
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
|
|
318
|
+
assert_1.default.throws(() => {
|
|
319
|
+
txBuilder.activate();
|
|
320
|
+
}, (e) => e.message === testData.ACTIVATION_TRANSACTION_TYPE_ERROR);
|
|
321
|
+
});
|
|
322
|
+
it('should fail to call unlock if it is not an staking unlock type transaction', () => {
|
|
323
|
+
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
|
|
324
|
+
assert_1.default.throws(() => {
|
|
325
|
+
txBuilder.unlock();
|
|
326
|
+
}, (e) => e.message === testData.UNLOCK_TRANSACTION_TYPE_ERROR);
|
|
327
|
+
});
|
|
328
|
+
it('should fail to call unvote if it is not an staking unvote type transaction', () => {
|
|
329
|
+
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
|
|
330
|
+
assert_1.default.throws(() => {
|
|
331
|
+
txBuilder.unvote();
|
|
332
|
+
}, (e) => e.message === testData.UNVOTE_TRANSACTION_TYPE_ERROR);
|
|
333
|
+
});
|
|
334
|
+
it('should fail to call withdraw if it is not an staking withdraw type transaction', () => {
|
|
335
|
+
txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
|
|
336
|
+
assert_1.default.throws(() => {
|
|
337
|
+
txBuilder.withdraw();
|
|
338
|
+
}, (e) => e.message === testData.WITHDRAW_TRANSACTION_TYPE_ERROR);
|
|
339
|
+
});
|
|
340
|
+
it('should fail to build and staking lock operation if operationBuilder is not set', async () => {
|
|
341
|
+
await txBuilder.build().should.be.rejectedWith('No staking information set');
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc3Rha2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLDhDQUEyQztBQUUzQyxtREFBa0c7QUFDbEcsK0RBQWlEO0FBRWpELFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7SUFDaEQsSUFBSSxTQUFTLENBQUM7SUFDZCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsU0FBUyxHQUFHLElBQUEsdUJBQVUsRUFBQyxPQUFPLENBQXVCLENBQUM7UUFDdEQsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDWixHQUFHLEVBQUUsWUFBWTtZQUNqQixRQUFRLEVBQUUsVUFBVTtTQUNyQixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxNQUFNLGFBQWEsR0FBRyxJQUFBLDZCQUFrQixFQUFDLGdDQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sZUFBZSxHQUFHLElBQUEsNkJBQWtCLEVBQUMsZ0NBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLDZCQUFrQixFQUFDLGdDQUFxQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sYUFBYSxHQUFHLElBQUEsNkJBQWtCLEVBQUMsZ0NBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEYsTUFBTSxlQUFlLEdBQUcsSUFBQSw2QkFBa0IsRUFBQyxnQ0FBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RixNQUFNLGlCQUFpQixHQUFHLElBQUEsNkJBQWtCLEVBQUMsZ0NBQXFCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEcsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDcEIsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLEtBQUs7WUFDekMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxLQUFLO1lBQ3JFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLO1lBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUEsdUJBQVUsRUFBQyxPQUFPLENBQXVCLENBQUM7WUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM1QyxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDcEIsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLEtBQUs7WUFDekMsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLFNBQVM7aUJBQ04sSUFBSSxFQUFFO2lCQUNOLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO2lCQUM3QixNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztpQkFDL0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7aUJBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25ELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEtBQUs7WUFDckUsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLFNBQVM7aUJBQ04sSUFBSSxFQUFFO2lCQUNOLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO2lCQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztpQkFDL0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7aUJBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixTQUFTO2lCQUNOLElBQUksRUFBRTtpQkFDTixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztpQkFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztpQkFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSztZQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFBLHVCQUFVLEVBQUMsT0FBTyxDQUF1QixDQUFDO1lBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM1QyxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1FBQ3hCLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLO1lBQzlDLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztZQUN2RSxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDaEQsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDckQsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbkQsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM5QyxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7WUFDdkUsTUFBTSxPQUFPLEdBQUcsSUFBQSx1QkFBVSxFQUFDLE9BQU8sQ0FBdUIsQ0FBQztZQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDM0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLO1lBQzNDLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5QyxTQUFTO2lCQUNOLE1BQU0sRUFBRTtpQkFDUixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztpQkFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7aUJBQy9CLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO2lCQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUNiLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNaLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztZQUN2RSxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUMsU0FBUztpQkFDTixNQUFNLEVBQUU7aUJBQ1IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7aUJBQy9CLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO2lCQUMvQixPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztpQkFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDYixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixTQUFTO2lCQUNOLE1BQU0sRUFBRTtpQkFDUixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztpQkFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztpQkFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDYixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUs7WUFDcEUsTUFBTSxPQUFPLEdBQUcsSUFBQSx1QkFBVSxFQUFDLE9BQU8sQ0FBdUIsQ0FBQztZQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUN0QixFQUFFLENBQUMsb0NBQW9DLEVBQUUsS0FBSztZQUM1QyxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxLQUFLO1lBQ3JFLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5QyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSztZQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFBLHVCQUFVLEVBQUMsT0FBTyxDQUF1QixDQUFDO1lBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1FBQ3hCLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLO1lBQzdDLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhEQUE4RCxFQUFFLEtBQUs7WUFDdEUsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2hELFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUM3RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxLQUFLO1lBQ3RFLE1BQU0sT0FBTyxHQUFHLElBQUEsdUJBQVUsRUFBQyxPQUFPLENBQXVCLENBQUM7WUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM1QyxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDN0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDL0IsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtnQkFDdkIsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0VBQXdFLEVBQUUsR0FBRyxFQUFFO1lBQ2hGLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3RELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsQ0FBQyxFQUNELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQywyQkFBMkIsQ0FDL0QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEdBQUcsRUFBRTtZQUNoRixTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN0RCxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUU7Z0JBQ0gsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLENBQUMsRUFDRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsMkJBQTJCLENBQy9ELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnRkFBZ0YsRUFBRSxHQUFHLEVBQUU7WUFDeEYsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEQsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFO2dCQUNILFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixDQUFDLEVBQ0QsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLGlDQUFpQyxDQUNyRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUUsR0FBRyxFQUFFO1lBQ3BGLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3RELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsQ0FBQyxFQUNELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyw2QkFBNkIsQ0FDakUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEdBQUcsRUFBRTtZQUNwRixTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN0RCxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUU7Z0JBQ0gsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLENBQUMsRUFDRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsNkJBQTZCLENBQ2pFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnRkFBZ0YsRUFBRSxHQUFHLEVBQUU7WUFDeEYsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEQsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFO2dCQUNILFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixDQUFDLEVBQ0QsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLCtCQUErQixDQUNuRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0ZBQWdGLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDOUYsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4uL2dldEJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGdldE9wZXJhdGlvbkNvbmZpZywgU3Rha2luZ09wZXJhdGlvblR5cGVzLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvY2Vsbyc7XG5cbmRlc2NyaWJlKCdDZWxvIHN0YWtpbmcgdHJhbnNhY3Rpb24gYnVpbGRlcicsICgpID0+IHtcbiAgbGV0IHR4QnVpbGRlcjtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcigndGNlbG8nKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIH0pO1xuXG4gIGNvbnN0IGNvaW4gPSBjb2lucy5nZXQoJ3RjZWxvJyk7XG4gIGNvbnN0IExvY2tPcGVyYXRpb24gPSBnZXRPcGVyYXRpb25Db25maWcoU3Rha2luZ09wZXJhdGlvblR5cGVzLkxPQ0ssIGNvaW4ubmV0d29yay50eXBlKTtcbiAgY29uc3QgVW5sb2NrT3BlcmF0aW9uID0gZ2V0T3BlcmF0aW9uQ29uZmlnKFN0YWtpbmdPcGVyYXRpb25UeXBlcy5VTkxPQ0ssIGNvaW4ubmV0d29yay50eXBlKTtcbiAgY29uc3QgV2l0aGRyYXdPcGVyYXRpb24gPSBnZXRPcGVyYXRpb25Db25maWcoU3Rha2luZ09wZXJhdGlvblR5cGVzLldJVEhEUkFXLCBjb2luLm5ldHdvcmsudHlwZSk7XG4gIGNvbnN0IFZvdGVPcGVyYXRpb24gPSBnZXRPcGVyYXRpb25Db25maWcoU3Rha2luZ09wZXJhdGlvblR5cGVzLlZPVEUsIGNvaW4ubmV0d29yay50eXBlKTtcbiAgY29uc3QgVW52b3RlT3BlcmF0aW9uID0gZ2V0T3BlcmF0aW9uQ29uZmlnKFN0YWtpbmdPcGVyYXRpb25UeXBlcy5VTlZPVEUsIGNvaW4ubmV0d29yay50eXBlKTtcbiAgY29uc3QgQWN0aXZhdGVPcGVyYXRpb24gPSBnZXRPcGVyYXRpb25Db25maWcoU3Rha2luZ09wZXJhdGlvblR5cGVzLkFDVElWQVRFLCBjb2luLm5ldHdvcmsudHlwZSk7XG5cbiAgZGVzY3JpYmUoJ2xvY2snLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIGxvY2sgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0eEJ1aWxkZXIubG9jaygpLmFtb3VudCgnMTAwJyk7XG4gICAgICBjb25zdCB0eEpzb24gPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgTG9ja09wZXJhdGlvbi5jb250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChMb2NrT3BlcmF0aW9uLm1ldGhvZElkKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZGF0YSwgTG9ja09wZXJhdGlvbi5tZXRob2RJZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgbG9jayB0cmFuc2FjdGlvbiB1c2luZyB0aGUgcHJldmlvdXMgaW5zdGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0eEJ1aWxkZXIubG9jaygpLmFtb3VudCgnMjAwJyk7XG4gICAgICB0eEJ1aWxkZXIubG9jaygpLmFtb3VudCgnMTAwJyk7XG4gICAgICBjb25zdCB0eEpzb24gPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgTG9ja09wZXJhdGlvbi5jb250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChMb2NrT3BlcmF0aW9uLm1ldGhvZElkKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZGF0YSwgTG9ja09wZXJhdGlvbi5tZXRob2RJZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIGEgbG9jayB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigndGNlbG8nKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICBidWlsZGVyLmZyb20odGVzdERhdGEuTE9DS19TRVJJQUxJWkVEKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgTG9ja09wZXJhdGlvbi5jb250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChMb2NrT3BlcmF0aW9uLm1ldGhvZElkKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZGF0YSwgTG9ja09wZXJhdGlvbi5tZXRob2RJZCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmZyb20sIHRlc3REYXRhLkFDQ09VTlQxKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5MT0NLX0JST0FEQ0FTVF9UWCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2b3RlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB2b3RlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdWb3RlKTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudm90ZSgpXG4gICAgICAgIC5ncm91cCh0ZXN0RGF0YS5HUk9VUF9BRERSRVNTKVxuICAgICAgICAubGVzc2VyKHRlc3REYXRhLkxFU1NFUl9BRERSRVNTKVxuICAgICAgICAuZ3JlYXRlcih0ZXN0RGF0YS5HUkVBVEVSX0FERFJFU1MpXG4gICAgICAgIC5hbW91bnQoJzEwMCcpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgY29uc3QgdHhKc29uID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIFZvdGVPcGVyYXRpb24uY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgodGVzdERhdGEuVk9URV9EQVRBXzIpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5kYXRhLCB0ZXN0RGF0YS5WT1RFX0RBVEFfMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdm90ZSB0cmFuc2FjdGlvbiB1c2luZyB0aGUgcHJldmlvdXMgaW5zdGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1ZvdGUpO1xuICAgICAgdHhCdWlsZGVyXG4gICAgICAgIC52b3RlKClcbiAgICAgICAgLmdyb3VwKHRlc3REYXRhLkdST1VQX0FERFJFU1NfMilcbiAgICAgICAgLmxlc3Nlcih0ZXN0RGF0YS5MRVNTRVJfQUREUkVTUylcbiAgICAgICAgLmdyZWF0ZXIodGVzdERhdGEuR1JFQVRFUl9BRERSRVNTKVxuICAgICAgICAuYW1vdW50KCc1MDAnKTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudm90ZSgpXG4gICAgICAgIC5ncm91cCh0ZXN0RGF0YS5HUk9VUF9BRERSRVNTKVxuICAgICAgICAubGVzc2VyKHRlc3REYXRhLkxFU1NFUl9BRERSRVNTXzIpXG4gICAgICAgIC5ncmVhdGVyKHRlc3REYXRhLkdSRUFURVJfQUREUkVTU18yKVxuICAgICAgICAuYW1vdW50KCcxMDAnKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBWb3RlT3BlcmF0aW9uLmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKHRlc3REYXRhLlZPVEVfREFUQSk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmRhdGEsIHRlc3REYXRhLlZPVEVfREFUQSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIGEgdm90ZSB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigndGNlbG8nKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICBidWlsZGVyLmZyb20odGVzdERhdGEuVk9URV9CUk9BRENBU1RfVFgpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBWb3RlT3BlcmF0aW9uLmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmRhdGEsIHRlc3REYXRhLlZPVEVfREFUQV8yKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZnJvbSwgdGVzdERhdGEuQUNDT1VOVDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlZPVEVfQlJPQURDQVNUX1RYKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FjdGl2YXRlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gYWN0aXZhdGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKTtcbiAgICAgIHR4QnVpbGRlci5hY3RpdmF0ZSgpLmdyb3VwKHRlc3REYXRhLkdST1VQX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgQWN0aXZhdGVPcGVyYXRpb24uY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgodGVzdERhdGEuQUNUSVZBVEVfREFUQSk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmRhdGEsIHRlc3REYXRhLkFDVElWQVRFX0RBVEEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLkFDVElWQVRFX0JST0FEQ0FTVF9UWCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIGFjdGl2YXRlIHRyYW5zYWN0aW9uIGZyb20gYSBwcmV2aW91cyBpbnN0YW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuICAgICAgdHhCdWlsZGVyLmFjdGl2YXRlKCkuZ3JvdXAodGVzdERhdGEuR1JPVVBfQUREUkVTU18yKTtcbiAgICAgIHR4QnVpbGRlci5hY3RpdmF0ZSgpLmdyb3VwKHRlc3REYXRhLkdST1VQX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgQWN0aXZhdGVPcGVyYXRpb24uY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgodGVzdERhdGEuQUNUSVZBVEVfREFUQSk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmRhdGEsIHRlc3REYXRhLkFDVElWQVRFX0RBVEEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLkFDVElWQVRFX0JST0FEQ0FTVF9UWCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIGFuIGFjdGl2YXRlIHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCd0Y2VsbycpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIGJ1aWxkZXIuZnJvbSh0ZXN0RGF0YS5BQ1RJVkFURV9CUk9BRENBU1RfVFgpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBBY3RpdmF0ZU9wZXJhdGlvbi5jb250cmFjdEFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5kYXRhLCB0ZXN0RGF0YS5BQ1RJVkFURV9EQVRBKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZnJvbSwgdGVzdERhdGEuQUNDT1VOVDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLkFDVElWQVRFX0JST0FEQ0FTVF9UWCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1bnZvdGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHVudm90ZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW52b3RlKTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudW52b3RlKClcbiAgICAgICAgLmdyb3VwKHRlc3REYXRhLkdST1VQX0FERFJFU1MpXG4gICAgICAgIC5sZXNzZXIodGVzdERhdGEuTEVTU0VSX0FERFJFU1MpXG4gICAgICAgIC5ncmVhdGVyKHRlc3REYXRhLkdSRUFURVJfQUREUkVTUylcbiAgICAgICAgLmFtb3VudCgnMTAwJylcbiAgICAgICAgLmluZGV4KDEpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgY29uc3QgdHhKc29uID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIFVudm90ZU9wZXJhdGlvbi5jb250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aCh0ZXN0RGF0YS5VTlZPVEVfREFUQSk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmRhdGEsIHRlc3REYXRhLlVOVk9URV9EQVRBKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB1bnZvdGUgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIHByZXZpb3VzIGluc3RhbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbnZvdGUpO1xuICAgICAgdHhCdWlsZGVyXG4gICAgICAgIC51bnZvdGUoKVxuICAgICAgICAuZ3JvdXAodGVzdERhdGEuR1JPVVBfQUREUkVTU18yKVxuICAgICAgICAubGVzc2VyKHRlc3REYXRhLkxFU1NFUl9BRERSRVNTKVxuICAgICAgICAuZ3JlYXRlcih0ZXN0RGF0YS5HUkVBVEVSX0FERFJFU1MpXG4gICAgICAgIC5hbW91bnQoJzUwMCcpXG4gICAgICAgIC5pbmRleCgxKTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudW52b3RlKClcbiAgICAgICAgLmdyb3VwKHRlc3REYXRhLkdST1VQX0FERFJFU1MpXG4gICAgICAgIC5sZXNzZXIodGVzdERhdGEuTEVTU0VSX0FERFJFU1NfMilcbiAgICAgICAgLmdyZWF0ZXIodGVzdERhdGEuR1JFQVRFUl9BRERSRVNTXzIpXG4gICAgICAgIC5hbW91bnQoJzEwMCcpXG4gICAgICAgIC5pbmRleCgxKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBVbnZvdGVPcGVyYXRpb24uY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgodGVzdERhdGEuVU5WT1RFX0RBVEFfMik7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmRhdGEsIHRlc3REYXRhLlVOVk9URV9EQVRBXzIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBhIHVudm90ZSB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigndGNlbG8nKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICBidWlsZGVyLmZyb20odGVzdERhdGEuVU5WT1RFX0JST0FEQ0FTVF9UWCk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIFVudm90ZU9wZXJhdGlvbi5jb250cmFjdEFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5kYXRhLCB0ZXN0RGF0YS5VTlZPVEVfREFUQSk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmZyb20sIHRlc3REYXRhLkFDQ09VTlQxKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5VTlZPVEVfQlJPQURDQVNUX1RYKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VubG9jaycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVubG9jayB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrKTtcbiAgICAgIHR4QnVpbGRlci51bmxvY2soKS5hbW91bnQoJzEwMCcpO1xuICAgICAgY29uc3QgdHhKc29uID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIFVubG9ja09wZXJhdGlvbi5jb250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChVbmxvY2tPcGVyYXRpb24ubWV0aG9kSWQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5kYXRhLCB0ZXN0RGF0YS5VTkxPQ0tfREFUQSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVubG9jayB0cmFuc2FjdGlvbiBmcm9tIGEgcHJldmlvdXMgaW5zdGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jayk7XG4gICAgICB0eEJ1aWxkZXIudW5sb2NrKCkuYW1vdW50KCc1MDAnKTtcbiAgICAgIHR4QnVpbGRlci51bmxvY2soKS5hbW91bnQoJzEwMCcpO1xuICAgICAgY29uc3QgdHhKc29uID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIFVubG9ja09wZXJhdGlvbi5jb250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChVbmxvY2tPcGVyYXRpb24ubWV0aG9kSWQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5kYXRhLCB0ZXN0RGF0YS5VTkxPQ0tfREFUQSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIGFuIHVubG9jayB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigndGNlbG8nKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICBidWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrKTtcbiAgICAgIGJ1aWxkZXIuZnJvbSh0ZXN0RGF0YS5VTkxPQ0tfQlJPQURDQVNUX1RYKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgVW5sb2NrT3BlcmF0aW9uLmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKFVubG9ja09wZXJhdGlvbi5tZXRob2RJZCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmRhdGEsIHRlc3REYXRhLlVOTE9DS19EQVRBKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZnJvbSwgdGVzdERhdGEuQUNDT1VOVDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlVOTE9DS19CUk9BRENBU1RfVFgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnd2l0aGRyYXcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHdpdGhkcmF3IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyk7XG4gICAgICB0eEJ1aWxkZXIud2l0aGRyYXcoKS5pbmRleCgwKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIFdpdGhkcmF3T3BlcmF0aW9uLmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKFdpdGhkcmF3T3BlcmF0aW9uLm1ldGhvZElkKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZGF0YSwgdGVzdERhdGEuV0lUSERSQVdfREFUQSk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuV0lUSERSQVdfQlJPQURDQVNUX1RYKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB3aXRoZHJhdyB0cmFuc2FjdGlvbiBmcm9tIGEgcHJldmlvdXMgaW5zdGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3KTtcbiAgICAgIHR4QnVpbGRlci53aXRoZHJhdygpLmluZGV4KDIpO1xuICAgICAgdHhCdWlsZGVyLndpdGhkcmF3KCkuaW5kZXgoMCk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBXaXRoZHJhd09wZXJhdGlvbi5jb250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChXaXRoZHJhd09wZXJhdGlvbi5tZXRob2RJZCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmRhdGEsIHRlc3REYXRhLldJVEhEUkFXX0RBVEEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5mcm9tLCB0ZXN0RGF0YS5LRVlQQUlSX1BSVi5nZXRBZGRyZXNzKCkpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLldJVEhEUkFXX0JST0FEQ0FTVF9UWCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIGEgd2l0aGRyYXcgdHJhbnNhY3Rpb24gZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoJ3RjZWxvJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgYnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcpO1xuICAgICAgYnVpbGRlci5mcm9tKHRlc3REYXRhLldJVEhEUkFXX0JST0FEQ0FTVF9UWCk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIFdpdGhkcmF3T3BlcmF0aW9uLmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKFdpdGhkcmF3T3BlcmF0aW9uLm1ldGhvZElkKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZnJvbSwgdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0QWRkcmVzcygpKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZnJvbSwgdGVzdERhdGEuQUNDT1VOVDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLldJVEhEUkFXX0JST0FEQ0FTVF9UWCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd0eXBlIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBub3QgZmFpbCBpZiB0aGUgdHlwZSBpcyBjaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgdHhCdWlsZGVyLmxvY2soKTtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVm90ZSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnZvdGUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGNhbGwgbG9jayBpZiBpdCBpcyBub3QgYW4gc3Rha2luZyBsb2NrIHR5cGUgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIubG9jaygpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IHRlc3REYXRhLkxPQ0tfVFJBTlNBQ1RJT05fVFlQRV9FUlJPUlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBjYWxsIHZvdGUgaWYgaXQgaXMgbm90IGFuIHN0YWtpbmcgdm90ZSB0eXBlIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbik7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLnZvdGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSB0ZXN0RGF0YS5WT1RFX1RSQU5TQUNUSU9OX1RZUEVfRVJST1JcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gY2FsbCBhY3RpdmF0ZSBpZiBpdCBpcyBub3QgYW4gc3Rha2luZyBhY3RpdmF0ZSB0eXBlIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbik7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmFjdGl2YXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gdGVzdERhdGEuQUNUSVZBVElPTl9UUkFOU0FDVElPTl9UWVBFX0VSUk9SXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGNhbGwgdW5sb2NrIGlmIGl0IGlzIG5vdCBhbiBzdGFraW5nIHVubG9jayB0eXBlIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbik7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLnVubG9jaygpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IHRlc3REYXRhLlVOTE9DS19UUkFOU0FDVElPTl9UWVBFX0VSUk9SXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGNhbGwgdW52b3RlIGlmIGl0IGlzIG5vdCBhbiBzdGFraW5nIHVudm90ZSB0eXBlIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbik7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLnVudm90ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IHRlc3REYXRhLlVOVk9URV9UUkFOU0FDVElPTl9UWVBFX0VSUk9SXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGNhbGwgd2l0aGRyYXcgaWYgaXQgaXMgbm90IGFuIHN0YWtpbmcgd2l0aGRyYXcgdHlwZSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb24pO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci53aXRoZHJhdygpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IHRlc3REYXRhLldJVEhEUkFXX1RSQU5TQUNUSU9OX1RZUEVfRVJST1JcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gYnVpbGQgYW5kIHN0YWtpbmcgbG9jayBvcGVyYXRpb24gaWYgb3BlcmF0aW9uQnVpbGRlciBpcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnTm8gc3Rha2luZyBpbmZvcm1hdGlvbiBzZXQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletInitialization.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/walletInitialization.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,135 @@
|
|
|
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 assert_1 = __importDefault(require("assert"));
|
|
40
|
+
const should_1 = __importDefault(require("should"));
|
|
41
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
42
|
+
const getBuilder_1 = require("../getBuilder");
|
|
43
|
+
const testData = __importStar(require("../../resources/celo"));
|
|
44
|
+
describe('Celo Transaction builder for wallet initialization', () => {
|
|
45
|
+
let txBuilder;
|
|
46
|
+
const initTxBuilder = () => {
|
|
47
|
+
txBuilder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
48
|
+
txBuilder.fee({
|
|
49
|
+
fee: '1000000000',
|
|
50
|
+
gasLimit: '12100000',
|
|
51
|
+
});
|
|
52
|
+
txBuilder.counter(2);
|
|
53
|
+
txBuilder.type(sdk_core_1.TransactionType.WalletInitialization);
|
|
54
|
+
txBuilder.owner(testData.KEYPAIR_PRV.getAddress());
|
|
55
|
+
txBuilder.owner('0xBa8eA9C3729686d7DB120efCfC81cD020C8DC1CB');
|
|
56
|
+
txBuilder.owner('0x2fa96fca36dd9d646AC8a4e0C19b4D3a0Dc7e456');
|
|
57
|
+
};
|
|
58
|
+
describe('should build ', () => {
|
|
59
|
+
it('an init transaction', async () => {
|
|
60
|
+
initTxBuilder();
|
|
61
|
+
txBuilder.sign({ key: testData.KEYPAIR_PRV.getKeys().prv });
|
|
62
|
+
const tx = await txBuilder.build(); // should build and sign
|
|
63
|
+
tx.type.should.equal(sdk_core_1.TransactionType.WalletInitialization);
|
|
64
|
+
const txJson = tx.toJson();
|
|
65
|
+
txJson.gasLimit.should.equal('12100000');
|
|
66
|
+
txJson.gasPrice.should.equal('1000000000');
|
|
67
|
+
should_1.default.equal(txJson.nonce, 2);
|
|
68
|
+
should_1.default.equal(txJson.chainId, 11142220);
|
|
69
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.TX_BROADCAST);
|
|
70
|
+
should_1.default.equal(txJson.from, testData.KEYPAIR_PRV.getAddress());
|
|
71
|
+
});
|
|
72
|
+
it('an init transaction with nonce 0', async () => {
|
|
73
|
+
initTxBuilder();
|
|
74
|
+
txBuilder.counter(0);
|
|
75
|
+
txBuilder.sign({ key: testData.KEYPAIR_PRV.getKeys().prv });
|
|
76
|
+
const tx = await txBuilder.build(); // should build and sign
|
|
77
|
+
tx.type.should.equal(sdk_core_1.TransactionType.WalletInitialization);
|
|
78
|
+
const txJson = tx.toJson();
|
|
79
|
+
txJson.gasLimit.should.equal('12100000');
|
|
80
|
+
txJson.gasPrice.should.equal('1000000000');
|
|
81
|
+
should_1.default.equal(txJson.nonce, 0);
|
|
82
|
+
should_1.default.equal(txJson.chainId, 11142220);
|
|
83
|
+
should_1.default.equal(txJson.from, testData.KEYPAIR_PRV.getAddress());
|
|
84
|
+
});
|
|
85
|
+
it('unsigned transaction without final v', async () => {
|
|
86
|
+
initTxBuilder();
|
|
87
|
+
txBuilder.counter(0);
|
|
88
|
+
const tx = await txBuilder.build();
|
|
89
|
+
tx.type.should.equal(sdk_core_1.TransactionType.WalletInitialization);
|
|
90
|
+
const txJson = tx.toJson();
|
|
91
|
+
txJson.gasLimit.should.equal('12100000');
|
|
92
|
+
txJson.gasPrice.should.equal('1000000000');
|
|
93
|
+
should_1.default.equal(txJson.nonce, 0);
|
|
94
|
+
should_1.default.equal(txJson.chainId, 11142220);
|
|
95
|
+
// Celo has disable final v and it has chain id as v value.
|
|
96
|
+
should_1.default.equal(txJson.v, 0x015408bb);
|
|
97
|
+
});
|
|
98
|
+
it('an init transaction from an unsigned serialized one', async () => {
|
|
99
|
+
initTxBuilder();
|
|
100
|
+
const tx = await txBuilder.build();
|
|
101
|
+
const serialized = tx.toBroadcastFormat();
|
|
102
|
+
// now rebuild from the signed serialized tx and make sure it stays the same
|
|
103
|
+
const newTxBuilder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
104
|
+
newTxBuilder.from(serialized);
|
|
105
|
+
newTxBuilder.sign({ key: testData.KEYPAIR_PRV.getKeys().prv });
|
|
106
|
+
const signedTx = await newTxBuilder.build();
|
|
107
|
+
should_1.default.equal(signedTx.toJson().chainId, 11142220);
|
|
108
|
+
should_1.default.equal(signedTx.toBroadcastFormat(), testData.TX_BROADCAST);
|
|
109
|
+
});
|
|
110
|
+
it('a signed init transaction from serialized', async () => {
|
|
111
|
+
const newTxBuilder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
112
|
+
newTxBuilder.from(testData.TX_BROADCAST);
|
|
113
|
+
const newTx = await newTxBuilder.build();
|
|
114
|
+
should_1.default.equal(newTx.toBroadcastFormat(), testData.TX_BROADCAST);
|
|
115
|
+
});
|
|
116
|
+
it('correct transaction id', async () => {
|
|
117
|
+
const newTxBuilder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
118
|
+
newTxBuilder.from(testData.TEST_WALLET_CREATION);
|
|
119
|
+
const newTx = await newTxBuilder.build();
|
|
120
|
+
should_1.default.equal(newTx.toJson().id, '0xbfb1de15a69c20c1467fa9708a8ac71e15e3a162618f865067b541b2db03f894');
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('Should validate ', () => {
|
|
124
|
+
it('a raw transaction', async () => {
|
|
125
|
+
const builder = (0, getBuilder_1.getBuilder)('tcelo');
|
|
126
|
+
should_1.default.doesNotThrow(() => builder.from(testData.TX_BROADCAST));
|
|
127
|
+
should_1.default.doesNotThrow(() => builder.from(testData.TX_JSON));
|
|
128
|
+
assert_1.default.throws(() => builder.from('0x00001000'), /There was error in decoding the hex string/);
|
|
129
|
+
assert_1.default.throws(() => builder.from(''), /Raw transaction is empty/);
|
|
130
|
+
assert_1.default.throws(() => builder.from('pqrs'), /There was error in parsing the JSON string/);
|
|
131
|
+
assert_1.default.throws(() => builder.from(1234), /Transaction is not a hex string or stringified json/);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdGlhbGl6YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3dhbGxldEluaXRpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixtREFBdUQ7QUFDdkQsOENBQTJDO0FBRTNDLCtEQUFpRDtBQUVqRCxRQUFRLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO0lBQ2xFLElBQUksU0FBNkIsQ0FBQztJQUNsQyxNQUFNLGFBQWEsR0FBRyxHQUFTLEVBQUU7UUFDL0IsU0FBUyxHQUFHLElBQUEsdUJBQVUsRUFBQyxPQUFPLENBQXVCLENBQUM7UUFDdEQsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUNaLEdBQUcsRUFBRSxZQUFZO1lBQ2pCLFFBQVEsRUFBRSxVQUFVO1NBQ3JCLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDckQsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDbkQsU0FBUyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQzlELFNBQVMsQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtRQUM3QixFQUFFLENBQUMscUJBQXFCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbkMsYUFBYSxFQUFFLENBQUM7WUFDaEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMs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QUMsWUFBWSxDQUFDLEVBQUUsNENBQTRDLENBQUMsQ0FBQztZQUM5RixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLDBCQUEwQixDQUFDLENBQUM7WUFDbEUsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSw0Q0FBNEMsQ0FBQyxDQUFDO1lBQ3hGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUscURBQXFELENBQUMsQ0FBQztRQUNqRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyIH0gZnJvbSAnLi4vZ2V0QnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2NlbG8nO1xuXG5kZXNjcmliZSgnQ2VsbyBUcmFuc2FjdGlvbiBidWlsZGVyIGZvciB3YWxsZXQgaW5pdGlhbGl6YXRpb24nLCAoKSA9PiB7XG4gIGxldCB0eEJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgY29uc3QgaW5pdFR4QnVpbGRlciA9ICgpOiB2b2lkID0+IHtcbiAgICB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCd0Y2VsbycpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKTtcbiAgICB0eEJ1aWxkZXIub3duZXIodGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0QWRkcmVzcygpKTtcbiAgICB0eEJ1aWxkZXIub3duZXIoJzB4QmE4ZUE5QzM3Mjk2ODZkN0RCMTIwZWZDZkM4MWNEMDIwQzhEQzFDQicpO1xuICAgIHR4QnVpbGRlci5vd25lcignMHgyZmE5NmZjYTM2ZGQ5ZDY0NkFDOGE0ZTBDMTliNEQzYTBEYzdlNDU2Jyk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCAnLCAoKSA9PiB7XG4gICAgaXQoJ2FuIGluaXQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBpbml0VHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0S2V5cygpLnBydiB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7IC8vIHNob3VsZCBidWlsZCBhbmQgc2lnblxuXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZ2FzTGltaXQuc2hvdWxkLmVxdWFsKCcxMjEwMDAwMCcpO1xuICAgICAgdHhKc29uLmdhc1ByaWNlLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5ub25jZSwgMik7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmNoYWluSWQsIDExMTQyMjIwKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5UWF9CUk9BRENBU1QpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5mcm9tLCB0ZXN0RGF0YS5LRVlQQUlSX1BSVi5nZXRBZGRyZXNzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIGluaXQgdHJhbnNhY3Rpb24gd2l0aCBub25jZSAwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMCk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0S2V5cygpLnBydiB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7IC8vIHNob3VsZCBidWlsZCBhbmQgc2lnblxuXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZ2FzTGltaXQuc2hvdWxkLmVxdWFsKCcxMjEwMDAwMCcpO1xuICAgICAgdHhKc29uLmdhc1ByaWNlLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmNoYWluSWQsIDExMTQyMjIwKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZnJvbSwgdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0QWRkcmVzcygpKTtcbiAgICB9KTtcblxuICAgIGl0KCd1bnNpZ25lZCB0cmFuc2FjdGlvbiB3aXRob3V0IGZpbmFsIHYnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpbml0VHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigwKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZ2FzTGltaXQuc2hvdWxkLmVxdWFsKCcxMjEwMDAwMCcpO1xuICAgICAgdHhKc29uLmdhc1ByaWNlLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmNoYWluSWQsIDExMTQyMjIwKTtcbiAgICAgIC8vIENlbG8gaGFzIGRpc2FibGUgZmluYWwgdiBhbmQgaXQgaGFzIGNoYWluIGlkIGFzIHYgdmFsdWUuXG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnYsIDB4MDE1NDA4YmIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIGluaXQgdHJhbnNhY3Rpb24gZnJvbSBhbiB1bnNpZ25lZCBzZXJpYWxpemVkIG9uZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gbm93IHJlYnVpbGQgZnJvbSB0aGUgc2lnbmVkIHNlcmlhbGl6ZWQgdHggYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cyB0aGUgc2FtZVxuICAgICAgY29uc3QgbmV3VHhCdWlsZGVyID0gZ2V0QnVpbGRlcigndGNlbG8nKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIG5ld1R4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5LRVlQQUlSX1BSVi5nZXRLZXlzKCkucHJ2IH0pO1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBuZXdUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduZWRUeC50b0pzb24oKS5jaGFpbklkLCAxMTE0MjIyMCk7XG4gICAgICBzaG91bGQuZXF1YWwoc2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuVFhfQlJPQURDQVNUKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHNpZ25lZCBpbml0IHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1R4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ3RjZWxvJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgbmV3VHhCdWlsZGVyLmZyb20odGVzdERhdGEuVFhfQlJPQURDQVNUKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3VHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuVFhfQlJPQURDQVNUKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb3JyZWN0IHRyYW5zYWN0aW9uIGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbmV3VHhCdWlsZGVyID0gZ2V0QnVpbGRlcigndGNlbG8nKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbSh0ZXN0RGF0YS5URVNUX1dBTExFVF9DUkVBVElPTik7XG4gICAgICBjb25zdCBuZXdUeCA9IGF3YWl0IG5ld1R4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LnRvSnNvbigpLmlkLCAnMHhiZmIxZGUxNWE2OWMyMGMxNDY3ZmE5NzA4YThhYzcxZTE1ZTNhMTYyNjE4Zjg2NTA2N2I1NDFiMmRiMDNmODk0Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaG91bGQgdmFsaWRhdGUgJywgKCkgPT4ge1xuICAgIGl0KCdhIHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCd0Y2VsbycpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5mcm9tKHRlc3REYXRhLlRYX0JST0FEQ0FTVCkpO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmZyb20odGVzdERhdGEuVFhfSlNPTikpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmZyb20oJzB4MDAwMDEwMDAnKSwgL1RoZXJlIHdhcyBlcnJvciBpbiBkZWNvZGluZyB0aGUgaGV4IHN0cmluZy8pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmZyb20oJycpLCAvUmF3IHRyYW5zYWN0aW9uIGlzIGVtcHR5Lyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuZnJvbSgncHFycycpLCAvVGhlcmUgd2FzIGVycm9yIGluIHBhcnNpbmcgdGhlIEpTT04gc3RyaW5nLyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuZnJvbSgxMjM0KSwgL1RyYW5zYWN0aW9uIGlzIG5vdCBhIGhleCBzdHJpbmcgb3Igc3RyaW5naWZpZWQganNvbi8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../test/unit/transferBuilder.ts"],"names":[],"mappings":""}
|