@bitgo-beta/sdk-coin-sui 3.0.3-beta.192 → 3.0.3-beta.1921
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/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -2
- package/dist/src/lib/compareTransactionBlocks.js +2 -3
- package/dist/src/lib/constants.d.ts +9 -2
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +18 -2
- package/dist/src/lib/customTransaction.js +3 -3
- package/dist/src/lib/customTransactionBuilder.js +5 -5
- package/dist/src/lib/iface.d.ts +80 -12
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +34 -5
- package/dist/src/lib/index.d.ts +6 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +36 -10
- package/dist/src/lib/keyPair.js +24 -10
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts +64 -11
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/Inputs.js +63 -19
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +88 -355
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/TransactionBlock.js +44 -25
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts +152 -77
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +54 -44
- package/dist/src/lib/mystenlab/builder/Transactions.d.ts +133 -188
- package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/Transactions.js +52 -53
- package/dist/src/lib/mystenlab/builder/bcs.d.ts +1 -1
- package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/bcs.js +2 -2
- package/dist/src/lib/mystenlab/builder/index.js +6 -2
- package/dist/src/lib/mystenlab/builder/serializer.js +6 -8
- package/dist/src/lib/mystenlab/builder/utils.d.ts +1 -1
- package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/utils.js +4 -4
- package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
- package/dist/src/lib/mystenlab/framework/framework.d.ts +6 -6
- package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/framework/framework.js +22 -25
- package/dist/src/lib/mystenlab/framework/index.js +6 -2
- package/dist/src/lib/mystenlab/framework/sui-system-state.js +2 -2
- package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +2 -2
- package/dist/src/lib/mystenlab/types/coin.d.ts +13 -11
- package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/coin.js +20 -19
- package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
- package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/common.js +22 -22
- package/dist/src/lib/mystenlab/types/events.d.ts +15 -15
- package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/events.js +17 -17
- package/dist/src/lib/mystenlab/types/index.js +6 -2
- package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
- package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/normalized.js +41 -41
- package/dist/src/lib/mystenlab/types/objects.d.ts +51 -51
- package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/objects.js +96 -106
- package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
- package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/option.js +2 -3
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +55 -29
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/sui-bcs.js +29 -5
- package/dist/src/lib/mystenlab/types/transactions.d.ts +625 -625
- package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/transactions.js +178 -194
- package/dist/src/lib/mystenlab/types/validator.d.ts +13 -13
- package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/validator.js +124 -124
- package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
- package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
- package/dist/src/lib/resources/walrusConfig.js +37 -0
- package/dist/src/lib/rpcClient.d.ts +5 -0
- package/dist/src/lib/rpcClient.d.ts.map +1 -0
- package/dist/src/lib/rpcClient.js +74 -0
- package/dist/src/lib/stakingBuilder.d.ts +10 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
- package/dist/src/lib/stakingBuilder.js +59 -7
- package/dist/src/lib/stakingTransaction.d.ts +0 -1
- package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
- package/dist/src/lib/stakingTransaction.js +36 -18
- package/dist/src/lib/tokenTransferBuilder.d.ts +93 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +266 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts +59 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferTransaction.js +272 -0
- package/dist/src/lib/transaction.d.ts +21 -4
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +144 -17
- package/dist/src/lib/transactionBuilder.d.ts +13 -4
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +34 -4
- package/dist/src/lib/transactionBuilderFactory.d.ts +11 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +32 -1
- package/dist/src/lib/transferBuilder.d.ts +58 -1
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +310 -24
- package/dist/src/lib/transferTransaction.d.ts +6 -1
- package/dist/src/lib/transferTransaction.d.ts.map +1 -1
- package/dist/src/lib/transferTransaction.js +129 -12
- package/dist/src/lib/unstakingBuilder.js +6 -6
- package/dist/src/lib/unstakingTransaction.d.ts +0 -1
- package/dist/src/lib/unstakingTransaction.d.ts.map +1 -1
- package/dist/src/lib/unstakingTransaction.js +31 -17
- package/dist/src/lib/utils.d.ts +24 -3
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +295 -22
- package/dist/src/lib/walrusStakingBuilder.d.ts +77 -0
- package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingBuilder.js +276 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingTransaction.js +289 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.js +173 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.js +190 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/sui.d.ts +46 -8
- package/dist/src/sui.d.ts.map +1 -1
- package/dist/src/sui.js +525 -37
- package/dist/src/suiToken.d.ts +22 -0
- package/dist/src/suiToken.d.ts.map +1 -0
- package/dist/src/suiToken.js +61 -0
- package/dist/src/tsui.js +1 -1
- package/dist/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/local_fullnode/RpcClient.d.ts +60 -0
- package/dist/test/local_fullnode/RpcClient.d.ts.map +1 -0
- package/dist/test/local_fullnode/RpcClient.js +111 -0
- package/dist/test/local_fullnode/faucet.d.ts +6 -0
- package/dist/test/local_fullnode/faucet.d.ts.map +1 -0
- package/dist/test/local_fullnode/faucet.js +17 -0
- package/dist/test/local_fullnode/transactions.d.ts +2 -0
- package/dist/test/local_fullnode/transactions.d.ts.map +1 -0
- package/dist/test/local_fullnode/transactions.js +190 -0
- package/dist/test/resources/sui.d.ts +458 -0
- package/dist/test/resources/sui.d.ts.map +1 -0
- package/dist/test/resources/sui.js +632 -0
- package/dist/test/unit/compareTransactionBlocks.d.ts +2 -0
- package/dist/test/unit/compareTransactionBlocks.d.ts.map +1 -0
- package/dist/test/unit/compareTransactionBlocks.js +64 -0
- package/dist/test/unit/getBuilderFactory.d.ts +3 -0
- package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/getBuilderFactory.js +10 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +72 -0
- package/dist/test/unit/sui.d.ts +2 -0
- package/dist/test/unit/sui.d.ts.map +1 -0
- package/dist/test/unit/sui.js +2423 -0
- package/dist/test/unit/suiToken.d.ts +2 -0
- package/dist/test/unit/suiToken.d.ts.map +1 -0
- package/dist/test/unit/suiToken.js +39 -0
- package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/customTransactionBuilder.js +106 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.js +294 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +431 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +639 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +1181 -0
- package/dist/test/unit/transactionBuilder/unstakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unstakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unstakingBuilder.js +115 -0
- package/dist/test/unit/transactionBuilder/walrusStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/walrusStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/walrusStakingBuilder.js +289 -0
- package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.js +181 -0
- package/dist/test/unit/transferTransaction.d.ts +2 -0
- package/dist/test/unit/transferTransaction.d.ts.map +1 -0
- package/dist/test/unit/transferTransaction.js +94 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +186 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -12
- package/.eslintignore +0 -6
- package/.mocharc.yml +0 -7
- package/CHANGELOG.md +0 -450
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unstakingBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/unstakingBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,115 @@
|
|
|
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 = __importStar(require("assert"));
|
|
40
|
+
const getBuilderFactory_1 = require("../getBuilderFactory");
|
|
41
|
+
const testData = __importStar(require("../../resources/sui"));
|
|
42
|
+
const should_1 = __importDefault(require("should"));
|
|
43
|
+
const utils_1 = __importDefault(require("../../../src/lib/utils"));
|
|
44
|
+
const iface_1 = require("../../../src/lib/iface");
|
|
45
|
+
describe('Sui unstaking Builder', () => {
|
|
46
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsui');
|
|
47
|
+
function testUnstakingBuilder(amount) {
|
|
48
|
+
describe(`Success (amount=${amount})`, () => {
|
|
49
|
+
async function assertMatchesFixture(txBuilder, rebuild = true) {
|
|
50
|
+
const tx = (await txBuilder.build());
|
|
51
|
+
tx.suiTransaction.tx.should.eql(amount === undefined ? testData.txBlockUnstakeNoAmount : testData.txBlockUnstakeWithAmount, JSON.stringify(tx.suiTransaction.tx));
|
|
52
|
+
const rawTx = tx.toBroadcastFormat();
|
|
53
|
+
assert.deepStrictEqual(utils_1.default.isValidRawTransaction(rawTx), true);
|
|
54
|
+
assert.deepStrictEqual(rawTx, amount === undefined ? testData.WITHDRAW_STAKED_SUI : testData.WITHDRAW_STAKED_SUI_WITH_AMOUNT);
|
|
55
|
+
assert.deepStrictEqual(tx.inputs, [
|
|
56
|
+
{
|
|
57
|
+
address: '0xee6dfc3da32e21541a2aeadfcd250f8a0a23bb7abda9c8988407fc32068c3746',
|
|
58
|
+
value: amount === undefined ? 'AMOUNT_UNKNOWN' : amount.toString(),
|
|
59
|
+
coin: 'tsui',
|
|
60
|
+
},
|
|
61
|
+
]);
|
|
62
|
+
assert.deepStrictEqual(tx.outputs, [
|
|
63
|
+
{
|
|
64
|
+
address: '0x9882188ba3e8070a9bb06ae9446cf607914ee8ee58ed8306a3e3afff5a1bbb71',
|
|
65
|
+
value: amount === undefined ? 'AMOUNT_UNKNOWN' : amount.toString(),
|
|
66
|
+
coin: 'tsui',
|
|
67
|
+
},
|
|
68
|
+
]);
|
|
69
|
+
if (rebuild) {
|
|
70
|
+
const txBuilder = factory.from(rawTx);
|
|
71
|
+
await assertMatchesFixture(txBuilder, false);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
it(`should build a unstaking tx`, async function () {
|
|
75
|
+
const txBuilder = factory.getUnstakingBuilder();
|
|
76
|
+
txBuilder.type(iface_1.SuiTransactionType.WithdrawStake);
|
|
77
|
+
txBuilder.sender(testData.sender.address);
|
|
78
|
+
txBuilder.unstake({ ...testData.requestWithdrawStakedSui, amount });
|
|
79
|
+
txBuilder.gasData(testData.gasData);
|
|
80
|
+
await assertMatchesFixture(txBuilder);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
testUnstakingBuilder(undefined);
|
|
85
|
+
testUnstakingBuilder(1e9);
|
|
86
|
+
describe('Fail', () => {
|
|
87
|
+
it('should fail for invalid sender', async function () {
|
|
88
|
+
const builder = factory.getUnstakingBuilder();
|
|
89
|
+
(0, should_1.default)(() => builder.sender('randomString')).throwError('Invalid or missing sender, got: randomString');
|
|
90
|
+
});
|
|
91
|
+
it('should fail for invalid gasData', function () {
|
|
92
|
+
const builder = factory.getUnstakingBuilder();
|
|
93
|
+
(0, should_1.default)(() => builder.gasData(testData.invalidGasOwner)).throwError(`Invalid gas address ${testData.invalidGasOwner.owner}`);
|
|
94
|
+
});
|
|
95
|
+
it('should fail for invalid gasBudget', function () {
|
|
96
|
+
const builder = factory.getUnstakingBuilder();
|
|
97
|
+
(0, should_1.default)(() => builder.gasData(testData.invalidGasBudget)).throwError('Invalid gas budget -1');
|
|
98
|
+
});
|
|
99
|
+
it('should fail for invalid gasPayment', function () {
|
|
100
|
+
const builder = factory.getUnstakingBuilder();
|
|
101
|
+
const invalidGasPayment = {
|
|
102
|
+
...testData.gasDataWithoutGasPayment,
|
|
103
|
+
payment: [
|
|
104
|
+
{
|
|
105
|
+
objectId: '',
|
|
106
|
+
version: -1,
|
|
107
|
+
digest: '',
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
};
|
|
111
|
+
(0, should_1.default)(() => builder.gasData(invalidGasPayment)).throwError('Invalid payment, invalid or missing version');
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zdGFraW5nQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdW5zdGFraW5nQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw0REFBeUQ7QUFDekQsOERBQWdEO0FBQ2hELG9EQUE0QjtBQUM1QixtRUFBMkM7QUFFM0Msa0RBQThGO0FBRzlGLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUUxQyxTQUFTLG9CQUFvQixDQUFDLE1BQTBCO1FBQ3RELFFBQVEsQ0FBQyxtQkFBbUIsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFO1lBQzFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxTQUEyQixFQUFFLE9BQU8sR0FBRyxJQUFJO2dCQUM3RSxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFxRCxDQUFDO2dCQUV6RixFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUM3QixNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsRUFDMUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUNyQyxDQUFDO2dCQUNGLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsZUFBZSxDQUFDLGVBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakUsTUFBTSxD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QixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtZQUN2QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM5QyxNQUFNLGlCQUFpQixHQUFHO2dCQUN4QixHQUFHLFFBQVEsQ0FBQyx3QkFBd0I7Z0JBQ3BDLE9BQU8sRUFBRTtvQkFDUDt3QkFDRSxRQUFRLEVBQUUsRUFBRTt3QkFDWixPQUFPLEVBQUUsQ0FBQyxDQUFDO3dCQUNYLE1BQU0sRUFBRSxFQUFFO3FCQUNYO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUM3RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3N1aSc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiBhcyBTdWlUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3VpVHJhbnNhY3Rpb25UeXBlLCBVbnN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuaW1wb3J0IHsgVW5zdGFraW5nQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5cbmRlc2NyaWJlKCdTdWkgdW5zdGFraW5nIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSgndHN1aScpO1xuXG4gIGZ1bmN0aW9uIHRlc3RVbnN0YWtpbmdCdWlsZGVyKGFtb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgZGVzY3JpYmUoYFN1Y2Nlc3MgKGFtb3VudD0ke2Ftb3VudH0pYCwgKCkgPT4ge1xuICAgICAgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0TWF0Y2hlc0ZpeHR1cmUodHhCdWlsZGVyOiBVbnN0YWtpbmdCdWlsZGVyLCByZWJ1aWxkID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgU3VpVHJhbnNhY3Rpb248VW5zdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+O1xuXG4gICAgICAgIHR4LnN1aVRyYW5zYWN0aW9uLnR4LnNob3VsZC5lcWwoXG4gICAgICAgICAgYW1vdW50ID09PSB1bmRlZmluZWQgPyB0ZXN0RGF0YS50eEJsb2NrVW5zdGFrZU5vQW1vdW50IDogdGVzdERhdGEudHhCbG9ja1Vuc3Rha2VXaXRoQW1vdW50LFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHR4LnN1aVRyYW5zYWN0aW9uLnR4KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgICAgICAgcmF3VHgsXG4gICAgICAgICAgYW1vdW50ID09PSB1bmRlZmluZWQgPyB0ZXN0RGF0YS5XSVRIRFJBV19TVEFLRURfU1VJIDogdGVzdERhdGEuV0lUSERSQVdfU1RBS0VEX1NVSV9XSVRIX0FNT1VOVFxuICAgICAgICApO1xuICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHR4LmlucHV0cywgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweGVlNmRmYzNkYTMyZTIxNTQxYTJhZWFkZmNkMjUwZjhhMGEyM2JiN2FiZGE5Yzg5ODg0MDdmYzMyMDY4YzM3NDYnLFxuICAgICAgICAgICAgdmFsdWU6IGFtb3VudCA9PT0gdW5kZWZpbmVkID8gJ0FNT1VOVF9VTktOT1dOJyA6IGFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgICAgY29pbjogJ3RzdWknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHR4Lm91dHB1dHMsIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHg5ODgyMTg4YmEzZTgwNzBhOWJiMDZhZTk0NDZjZjYwNzkxNGVlOGVlNThlZDgzMDZhM2UzYWZmZjVhMWJiYjcxJyxcbiAgICAgICAgICAgIHZhbHVlOiBhbW91bnQgPT09IHVuZGVmaW5lZCA/ICdBTU9VTlRfVU5LTk9XTicgOiBhbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGNvaW46ICd0c3VpJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVidWlsZCkge1xuICAgICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdUeCkgYXMgVW5zdGFraW5nQnVpbGRlcjtcbiAgICAgICAgICBhd2FpdCBhc3NlcnRNYXRjaGVzRml4dHVyZSh0eEJ1aWxkZXIsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpdChgc2hvdWxkIGJ1aWxkIGEgdW5zdGFraW5nIHR4YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFVuc3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLldpdGhkcmF3U3Rha2UpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLnNlbmRlci5hZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnVuc3Rha2UoeyAuLi50ZXN0RGF0YS5yZXF1ZXN0V2l0aGRyYXdTdGFrZWRTdWksIGFtb3VudCB9KTtcbiAgICAgICAgdHhCdWlsZGVyLmdhc0RhdGEodGVzdERhdGEuZ2FzRGF0YSk7XG4gICAgICAgIGF3YWl0IGFzc2VydE1hdGNoZXNGaXh0dXJlKHR4QnVpbGRlcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHRlc3RVbnN0YWtpbmdCdWlsZGVyKHVuZGVmaW5lZCk7XG4gIHRlc3RVbnN0YWtpbmdCdWlsZGVyKDFlOSk7XG5cbiAgZGVzY3JpYmUoJ0ZhaWwnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbnZhbGlkIHNlbmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFVuc3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLnNlbmRlcigncmFuZG9tU3RyaW5nJykpLnRocm93RXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBzZW5kZXIsIGdvdDogcmFuZG9tU3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgZ2FzRGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFVuc3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLmdhc0RhdGEodGVzdERhdGEuaW52YWxpZEdhc093bmVyKSkudGhyb3dFcnJvcihcbiAgICAgICAgYEludmFsaWQgZ2FzIGFkZHJlc3MgJHt0ZXN0RGF0YS5pbnZhbGlkR2FzT3duZXIub3duZXJ9YFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgaW52YWxpZCBnYXNCdWRnZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRVbnN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT4gYnVpbGRlci5nYXNEYXRhKHRlc3REYXRhLmludmFsaWRHYXNCdWRnZXQpKS50aHJvd0Vycm9yKCdJbnZhbGlkIGdhcyBidWRnZXQgLTEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgaW52YWxpZCBnYXNQYXltZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VW5zdGFraW5nQnVpbGRlcigpO1xuICAgICAgY29uc3QgaW52YWxpZEdhc1BheW1lbnQgPSB7XG4gICAgICAgIC4uLnRlc3REYXRhLmdhc0RhdGFXaXRob3V0R2FzUGF5bWVudCxcbiAgICAgICAgcGF5bWVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9iamVjdElkOiAnJyxcbiAgICAgICAgICAgIHZlcnNpb246IC0xLFxuICAgICAgICAgICAgZGlnZXN0OiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLmdhc0RhdGEoaW52YWxpZEdhc1BheW1lbnQpKS50aHJvd0Vycm9yKCdJbnZhbGlkIHBheW1lbnQsIGludmFsaWQgb3IgbWlzc2luZyB2ZXJzaW9uJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walrusStakingBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/walrusStakingBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,289 @@
|
|
|
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 getBuilderFactory_1 = require("../getBuilderFactory");
|
|
41
|
+
const testData = __importStar(require("../../resources/sui"));
|
|
42
|
+
const should_1 = __importDefault(require("should"));
|
|
43
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
44
|
+
const utils_1 = __importDefault(require("../../../src/lib/utils"));
|
|
45
|
+
const transaction_1 = require("../../../src/lib/transaction");
|
|
46
|
+
const iface_1 = require("../../../src/lib/iface");
|
|
47
|
+
describe('Walrus Staking Builder', () => {
|
|
48
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsui:wal');
|
|
49
|
+
describe('Succeed', () => {
|
|
50
|
+
it('should build a staking tx', async function () {
|
|
51
|
+
const txBuilder = factory.getWalrusStakingBuilder();
|
|
52
|
+
txBuilder.type(iface_1.SuiTransactionType.WalrusStakeWithPool);
|
|
53
|
+
txBuilder.sender(testData.sender.address);
|
|
54
|
+
txBuilder.stake([testData.requestWalrusStakeWithPool]);
|
|
55
|
+
txBuilder.gasData(testData.gasData);
|
|
56
|
+
txBuilder.inputObjects([testData.walToken]);
|
|
57
|
+
const tx = await txBuilder.build();
|
|
58
|
+
(0, assert_1.default)(tx instanceof transaction_1.Transaction);
|
|
59
|
+
tx.type.should.equal(sdk_core_1.TransactionType.StakingAdd);
|
|
60
|
+
tx.inputs.length.should.equal(1);
|
|
61
|
+
tx.inputs[0].should.deepEqual({
|
|
62
|
+
address: testData.sender.address,
|
|
63
|
+
value: testData.STAKING_AMOUNT.toString(),
|
|
64
|
+
coin: 'tsui:wal',
|
|
65
|
+
});
|
|
66
|
+
tx.outputs.length.should.equal(1);
|
|
67
|
+
tx.outputs[0].should.deepEqual({
|
|
68
|
+
address: testData.requestWalrusStakeWithPool.validatorAddress,
|
|
69
|
+
value: testData.requestWalrusStakeWithPool.amount.toString(),
|
|
70
|
+
coin: 'tsui:wal',
|
|
71
|
+
});
|
|
72
|
+
const rawTx = tx.toBroadcastFormat();
|
|
73
|
+
utils_1.default.isValidRawTransaction(rawTx).should.be.true();
|
|
74
|
+
const rebuilder = factory.from(rawTx);
|
|
75
|
+
rebuilder.addSignature({ pub: testData.sender.publicKey }, Buffer.from(testData.sender.signatureHex));
|
|
76
|
+
const rebuiltTx = await rebuilder.build();
|
|
77
|
+
rebuiltTx.toBroadcastFormat().should.equal(rawTx);
|
|
78
|
+
tx.suiTransaction.gasData.owner.should.equal(testData.gasData.owner);
|
|
79
|
+
tx.suiTransaction.gasData.price.should.equal(testData.gasData.price);
|
|
80
|
+
tx.suiTransaction.gasData.budget.should.equal(testData.gasData.budget);
|
|
81
|
+
tx.suiTransaction.gasData.payment.length.should.equal(testData.gasData.payment.length);
|
|
82
|
+
const ptb = tx.suiTransaction.tx;
|
|
83
|
+
ptb.inputs.length.should.equal(5); // WAL object, Staking shared object, Amount, Validator
|
|
84
|
+
ptb.transactions[0].kind.should.equal('SplitCoins'); // Only providing one WAL token
|
|
85
|
+
should_1.default.not.exist(tx.suiTransaction.fundsInAddressBalance);
|
|
86
|
+
});
|
|
87
|
+
it('should build a staking tx for multiple gas objects and WAL tokens', async function () {
|
|
88
|
+
const numberOfInputObjects = 100;
|
|
89
|
+
const numberOfGasPaymentObjects = 10;
|
|
90
|
+
const txBuilder = factory.getWalrusStakingBuilder();
|
|
91
|
+
txBuilder.type(iface_1.SuiTransactionType.WalrusStakeWithPool);
|
|
92
|
+
txBuilder.sender(testData.sender.address);
|
|
93
|
+
txBuilder.stake([testData.requestWalrusStakeWithPool]);
|
|
94
|
+
const gasData = {
|
|
95
|
+
...testData.gasData,
|
|
96
|
+
payment: testData.generateObjects(numberOfGasPaymentObjects),
|
|
97
|
+
};
|
|
98
|
+
txBuilder.gasData(gasData);
|
|
99
|
+
txBuilder.inputObjects(testData.generateObjects(numberOfInputObjects));
|
|
100
|
+
const tx = await txBuilder.build();
|
|
101
|
+
(0, assert_1.default)(tx instanceof transaction_1.Transaction);
|
|
102
|
+
tx.type.should.equal(sdk_core_1.TransactionType.StakingAdd);
|
|
103
|
+
tx.inputs.length.should.equal(1);
|
|
104
|
+
tx.inputs[0].should.deepEqual({
|
|
105
|
+
address: testData.sender.address,
|
|
106
|
+
value: testData.STAKING_AMOUNT.toString(),
|
|
107
|
+
coin: 'tsui:wal',
|
|
108
|
+
});
|
|
109
|
+
tx.outputs.length.should.equal(1);
|
|
110
|
+
tx.outputs[0].should.deepEqual({
|
|
111
|
+
address: testData.requestWalrusStakeWithPool.validatorAddress,
|
|
112
|
+
value: testData.requestWalrusStakeWithPool.amount.toString(),
|
|
113
|
+
coin: 'tsui:wal',
|
|
114
|
+
});
|
|
115
|
+
tx.suiTransaction.gasData.owner.should.equal(gasData.owner);
|
|
116
|
+
tx.suiTransaction.gasData.price.should.equal(gasData.price);
|
|
117
|
+
tx.suiTransaction.gasData.budget.should.equal(gasData.budget);
|
|
118
|
+
tx.suiTransaction.gasData.payment.length.should.equal(10);
|
|
119
|
+
const ptb = tx.suiTransaction.tx;
|
|
120
|
+
ptb.inputs.length.should.equal(numberOfInputObjects + 4);
|
|
121
|
+
ptb.transactions[0].kind.should.equal('MergeCoins'); // Merge all input objects provided
|
|
122
|
+
ptb.transactions[0].sources.length.should.equal(numberOfInputObjects - 1);
|
|
123
|
+
ptb.transactions[1].kind.should.equal('SplitCoins'); // Split the desired amount off of the input object
|
|
124
|
+
const rawTx = tx.toBroadcastFormat();
|
|
125
|
+
utils_1.default.isValidRawTransaction(rawTx).should.be.true();
|
|
126
|
+
const rebuilder = factory.from(rawTx);
|
|
127
|
+
rebuilder.addSignature({ pub: testData.sender.publicKey }, Buffer.from(testData.sender.signatureHex));
|
|
128
|
+
const rebuiltTx = await rebuilder.build();
|
|
129
|
+
rebuiltTx.toBroadcastFormat().should.equal(rawTx);
|
|
130
|
+
rebuiltTx.toJson().gasData.payment.length.should.equal(numberOfGasPaymentObjects);
|
|
131
|
+
rebuiltTx.toJson().inputObjects.length.should.equal(numberOfInputObjects);
|
|
132
|
+
});
|
|
133
|
+
it('should build a staking tx with mixed WAL coin objects and address balance', async function () {
|
|
134
|
+
const addrBal = testData.STAKING_AMOUNT.toString();
|
|
135
|
+
const txBuilder = factory.getWalrusStakingBuilder();
|
|
136
|
+
txBuilder.type(iface_1.SuiTransactionType.WalrusStakeWithPool);
|
|
137
|
+
txBuilder.sender(testData.sender.address);
|
|
138
|
+
txBuilder.stake([testData.requestWalrusStakeWithPool]);
|
|
139
|
+
txBuilder.gasData(testData.gasData);
|
|
140
|
+
txBuilder.inputObjects([testData.walToken]);
|
|
141
|
+
txBuilder.fundsInAddressBalance(addrBal);
|
|
142
|
+
const tx = await txBuilder.build();
|
|
143
|
+
(0, assert_1.default)(tx instanceof transaction_1.Transaction);
|
|
144
|
+
tx.type.should.equal(sdk_core_1.TransactionType.StakingAdd);
|
|
145
|
+
should_1.default.exist(tx.suiTransaction.fundsInAddressBalance);
|
|
146
|
+
tx.suiTransaction.fundsInAddressBalance.should.equal(addrBal);
|
|
147
|
+
const ptb = tx.suiTransaction.tx;
|
|
148
|
+
// redeem_funds MoveCall, mergeCoins(walCoin, redeemedCoin), splitCoins, stake_with_pool MoveCall,
|
|
149
|
+
// transferObjects(stakedWals), transferObjects(residualWal)
|
|
150
|
+
const kinds = ptb.transactions.map((t) => t.kind);
|
|
151
|
+
kinds.should.containEql('MoveCall'); // redeem_funds
|
|
152
|
+
kinds.should.containEql('MergeCoins'); // merge redeemed into existing coin
|
|
153
|
+
kinds.should.containEql('SplitCoins');
|
|
154
|
+
kinds.filter((k) => k === 'TransferObjects').length.should.equal(2); // staked WALs + residual WAL
|
|
155
|
+
const rawTx = tx.toBroadcastFormat();
|
|
156
|
+
utils_1.default.isValidRawTransaction(rawTx).should.be.true();
|
|
157
|
+
// Round-trip: rebuild from raw transaction
|
|
158
|
+
const rebuilder = factory.from(rawTx);
|
|
159
|
+
rebuilder.addSignature({ pub: testData.sender.publicKey }, Buffer.from(testData.sender.signatureHex));
|
|
160
|
+
const rebuiltTx = await rebuilder.build();
|
|
161
|
+
rebuiltTx.toBroadcastFormat().should.equal(rawTx);
|
|
162
|
+
should_1.default.exist(rebuiltTx.toJson().fundsInAddressBalance);
|
|
163
|
+
rebuiltTx.toJson().fundsInAddressBalance.should.equal(addrBal);
|
|
164
|
+
rebuiltTx.toJson().inputObjects.length.should.equal(1);
|
|
165
|
+
});
|
|
166
|
+
it('should build a staking tx with address balance only (exact amount)', async function () {
|
|
167
|
+
const addrBal = testData.STAKING_AMOUNT.toString();
|
|
168
|
+
const txBuilder = factory.getWalrusStakingBuilder();
|
|
169
|
+
txBuilder.type(iface_1.SuiTransactionType.WalrusStakeWithPool);
|
|
170
|
+
txBuilder.sender(testData.sender.address);
|
|
171
|
+
txBuilder.stake([testData.requestWalrusStakeWithPool]);
|
|
172
|
+
txBuilder.gasData(testData.gasData);
|
|
173
|
+
txBuilder.fundsInAddressBalance(addrBal);
|
|
174
|
+
const tx = await txBuilder.build();
|
|
175
|
+
(0, assert_1.default)(tx instanceof transaction_1.Transaction);
|
|
176
|
+
tx.type.should.equal(sdk_core_1.TransactionType.StakingAdd);
|
|
177
|
+
should_1.default.exist(tx.suiTransaction.fundsInAddressBalance);
|
|
178
|
+
tx.suiTransaction.fundsInAddressBalance.should.equal(addrBal);
|
|
179
|
+
const ptb = tx.suiTransaction.tx;
|
|
180
|
+
// No coin object inputs — first tx is MoveCall (redeem_funds)
|
|
181
|
+
ptb.transactions[0].kind.should.equal('MoveCall');
|
|
182
|
+
// Verify redeem_funds uses WAL type, not SUI
|
|
183
|
+
const redeemCall = ptb.transactions[0];
|
|
184
|
+
redeemCall.typeArguments[0].should.containEql('::wal::WAL');
|
|
185
|
+
// BalanceWithdrawal input must carry the WAL coin type, not SUI
|
|
186
|
+
const withdrawalInput = ptb.inputs.find((i) => {
|
|
187
|
+
const v = i?.BalanceWithdrawal ?? i?.value?.BalanceWithdrawal;
|
|
188
|
+
return v !== undefined;
|
|
189
|
+
});
|
|
190
|
+
should_1.default.exist(withdrawalInput);
|
|
191
|
+
const bw = withdrawalInput.BalanceWithdrawal ?? withdrawalInput.value?.BalanceWithdrawal;
|
|
192
|
+
// typeArg is { Balance: <TypeTag> } where TypeTag encodes the coin type
|
|
193
|
+
JSON.stringify(bw.typeArg).should.containEql('wal');
|
|
194
|
+
// Two TransferObjects: staked WALs + residual WAL
|
|
195
|
+
const transferTxs = ptb.transactions.filter((t) => t.kind === 'TransferObjects');
|
|
196
|
+
transferTxs.length.should.equal(2);
|
|
197
|
+
should_1.default.not.exist(tx.toJson().inputObjects);
|
|
198
|
+
const rawTx = tx.toBroadcastFormat();
|
|
199
|
+
utils_1.default.isValidRawTransaction(rawTx).should.be.true();
|
|
200
|
+
// Round-trip: rebuild from raw transaction
|
|
201
|
+
const rebuilder = factory.from(rawTx);
|
|
202
|
+
rebuilder.addSignature({ pub: testData.sender.publicKey }, Buffer.from(testData.sender.signatureHex));
|
|
203
|
+
const rebuiltTx = await rebuilder.build();
|
|
204
|
+
rebuiltTx.toBroadcastFormat().should.equal(rawTx);
|
|
205
|
+
should_1.default.exist(rebuiltTx.toJson().fundsInAddressBalance);
|
|
206
|
+
rebuiltTx.toJson().fundsInAddressBalance.should.equal(addrBal);
|
|
207
|
+
});
|
|
208
|
+
it('should build a staking tx with address balance only (partial / residual transfer)', async function () {
|
|
209
|
+
// Request is for STAKING_AMOUNT but we fund double that from addr-bal — residual goes back to sender
|
|
210
|
+
const addrBal = (testData.STAKING_AMOUNT * 2).toString();
|
|
211
|
+
const txBuilder = factory.getWalrusStakingBuilder();
|
|
212
|
+
txBuilder.type(iface_1.SuiTransactionType.WalrusStakeWithPool);
|
|
213
|
+
txBuilder.sender(testData.sender.address);
|
|
214
|
+
txBuilder.stake([testData.requestWalrusStakeWithPool]);
|
|
215
|
+
txBuilder.gasData(testData.gasData);
|
|
216
|
+
txBuilder.fundsInAddressBalance(addrBal);
|
|
217
|
+
const tx = await txBuilder.build();
|
|
218
|
+
(0, assert_1.default)(tx instanceof transaction_1.Transaction);
|
|
219
|
+
should_1.default.exist(tx.suiTransaction.fundsInAddressBalance);
|
|
220
|
+
tx.suiTransaction.fundsInAddressBalance.should.equal(addrBal);
|
|
221
|
+
const ptb = tx.suiTransaction.tx;
|
|
222
|
+
// residual WAL coin must be transferred back to sender
|
|
223
|
+
const transferTxs = ptb.transactions.filter((t) => t.kind === 'TransferObjects');
|
|
224
|
+
transferTxs.length.should.equal(2);
|
|
225
|
+
const rawTx = tx.toBroadcastFormat();
|
|
226
|
+
utils_1.default.isValidRawTransaction(rawTx).should.be.true();
|
|
227
|
+
const rebuilder = factory.from(rawTx);
|
|
228
|
+
rebuilder.addSignature({ pub: testData.sender.publicKey }, Buffer.from(testData.sender.signatureHex));
|
|
229
|
+
const rebuiltTx = await rebuilder.build();
|
|
230
|
+
rebuiltTx.toBroadcastFormat().should.equal(rawTx);
|
|
231
|
+
should_1.default.exist(rebuiltTx.toJson().fundsInAddressBalance);
|
|
232
|
+
rebuiltTx.toJson().fundsInAddressBalance.should.equal(addrBal);
|
|
233
|
+
});
|
|
234
|
+
it('should have default fundsInAddressBalance of 0 when setter not called', async function () {
|
|
235
|
+
const txBuilder = factory.getWalrusStakingBuilder();
|
|
236
|
+
txBuilder.type(iface_1.SuiTransactionType.WalrusStakeWithPool);
|
|
237
|
+
txBuilder.sender(testData.sender.address);
|
|
238
|
+
txBuilder.stake([testData.requestWalrusStakeWithPool]);
|
|
239
|
+
txBuilder.gasData(testData.gasData);
|
|
240
|
+
txBuilder.inputObjects([testData.walToken]);
|
|
241
|
+
const tx = await txBuilder.build();
|
|
242
|
+
(0, assert_1.default)(tx instanceof transaction_1.Transaction);
|
|
243
|
+
should_1.default.not.exist(tx.suiTransaction.fundsInAddressBalance);
|
|
244
|
+
// PTB should not contain a redeem_funds call
|
|
245
|
+
const ptb = tx.suiTransaction.tx;
|
|
246
|
+
const moveCalls = ptb.transactions.filter((t) => t.kind === 'MoveCall');
|
|
247
|
+
moveCalls.every((mc) => !mc.target?.includes('redeem_funds')).should.be.true();
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
describe('Fail', () => {
|
|
251
|
+
it('should fail for invalid sender', async function () {
|
|
252
|
+
const builder = factory.getWalrusStakingBuilder();
|
|
253
|
+
(0, should_1.default)(() => builder.sender('randomString')).throwError('Invalid or missing sender, got: randomString');
|
|
254
|
+
});
|
|
255
|
+
it('should fail for invalid gasData', function () {
|
|
256
|
+
const builder = factory.getWalrusStakingBuilder();
|
|
257
|
+
(0, should_1.default)(() => builder.gasData(testData.invalidGasOwner)).throwError(`Invalid gas address ${testData.invalidGasOwner.owner}`);
|
|
258
|
+
});
|
|
259
|
+
it('should fail for invalid gasBudget', function () {
|
|
260
|
+
const builder = factory.getWalrusStakingBuilder();
|
|
261
|
+
(0, should_1.default)(() => builder.gasData(testData.invalidGasBudget)).throwError('Invalid gas budget -1');
|
|
262
|
+
});
|
|
263
|
+
it('should fail for invalid gasPayment', function () {
|
|
264
|
+
const builder = factory.getWalrusStakingBuilder();
|
|
265
|
+
const invalidGasPayment = {
|
|
266
|
+
...testData.gasDataWithoutGasPayment,
|
|
267
|
+
payment: [
|
|
268
|
+
{
|
|
269
|
+
objectId: '',
|
|
270
|
+
version: -1,
|
|
271
|
+
digest: '',
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
};
|
|
275
|
+
(0, should_1.default)(() => builder.gasData(invalidGasPayment)).throwError('Invalid payment, invalid or missing version');
|
|
276
|
+
});
|
|
277
|
+
it('should fail when neither inputObjects nor fundsInAddressBalance is provided', async function () {
|
|
278
|
+
const txBuilder = factory.getWalrusStakingBuilder();
|
|
279
|
+
txBuilder.type(iface_1.SuiTransactionType.WalrusStakeWithPool);
|
|
280
|
+
txBuilder.sender(testData.sender.address);
|
|
281
|
+
txBuilder.stake([testData.requestWalrusStakeWithPool]);
|
|
282
|
+
txBuilder.gasData(testData.gasData);
|
|
283
|
+
await txBuilder
|
|
284
|
+
.build()
|
|
285
|
+
.should.be.rejectedWith('either inputObjects or fundsInAddressBalance is required before building');
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FscnVzU3Rha2luZ0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3dhbHJ1c1N0YWtpbmdCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDREQUF5RDtBQUN6RCw4REFBZ0Q7QUFDaEQsb0RBQTRCO0FBQzVCLG1EQUF1RDtBQUN2RCxtRUFBMkM7QUFDM0MsOERBQTZFO0FBQzdFLGtEQUE0RDtBQUU1RCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUEscUNBQWlCLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFFOUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDdkIsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEtBQUs7WUFDbkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztZQUN2RCxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFbkMsSUFBQSxnQkFBTSxFQUFDLEVBQUUsWUFBWSx5QkFBYyxDQUFDLENBQUM7WUFDckMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQzVCLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQ2hDLEtBQUssRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtnQkFDekMsSUFBSSxFQUFFLFVBQVU7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxRQUFRLENBQUMsMEJBQTBCLENBQUMsZ0JBQWdCO2dCQUM3RCxLQUFLLEVBQUUsUUFBUSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQzVELElBQUksRUFBRSxVQUFVO2FBQ2pCLENBQUMsQ0FBQztZQUVILE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLGVBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3RHLE1BQU0sU0FBUyxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbEQsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRSxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZGLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1REFBdUQ7WUFDMUYsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtZQUNwRixnQkFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEtBQUs7WUFDM0UsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7WUFDakMsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLENBQUM7WUFFckMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztZQUV2RCxNQUFNLE9BQU8sR0FBRztnQkFDZCxHQUFHLFFBQVEsQ0FBQyxPQUFPO2dCQUNuQixPQUFPLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQzthQUM3RCxDQUFDO1lBQ0YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQixTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRW5DLElBQUEsZ0JBQU0sRUFBQyxFQUFFLFlBQVkseUJBQWMsQ0FBQyxDQUFDO1lBQ3JDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUM1QixPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPO2dCQUNoQyxLQUFLLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pDLElBQUksRUFBRSxVQUFVO2FBQ2pCLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUM3QixPQUFPLEVBQUUsUUFBUSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQjtnQkFDN0QsS0FBSyxFQUFFLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUM1RCxJQUFJLEVBQUUsVUFBVTthQUNqQixDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUQsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5RCxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFMUQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDakMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6RCxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsbUNBQW1DO1lBQ3hGLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxtREFBbUQ7WUFFeEcsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEcsTUFBTSxTQUFTLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQ2xGLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxZQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO1lBQ25GLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFbkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztZQUN2RCxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRW5DLElBQUEsZ0JBQU0sRUFBQyxFQUFFLFlBQVkseUJBQWMsQ0FBQyxDQUFDO1lBQ3JDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN0RCxFQUFFLENBQUMsY0FBYyxDQUFDLHFCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFL0QsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDakMsa0dBQWtHO1lBQ2xHLDREQUE0RDtZQUM1RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBZTtZQUNwRCxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztZQUMzRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0QyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDZCQUE2QjtZQUUxRyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNyQyxlQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVwRCwyQ0FBMkM7WUFDM0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEcsTUFBTSxTQUFTLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN2RCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMscUJBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEtBQUs7WUFDNUUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVuRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNwRCxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdkQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QyxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVuQyxJQUFBLGdCQUFNLEVBQUMsRUFBRSxZQUFZLHlCQUFjLENBQUMsQ0FBQztZQUNyQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEQsRUFBRSxDQUFDLGNBQWMsQ0FBQyxxQkFBc0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRS9ELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2pDLDhEQUE4RDtZQUM5RCxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRWxELDZDQUE2QztZQUM3QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBUSxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU1RCxnRUFBZ0U7WUFDaEUsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGlCQUFpQixJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUM7Z0JBQzlELE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQztZQUN6QixDQUFDLENBQVEsQ0FBQztZQUNWLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxpQkFBaUIsSUFBSSxlQUFlLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDO1lBQ3pGLHdFQUF3RTtZQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXBELGtEQUFrRDtZQUNsRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RGLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVuQyxnQkFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTNDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLGVBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXBELDJDQUEyQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUN0RyxNQUFNLFNBQVMsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBc0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEtBQUs7WUFDM0YscUdBQXFHO1lBQ3JHLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUV6RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNwRCxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdkQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QyxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVuQyxJQUFBLGdCQUFNLEVBQUMsRUFBRSxZQUFZLHlCQUFjLENBQUMsQ0FBQztZQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEQsRUFBRSxDQUFDLGNBQWMsQ0FBQyxxQkFBc0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRS9ELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2pDLHVEQUF1RDtZQUN2RCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RGLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVuQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNyQyxlQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVwRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUN0RyxNQUFNLFNBQVMsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBc0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVFQUF1RSxFQUFFLEtBQUs7WUFDL0UsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztZQUN2RCxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFbkMsSUFBQSxnQkFBTSxFQUFDLEVBQUUsWUFBWSx5QkFBYyxDQUFDLENBQUM7WUFDckMsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUUxRCw2Q0FBNkM7WUFDN0MsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDN0UsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1FBQ3BCLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2xELElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDMUcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUNBQWlDLEVBQUU7WUFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbEQsSUFBQSxnQkFBTSxFQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUNoRSx1QkFBdUIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FDeEQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFO1lBQ3RDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2xELElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0NBQW9DLEVBQUU7WUFDdkMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbEQsTUFBTSxpQkFBaUIsR0FBRztnQkFDeEIsR0FBRyxRQUFRLENBQUMsd0JBQXdCO2dCQUNwQyxPQUFPLEVBQUU7b0JBQ1A7d0JBQ0UsUUFBUSxFQUFFLEVBQUU7d0JBQ1osT0FBTyxFQUFFLENBQUMsQ0FBQzt3QkFDWCxNQUFNLEVBQUUsRUFBRTtxQkFDWDtpQkFDRjthQUNGLENBQUM7WUFDRixJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDN0csQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkVBQTZFLEVBQUUsS0FBSztZQUNyRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNwRCxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdkQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sU0FBUztpQkFDWixLQUFLLEVBQUU7aUJBQ1AsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsMEVBQTBFLENBQUMsQ0FBQztRQUN4RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uL2dldEJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9zdWknO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gYXMgU3VpVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFN1aVRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuXG5kZXNjcmliZSgnV2FscnVzIFN0YWtpbmcgQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCd0c3VpOndhbCcpO1xuXG4gIGRlc2NyaWJlKCdTdWNjZWVkJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzdGFraW5nIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRXYWxydXNTdGFraW5nQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1N0YWtlV2l0aFBvb2wpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2UoW3Rlc3REYXRhLnJlcXVlc3RXYWxydXNTdGFrZVdpdGhQb29sXSk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzRGF0YSh0ZXN0RGF0YS5nYXNEYXRhKTtcbiAgICAgIHR4QnVpbGRlci5pbnB1dE9iamVjdHMoW3Rlc3REYXRhLndhbFRva2VuXSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBhc3NlcnQodHggaW5zdGFuY2VvZiBTdWlUcmFuc2FjdGlvbik7XG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FkZCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuc2VuZGVyLmFkZHJlc3MsXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5TVEFLSU5HX0FNT1VOVC50b1N0cmluZygpLFxuICAgICAgICBjb2luOiAndHN1aTp3YWwnLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5yZXF1ZXN0V2FscnVzU3Rha2VXaXRoUG9vbC52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICB2YWx1ZTogdGVzdERhdGEucmVxdWVzdFdhbHJ1c1N0YWtlV2l0aFBvb2wuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNvaW46ICd0c3VpOndhbCcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgY29uc3QgcmVidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4KTtcbiAgICAgIHJlYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHRlc3REYXRhLnNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20odGVzdERhdGEuc2VuZGVyLnNpZ25hdHVyZUhleCkpO1xuICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsZGVyLmJ1aWxkKCk7XG4gICAgICByZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3VHgpO1xuXG4gICAgICB0eC5zdWlUcmFuc2FjdGlvbi5nYXNEYXRhLm93bmVyLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5nYXNEYXRhLm93bmVyKTtcbiAgICAgIHR4LnN1aVRyYW5zYWN0aW9uLmdhc0RhdGEucHJpY2Uuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdhc0RhdGEucHJpY2UpO1xuICAgICAgdHguc3VpVHJhbnNhY3Rpb24uZ2FzRGF0YS5idWRnZXQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdhc0RhdGEuYnVkZ2V0KTtcbiAgICAgIHR4LnN1aVRyYW5zYWN0aW9uLmdhc0RhdGEucGF5bWVudC5sZW5ndGguc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdhc0RhdGEucGF5bWVudC5sZW5ndGgpO1xuXG4gICAgICBjb25zdCBwdGIgPSB0eC5zdWlUcmFuc2FjdGlvbi50eDtcbiAgICAgIHB0Yi5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCg1KTsgLy8gV0FMIG9iamVjdCwgU3Rha2luZyBzaGFyZWQgb2JqZWN0LCBBbW91bnQsIFZhbGlkYXRvclxuICAgICAgcHRiLnRyYW5zYWN0aW9uc1swXS5raW5kLnNob3VsZC5lcXVhbCgnU3BsaXRDb2lucycpOyAvLyBPbmx5IHByb3ZpZGluZyBvbmUgV0FMIHRva2VuXG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4LnN1aVRyYW5zYWN0aW9uLmZ1bmRzSW5BZGRyZXNzQmFsYW5jZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc3Rha2luZyB0eCBmb3IgbXVsdGlwbGUgZ2FzIG9iamVjdHMgYW5kIFdBTCB0b2tlbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBudW1iZXJPZklucHV0T2JqZWN0cyA9IDEwMDtcbiAgICAgIGNvbnN0IG51bWJlck9mR2FzUGF5bWVudE9iamVjdHMgPSAxMDtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRXYWxydXNTdGFraW5nQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1N0YWtlV2l0aFBvb2wpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2UoW3Rlc3REYXRhLnJlcXVlc3RXYWxydXNTdGFrZVdpdGhQb29sXSk7XG5cbiAgICAgIGNvbnN0IGdhc0RhdGEgPSB7XG4gICAgICAgIC4uLnRlc3REYXRhLmdhc0RhdGEsXG4gICAgICAgIHBheW1lbnQ6IHRlc3REYXRhLmdlbmVyYXRlT2JqZWN0cyhudW1iZXJPZkdhc1BheW1lbnRPYmplY3RzKSxcbiAgICAgIH07XG4gICAgICB0eEJ1aWxkZXIuZ2FzRGF0YShnYXNEYXRhKTtcbiAgICAgIHR4QnVpbGRlci5pbnB1dE9iamVjdHModGVzdERhdGEuZ2VuZXJhdGVPYmplY3RzKG51bWJlck9mSW5wdXRPYmplY3RzKSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBhc3NlcnQodHggaW5zdGFuY2VvZiBTdWlUcmFuc2FjdGlvbik7XG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FkZCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuc2VuZGVyLmFkZHJlc3MsXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5TVEFLSU5HX0FNT1VOVC50b1N0cmluZygpLFxuICAgICAgICBjb2luOiAndHN1aTp3YWwnLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5yZXF1ZXN0V2FscnVzU3Rha2VXaXRoUG9vbC52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICB2YWx1ZTogdGVzdERhdGEucmVxdWVzdFdhbHJ1c1N0YWtlV2l0aFBvb2wuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNvaW46ICd0c3VpOndhbCcsXG4gICAgICB9KTtcbiAgICAgIHR4LnN1aVRyYW5zYWN0aW9uLmdhc0RhdGEub3duZXIuc2hvdWxkLmVxdWFsKGdhc0RhdGEub3duZXIpO1xuICAgICAgdHguc3VpVHJhbnNhY3Rpb24uZ2FzRGF0YS5wcmljZS5zaG91bGQuZXF1YWwoZ2FzRGF0YS5wcmljZSk7XG4gICAgICB0eC5zdWlUcmFuc2FjdGlvbi5nYXNEYXRhLmJ1ZGdldC5zaG91bGQuZXF1YWwoZ2FzRGF0YS5idWRnZXQpO1xuICAgICAgdHguc3VpVHJhbnNhY3Rpb24uZ2FzRGF0YS5wYXltZW50Lmxlbmd0aC5zaG91bGQuZXF1YWwoMTApO1xuXG4gICAgICBjb25zdCBwdGIgPSB0eC5zdWlUcmFuc2FjdGlvbi50eDtcbiAgICAgIHB0Yi5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbChudW1iZXJPZklucHV0T2JqZWN0cyArIDQpO1xuICAgICAgcHRiLnRyYW5zYWN0aW9uc1swXS5raW5kLnNob3VsZC5lcXVhbCgnTWVyZ2VDb2lucycpOyAvLyBNZXJnZSBhbGwgaW5wdXQgb2JqZWN0cyBwcm92aWRlZFxuICAgICAgcHRiLnRyYW5zYWN0aW9uc1swXS5zb3VyY2VzLmxlbmd0aC5zaG91bGQuZXF1YWwobnVtYmVyT2ZJbnB1dE9iamVjdHMgLSAxKTtcbiAgICAgIHB0Yi50cmFuc2FjdGlvbnNbMV0ua2luZC5zaG91bGQuZXF1YWwoJ1NwbGl0Q29pbnMnKTsgLy8gU3BsaXQgdGhlIGRlc2lyZWQgYW1vdW50IG9mZiBvZiB0aGUgaW5wdXQgb2JqZWN0XG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvbnN0IHJlYnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdUeCk7XG4gICAgICByZWJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiB0ZXN0RGF0YS5zZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNlbmRlci5zaWduYXR1cmVIZXgpKTtcbiAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IHJlYnVpbGRlci5idWlsZCgpO1xuICAgICAgcmVidWlsdFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHJhd1R4KTtcbiAgICAgIHJlYnVpbHRUeC50b0pzb24oKS5nYXNEYXRhLnBheW1lbnQubGVuZ3RoLnNob3VsZC5lcXVhbChudW1iZXJPZkdhc1BheW1lbnRPYmplY3RzKTtcbiAgICAgIHJlYnVpbHRUeC50b0pzb24oKS5pbnB1dE9iamVjdHMhLmxlbmd0aC5zaG91bGQuZXF1YWwobnVtYmVyT2ZJbnB1dE9iamVjdHMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHN0YWtpbmcgdHggd2l0aCBtaXhlZCBXQUwgY29pbiBvYmplY3RzIGFuZCBhZGRyZXNzIGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyQmFsID0gdGVzdERhdGEuU1RBS0lOR19BTU9VTlQudG9TdHJpbmcoKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRXYWxydXNTdGFraW5nQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1N0YWtlV2l0aFBvb2wpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2UoW3Rlc3REYXRhLnJlcXVlc3RXYWxydXNTdGFrZVdpdGhQb29sXSk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzRGF0YSh0ZXN0RGF0YS5nYXNEYXRhKTtcbiAgICAgIHR4QnVpbGRlci5pbnB1dE9iamVjdHMoW3Rlc3REYXRhLndhbFRva2VuXSk7XG4gICAgICB0eEJ1aWxkZXIuZnVuZHNJbkFkZHJlc3NCYWxhbmNlKGFkZHJCYWwpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgYXNzZXJ0KHR4IGluc3RhbmNlb2YgU3VpVHJhbnNhY3Rpb24pO1xuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBZGQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4LnN1aVRyYW5zYWN0aW9uLmZ1bmRzSW5BZGRyZXNzQmFsYW5jZSk7XG4gICAgICB0eC5zdWlUcmFuc2FjdGlvbi5mdW5kc0luQWRkcmVzc0JhbGFuY2UhLnNob3VsZC5lcXVhbChhZGRyQmFsKTtcblxuICAgICAgY29uc3QgcHRiID0gdHguc3VpVHJhbnNhY3Rpb24udHg7XG4gICAgICAvLyByZWRlZW1fZnVuZHMgTW92ZUNhbGwsIG1lcmdlQ29pbnMod2FsQ29pbiwgcmVkZWVtZWRDb2luKSwgc3BsaXRDb2lucywgc3Rha2Vfd2l0aF9wb29sIE1vdmVDYWxsLFxuICAgICAgLy8gdHJhbnNmZXJPYmplY3RzKHN0YWtlZFdhbHMpLCB0cmFuc2Zlck9iamVjdHMocmVzaWR1YWxXYWwpXG4gICAgICBjb25zdCBraW5kcyA9IHB0Yi50cmFuc2FjdGlvbnMubWFwKCh0OiBhbnkpID0+IHQua2luZCk7XG4gICAgICBraW5kcy5zaG91bGQuY29udGFpbkVxbCgnTW92ZUNhbGwnKTsgLy8gcmVkZWVtX2Z1bmRzXG4gICAgICBraW5kcy5zaG91bGQuY29udGFpbkVxbCgnTWVyZ2VDb2lucycpOyAvLyBtZXJnZSByZWRlZW1lZCBpbnRvIGV4aXN0aW5nIGNvaW5cbiAgICAgIGtpbmRzLnNob3VsZC5jb250YWluRXFsKCdTcGxpdENvaW5zJyk7XG4gICAgICBraW5kcy5maWx0ZXIoKGs6IHN0cmluZykgPT4gayA9PT0gJ1RyYW5zZmVyT2JqZWN0cycpLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7IC8vIHN0YWtlZCBXQUxzICsgcmVzaWR1YWwgV0FMXG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgLy8gUm91bmQtdHJpcDogcmVidWlsZCBmcm9tIHJhdyB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgcmVidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4KTtcbiAgICAgIHJlYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHRlc3REYXRhLnNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20odGVzdERhdGEuc2VuZGVyLnNpZ25hdHVyZUhleCkpO1xuICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsZGVyLmJ1aWxkKCk7XG4gICAgICByZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3VHgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHJlYnVpbHRUeC50b0pzb24oKS5mdW5kc0luQWRkcmVzc0JhbGFuY2UpO1xuICAgICAgcmVidWlsdFR4LnRvSnNvbigpLmZ1bmRzSW5BZGRyZXNzQmFsYW5jZSEuc2hvdWxkLmVxdWFsKGFkZHJCYWwpO1xuICAgICAgcmVidWlsdFR4LnRvSnNvbigpLmlucHV0T2JqZWN0cyEubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzdGFraW5nIHR4IHdpdGggYWRkcmVzcyBiYWxhbmNlIG9ubHkgKGV4YWN0IGFtb3VudCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyQmFsID0gdGVzdERhdGEuU1RBS0lOR19BTU9VTlQudG9TdHJpbmcoKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRXYWxydXNTdGFraW5nQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1N0YWtlV2l0aFBvb2wpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2UoW3Rlc3REYXRhLnJlcXVlc3RXYWxydXNTdGFrZVdpdGhQb29sXSk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzRGF0YSh0ZXN0RGF0YS5nYXNEYXRhKTtcbiAgICAgIHR4QnVpbGRlci5mdW5kc0luQWRkcmVzc0JhbGFuY2UoYWRkckJhbCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBhc3NlcnQodHggaW5zdGFuY2VvZiBTdWlUcmFuc2FjdGlvbik7XG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FkZCk7XG4gICAgICBzaG91bGQuZXhpc3QodHguc3VpVHJhbnNhY3Rpb24uZnVuZHNJbkFkZHJlc3NCYWxhbmNlKTtcbiAgICAgIHR4LnN1aVRyYW5zYWN0aW9uLmZ1bmRzSW5BZGRyZXNzQmFsYW5jZSEuc2hvdWxkLmVxdWFsKGFkZHJCYWwpO1xuXG4gICAgICBjb25zdCBwdGIgPSB0eC5zdWlUcmFuc2FjdGlvbi50eDtcbiAgICAgIC8vIE5vIGNvaW4gb2JqZWN0IGlucHV0cyDigJQgZmlyc3QgdHggaXMgTW92ZUNhbGwgKHJlZGVlbV9mdW5kcylcbiAgICAgIHB0Yi50cmFuc2FjdGlvbnNbMF0ua2luZC5zaG91bGQuZXF1YWwoJ01vdmVDYWxsJyk7XG5cbiAgICAgIC8vIFZlcmlmeSByZWRlZW1fZnVuZHMgdXNlcyBXQUwgdHlwZSwgbm90IFNVSVxuICAgICAgY29uc3QgcmVkZWVtQ2FsbCA9IHB0Yi50cmFuc2FjdGlvbnNbMF0gYXMgYW55O1xuICAgICAgcmVkZWVtQ2FsbC50eXBlQXJndW1lbnRzWzBdLnNob3VsZC5jb250YWluRXFsKCc6OndhbDo6V0FMJyk7XG5cbiAgICAgIC8vIEJhbGFuY2VXaXRoZHJhd2FsIGlucHV0IG11c3QgY2FycnkgdGhlIFdBTCBjb2luIHR5cGUsIG5vdCBTVUlcbiAgICAgIGNvbnN0IHdpdGhkcmF3YWxJbnB1dCA9IHB0Yi5pbnB1dHMuZmluZCgoaTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSBpPy5CYWxhbmNlV2l0aGRyYXdhbCA/PyBpPy52YWx1ZT8uQmFsYW5jZVdpdGhkcmF3YWw7XG4gICAgICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQ7XG4gICAgICB9KSBhcyBhbnk7XG4gICAgICBzaG91bGQuZXhpc3Qod2l0aGRyYXdhbElucHV0KTtcbiAgICAgIGNvbnN0IGJ3ID0gd2l0aGRyYXdhbElucHV0LkJhbGFuY2VXaXRoZHJhd2FsID8/IHdpdGhkcmF3YWxJbnB1dC52YWx1ZT8uQmFsYW5jZVdpdGhkcmF3YWw7XG4gICAgICAvLyB0eXBlQXJnIGlzIHsgQmFsYW5jZTogPFR5cGVUYWc+IH0gd2hlcmUgVHlwZVRhZyBlbmNvZGVzIHRoZSBjb2luIHR5cGVcbiAgICAgIEpTT04uc3RyaW5naWZ5KGJ3LnR5cGVBcmcpLnNob3VsZC5jb250YWluRXFsKCd3YWwnKTtcblxuICAgICAgLy8gVHdvIFRyYW5zZmVyT2JqZWN0czogc3Rha2VkIFdBTHMgKyByZXNpZHVhbCBXQUxcbiAgICAgIGNvbnN0IHRyYW5zZmVyVHhzID0gcHRiLnRyYW5zYWN0aW9ucy5maWx0ZXIoKHQ6IGFueSkgPT4gdC5raW5kID09PSAnVHJhbnNmZXJPYmplY3RzJyk7XG4gICAgICB0cmFuc2ZlclR4cy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4LnRvSnNvbigpLmlucHV0T2JqZWN0cyk7XG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgLy8gUm91bmQtdHJpcDogcmVidWlsZCBmcm9tIHJhdyB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgcmVidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4KTtcbiAgICAgIHJlYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHRlc3REYXRhLnNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20odGVzdERhdGEuc2VuZGVyLnNpZ25hdHVyZUhleCkpO1xuICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsZGVyLmJ1aWxkKCk7XG4gICAgICByZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3VHgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHJlYnVpbHRUeC50b0pzb24oKS5mdW5kc0luQWRkcmVzc0JhbGFuY2UpO1xuICAgICAgcmVidWlsdFR4LnRvSnNvbigpLmZ1bmRzSW5BZGRyZXNzQmFsYW5jZSEuc2hvdWxkLmVxdWFsKGFkZHJCYWwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHN0YWtpbmcgdHggd2l0aCBhZGRyZXNzIGJhbGFuY2Ugb25seSAocGFydGlhbCAvIHJlc2lkdWFsIHRyYW5zZmVyKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFJlcXVlc3QgaXMgZm9yIFNUQUtJTkdfQU1PVU5UIGJ1dCB3ZSBmdW5kIGRvdWJsZSB0aGF0IGZyb20gYWRkci1iYWwg4oCUIHJlc2lkdWFsIGdvZXMgYmFjayB0byBzZW5kZXJcbiAgICAgIGNvbnN0IGFkZHJCYWwgPSAodGVzdERhdGEuU1RBS0lOR19BTU9VTlQgKiAyKS50b1N0cmluZygpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFdhbHJ1c1N0YWtpbmdCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIudHlwZShTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzU3Rha2VXaXRoUG9vbCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLnNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5zdGFrZShbdGVzdERhdGEucmVxdWVzdFdhbHJ1c1N0YWtlV2l0aFBvb2xdKTtcbiAgICAgIHR4QnVpbGRlci5nYXNEYXRhKHRlc3REYXRhLmdhc0RhdGEpO1xuICAgICAgdHhCdWlsZGVyLmZ1bmRzSW5BZGRyZXNzQmFsYW5jZShhZGRyQmFsKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGFzc2VydCh0eCBpbnN0YW5jZW9mIFN1aVRyYW5zYWN0aW9uKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eC5zdWlUcmFuc2FjdGlvbi5mdW5kc0luQWRkcmVzc0JhbGFuY2UpO1xuICAgICAgdHguc3VpVHJhbnNhY3Rpb24uZnVuZHNJbkFkZHJlc3NCYWxhbmNlIS5zaG91bGQuZXF1YWwoYWRkckJhbCk7XG5cbiAgICAgIGNvbnN0IHB0YiA9IHR4LnN1aVRyYW5zYWN0aW9uLnR4O1xuICAgICAgLy8gcmVzaWR1YWwgV0FMIGNvaW4gbXVzdCBiZSB0cmFuc2ZlcnJlZCBiYWNrIHRvIHNlbmRlclxuICAgICAgY29uc3QgdHJhbnNmZXJUeHMgPSBwdGIudHJhbnNhY3Rpb25zLmZpbHRlcigodDogYW55KSA9PiB0LmtpbmQgPT09ICdUcmFuc2Zlck9iamVjdHMnKTtcbiAgICAgIHRyYW5zZmVyVHhzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgY29uc3QgcmVidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4KTtcbiAgICAgIHJlYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHRlc3REYXRhLnNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20odGVzdERhdGEuc2VuZGVyLnNpZ25hdHVyZUhleCkpO1xuICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsZGVyLmJ1aWxkKCk7XG4gICAgICByZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3VHgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHJlYnVpbHRUeC50b0pzb24oKS5mdW5kc0luQWRkcmVzc0JhbGFuY2UpO1xuICAgICAgcmVidWlsdFR4LnRvSnNvbigpLmZ1bmRzSW5BZGRyZXNzQmFsYW5jZSEuc2hvdWxkLmVxdWFsKGFkZHJCYWwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGRlZmF1bHQgZnVuZHNJbkFkZHJlc3NCYWxhbmNlIG9mIDAgd2hlbiBzZXR0ZXIgbm90IGNhbGxlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0V2FscnVzU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci50eXBlKFN1aVRyYW5zYWN0aW9uVHlwZS5XYWxydXNTdGFrZVdpdGhQb29sKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtlKFt0ZXN0RGF0YS5yZXF1ZXN0V2FscnVzU3Rha2VXaXRoUG9vbF0pO1xuICAgICAgdHhCdWlsZGVyLmdhc0RhdGEodGVzdERhdGEuZ2FzRGF0YSk7XG4gICAgICB0eEJ1aWxkZXIuaW5wdXRPYmplY3RzKFt0ZXN0RGF0YS53YWxUb2tlbl0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgYXNzZXJ0KHR4IGluc3RhbmNlb2YgU3VpVHJhbnNhY3Rpb24pO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eC5zdWlUcmFuc2FjdGlvbi5mdW5kc0luQWRkcmVzc0JhbGFuY2UpO1xuXG4gICAgICAvLyBQVEIgc2hvdWxkIG5vdCBjb250YWluIGEgcmVkZWVtX2Z1bmRzIGNhbGxcbiAgICAgIGNvbnN0IHB0YiA9IHR4LnN1aVRyYW5zYWN0aW9uLnR4O1xuICAgICAgY29uc3QgbW92ZUNhbGxzID0gcHRiLnRyYW5zYWN0aW9ucy5maWx0ZXIoKHQ6IGFueSkgPT4gdC5raW5kID09PSAnTW92ZUNhbGwnKTtcbiAgICAgIG1vdmVDYWxscy5ldmVyeSgobWM6IGFueSkgPT4gIW1jLnRhcmdldD8uaW5jbHVkZXMoJ3JlZGVlbV9mdW5kcycpKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRmFpbCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgc2VuZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0V2FscnVzU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLnNlbmRlcigncmFuZG9tU3RyaW5nJykpLnRocm93RXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBzZW5kZXIsIGdvdDogcmFuZG9tU3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgZ2FzRGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFdhbHJ1c1N0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT4gYnVpbGRlci5nYXNEYXRhKHRlc3REYXRhLmludmFsaWRHYXNPd25lcikpLnRocm93RXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGdhcyBhZGRyZXNzICR7dGVzdERhdGEuaW52YWxpZEdhc093bmVyLm93bmVyfWBcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgZ2FzQnVkZ2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0V2FscnVzU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLmdhc0RhdGEodGVzdERhdGEuaW52YWxpZEdhc0J1ZGdldCkpLnRocm93RXJyb3IoJ0ludmFsaWQgZ2FzIGJ1ZGdldCAtMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbnZhbGlkIGdhc1BheW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRXYWxydXNTdGFraW5nQnVpbGRlcigpO1xuICAgICAgY29uc3QgaW52YWxpZEdhc1BheW1lbnQgPSB7XG4gICAgICAgIC4uLnRlc3REYXRhLmdhc0RhdGFXaXRob3V0R2FzUGF5bWVudCxcbiAgICAgICAgcGF5bWVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9iamVjdElkOiAnJyxcbiAgICAgICAgICAgIHZlcnNpb246IC0xLFxuICAgICAgICAgICAgZGlnZXN0OiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLmdhc0RhdGEoaW52YWxpZEdhc1BheW1lbnQpKS50aHJvd0Vycm9yKCdJbnZhbGlkIHBheW1lbnQsIGludmFsaWQgb3IgbWlzc2luZyB2ZXJzaW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBuZWl0aGVyIGlucHV0T2JqZWN0cyBub3IgZnVuZHNJbkFkZHJlc3NCYWxhbmNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRXYWxydXNTdGFraW5nQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1N0YWtlV2l0aFBvb2wpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2UoW3Rlc3REYXRhLnJlcXVlc3RXYWxydXNTdGFrZVdpdGhQb29sXSk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzRGF0YSh0ZXN0RGF0YS5nYXNEYXRhKTtcbiAgICAgIGF3YWl0IHR4QnVpbGRlclxuICAgICAgICAuYnVpbGQoKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnZWl0aGVyIGlucHV0T2JqZWN0cyBvciBmdW5kc0luQWRkcmVzc0JhbGFuY2UgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walrusWithdrawBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/walrusWithdrawBuilder.ts"],"names":[],"mappings":""}
|