@bitgo-beta/sdk-coin-ethlike 1.0.1-beta.99 → 1.0.1-beta.990

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=walletInitialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletInitialization.d.ts","sourceRoot":"","sources":["../../../test/unit/walletInitialization.ts"],"names":[],"mappings":""}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
+ const src_1 = require("../../src");
42
+ const testData = __importStar(require("../resources"));
43
+ const getBuilder_1 = require("../getBuilder");
44
+ const statics_1 = require("@bitgo-beta/statics");
45
+ describe('EthLike wallet initialization', function () {
46
+ let txBuilder;
47
+ const initTxBuilder = () => {
48
+ txBuilder = new src_1.EthLikeTransactionBuilder(statics_1.coins.get('tbaseeth'), testData.baseChainCommon);
49
+ txBuilder.fee({
50
+ fee: '10000000000',
51
+ gasLimit: '6800000',
52
+ });
53
+ txBuilder.counter(1);
54
+ txBuilder.type(sdk_core_1.TransactionType.WalletInitialization);
55
+ txBuilder.walletVersion(1);
56
+ txBuilder.contract(testData.WALLET_FACTORY_ADDRESS);
57
+ txBuilder.salt('0x0');
58
+ };
59
+ describe('should build', () => {
60
+ it('an init transaction', async () => {
61
+ initTxBuilder();
62
+ txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
63
+ txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
64
+ txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
65
+ txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
66
+ const tx = await txBuilder.build();
67
+ tx.type.should.equal(sdk_core_1.TransactionType.WalletInitialization);
68
+ const txJson = tx.toJson();
69
+ txJson.gasLimit.should.equal('6800000');
70
+ txJson.gasPrice.should.equal('10000000000');
71
+ should_1.default.equal(txJson.nonce, 1);
72
+ should_1.default.equal(txJson.chainId, '0x14a34');
73
+ should_1.default.equal(tx.toBroadcastFormat(), testData.TX_BROADCAST);
74
+ });
75
+ it('a signed init transaction from serialized', async () => {
76
+ const newTxBuilder = new src_1.EthLikeTransactionBuilder(statics_1.coins.get('tbaseeth'), testData.baseChainCommon);
77
+ newTxBuilder.from(testData.TX_BROADCAST);
78
+ const newTx = await newTxBuilder.build();
79
+ should_1.default.equal(newTx.toBroadcastFormat(), testData.TX_BROADCAST);
80
+ should_1.default.equal(newTx.id, '0x6c2cb55b93bd39f47c1f57aacadce4bb7316775cf03feb86019a205d8c7be9b1');
81
+ const txJson = newTx.toJson();
82
+ should_1.default.exist(txJson.v);
83
+ should_1.default.exist(txJson.r);
84
+ should_1.default.exist(txJson.s);
85
+ should_1.default.exist(txJson.from);
86
+ });
87
+ it('a wallet initialization transaction with nonce 0', async () => {
88
+ initTxBuilder();
89
+ txBuilder.counter(0);
90
+ txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
91
+ txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
92
+ txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
93
+ txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
94
+ const tx = await txBuilder.build();
95
+ tx.type.should.equal(sdk_core_1.TransactionType.WalletInitialization);
96
+ const txJson = tx.toJson();
97
+ txJson.gasLimit.should.equal('6800000');
98
+ txJson.gasPrice.should.equal('10000000000');
99
+ should_1.default.equal(txJson.nonce, 0);
100
+ should_1.default.equal(txJson.chainId, '0x14a34');
101
+ });
102
+ it('an unsigned init transaction from serialized with 0-prefixed address', async () => {
103
+ initTxBuilder();
104
+ txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
105
+ txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
106
+ txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
107
+ const tx = await txBuilder.build();
108
+ const serialized = tx.toBroadcastFormat();
109
+ const newTxBuilder = new src_1.EthLikeTransactionBuilder(statics_1.coins.get('tbaseeth'), testData.baseChainCommon);
110
+ newTxBuilder.from(serialized);
111
+ const newTx = await newTxBuilder.build();
112
+ should_1.default.equal(newTx.toBroadcastFormat(), serialized);
113
+ });
114
+ it('an unsigned init transaction from serialized', async () => {
115
+ initTxBuilder();
116
+ txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
117
+ txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
118
+ txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
119
+ const tx = await txBuilder.build();
120
+ const serialized = tx.toBroadcastFormat();
121
+ const newTxBuilder = new src_1.EthLikeTransactionBuilder(statics_1.coins.get('tbaseeth'), testData.baseChainCommon);
122
+ newTxBuilder.from(serialized);
123
+ const newTx = await newTxBuilder.build();
124
+ should_1.default.equal(newTx.toBroadcastFormat(), serialized);
125
+ });
126
+ it('an unsigned transaction with final v check', async () => {
127
+ initTxBuilder();
128
+ txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
129
+ txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
130
+ txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
131
+ const tx = await txBuilder.build();
132
+ should_1.default.equal(tx.toJson().v, '0x02948b');
133
+ });
134
+ it('wallet deployment transaction for recovery', async () => {
135
+ const txBuilder = (0, getBuilder_1.getBuilder)('tbaseeth', testData.baseChainCommon);
136
+ txBuilder.type(sdk_core_1.TransactionType.RecoveryWalletDeployment);
137
+ txBuilder.data(testData.RECOVERY_WALLET_BYTE_CODE);
138
+ txBuilder.fee({
139
+ eip1559: {
140
+ maxFeePerGas: '100',
141
+ maxPriorityFeePerGas: '10',
142
+ },
143
+ fee: '100',
144
+ gasLimit: '10000',
145
+ });
146
+ txBuilder.counter(1);
147
+ const tx = await txBuilder.build();
148
+ const txJson = tx.toJson();
149
+ should_1.default.equal(txJson._type, 'EIP1559');
150
+ should_1.default.equal(txJson.gasLimit, '10000');
151
+ should_1.default.exists(tx.toBroadcastFormat());
152
+ });
153
+ it('fail when data is not passed recovery', async () => {
154
+ const txBuilder = (0, getBuilder_1.getBuilder)('tbaseeth', testData.baseChainCommon);
155
+ txBuilder.type(sdk_core_1.TransactionType.RecoveryWalletDeployment);
156
+ txBuilder.fee({
157
+ eip1559: {
158
+ maxFeePerGas: '100',
159
+ maxPriorityFeePerGas: '10',
160
+ },
161
+ fee: '100',
162
+ gasLimit: '10000',
163
+ });
164
+ txBuilder.counter(1);
165
+ await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract call data field');
166
+ });
167
+ });
168
+ });
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdGlhbGl6YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvd2FsbGV0SW5pdGlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbURBQXVEO0FBQ3ZELG1DQUFzRDtBQUN0RCx1REFBeUM7QUFDekMsOENBQTJDO0FBQzNDLGlEQUE0QztBQUU1QyxRQUFRLENBQUMsK0JBQStCLEVBQUU7SUFDeEMsSUFBSSxTQUFvQyxDQUFDO0lBQ3pDLE1BQU0sYUFBYSxHQUFHLEdBQVMsRUFBRTtRQUMvQixTQUFTLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRixTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ1osR0FBRyxFQUFFLGFBQWE7WUFDbEIsUUFBUSxFQUFFLFNBQVM7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNyRCxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtRQUM1QixFQUFFLENBQUMscUJBQXFCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbkMsYUFBYSxFQUFFLENBQUM7WUFFaEIsU0FBUyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFD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RSxLQUFLO29CQUNuQixvQkFBb0IsRUFBRSxJQUFJO2lCQUMzQjtnQkFDRCxHQUFHLEVBQUUsS0FBSztnQkFDVixRQUFRLEVBQUUsT0FBTzthQUNsQixDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDMUcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgRXRoTGlrZVRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4uL2dldEJ1aWxkZXInO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuZGVzY3JpYmUoJ0V0aExpa2Ugd2FsbGV0IGluaXRpYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBsZXQgdHhCdWlsZGVyOiBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyO1xuICBjb25zdCBpbml0VHhCdWlsZGVyID0gKCk6IHZvaWQgPT4ge1xuICAgIHR4QnVpbGRlciA9IG5ldyBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndGJhc2VldGgnKSwgdGVzdERhdGEuYmFzZUNoYWluQ29tbW9uKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnNjgwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKTtcbiAgICB0eEJ1aWxkZXIud2FsbGV0VmVyc2lvbigxKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QodGVzdERhdGEuV0FMTEVUX0ZBQ1RPUllfQUREUkVTUyk7XG4gICAgdHhCdWlsZGVyLnNhbHQoJzB4MCcpO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQnLCAoKSA9PiB7XG4gICAgaXQoJ2FuIGluaXQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBpbml0VHhCdWlsZGVyKCk7XG5cbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhlNmM0MzYyNmYxMTMxMmRlMjliMDAxMWZhOWRhNzFlYTNiYmEwZTlmJyk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4NzhjYWViNDUyNzE3MGU1MmY1NGQ5MzZlNGVlZjZmODMyNTBlMDFiYicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweGIxOTM4MjE1OTY3NDA4ZmZmN2M1OWM3N2FlNWU1MjgzYjU1YzhlMjYnKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWV8xIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZ2FzTGltaXQuc2hvdWxkLmVxdWFsKCc2ODAwMDAwJyk7XG4gICAgICB0eEpzb24uZ2FzUHJpY2Uuc2hvdWxkLmVxdWFsKCcxMDAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5ub25jZSwgMSk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmNoYWluSWQsICcweDE0YTM0Jyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuVFhfQlJPQURDQVNUKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHNpZ25lZCBpbml0IHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1R4QnVpbGRlciA9IG5ldyBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndGJhc2VldGgnKSwgdGVzdERhdGEuYmFzZUNoYWluQ29tbW9uKTtcbiAgICAgIG5ld1R4QnVpbGRlci5mcm9tKHRlc3REYXRhLlRYX0JST0FEQ0FTVCk7XG4gICAgICBjb25zdCBuZXdUeCA9IGF3YWl0IG5ld1R4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlRYX0JST0FEQ0FTVCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHguaWQsICcweDZjMmNiNTViOTNiZDM5ZjQ3YzFmNTdhYWNhZGNlNGJiNzMxNjc3NWNmMDNmZWI4NjAxOWEyMDVkOGM3YmU5YjEnKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IG5ld1R4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi52KTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24ucik7XG4gICAgICBzaG91bGQuZXhpc3QodHhKc29uLnMpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5mcm9tKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHdhbGxldCBpbml0aWFsaXphdGlvbiB0cmFuc2FjdGlvbiB3aXRoIG5vbmNlIDAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpbml0VHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigwKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhlNmM0MzYyNmYxMTMxMmRlMjliMDAxMWZhOWRhNzFlYTNiYmEwZTlmJyk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4NzhjYWViNDUyNzE3MGU1MmY1NGQ5MzZlNGVlZjZmODMyNTBlMDFiYicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweGIxOTM4MjE1OTY3NDA4ZmZmN2M1OWM3N2FlNWU1MjgzYjU1YzhlMjYnKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWV8xIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLmdhc0xpbWl0LnNob3VsZC5lcXVhbCgnNjgwMDAwMCcpO1xuICAgICAgdHhKc29uLmdhc1ByaWNlLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5jaGFpbklkLCAnMHgxNGEzNCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIHVuc2lnbmVkIGluaXQgdHJhbnNhY3Rpb24gZnJvbSBzZXJpYWxpemVkIHdpdGggMC1wcmVmaXhlZCBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweGU2YzQzNjI2ZjExMzEyZGUyOWIwMDExZmE5ZGE3MWVhM2JiYTBlOWYnKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHg3OGNhZWI0NTI3MTcwZTUyZjU0ZDkzNmU0ZWVmNmY4MzI1MGUwMWJiJyk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4YjE5MzgyMTU5Njc0MDhmZmY3YzU5Yzc3YWU1ZTUyODNiNTVjOGUyNicpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCBuZXdUeEJ1aWxkZXIgPSBuZXcgRXRoTGlrZVRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQoJ3RiYXNlZXRoJyksIHRlc3REYXRhLmJhc2VDaGFpbkNvbW1vbik7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3VHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgc2VyaWFsaXplZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gdW5zaWduZWQgaW5pdCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpbml0VHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4ZTZjNDM2MjZmMTEzMTJkZTI5YjAwMTFmYTlkYTcxZWEzYmJhMGU5ZicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweDc4Y2FlYjQ1MjcxNzBlNTJmNTRkOTM2ZTRlZWY2ZjgzMjUwZTAxYmInKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhiMTkzODIxNTk2NzQwOGZmZjdjNTljNzdhZTVlNTI4M2I1NWM4ZTI2Jyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IG5ld1R4QnVpbGRlciA9IG5ldyBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndGJhc2VldGgnKSwgdGVzdERhdGEuYmFzZUNoYWluQ29tbW9uKTtcbiAgICAgIG5ld1R4QnVpbGRlci5mcm9tKHNlcmlhbGl6ZWQpO1xuICAgICAgY29uc3QgbmV3VHggPSBhd2FpdCBuZXdUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCBzZXJpYWxpemVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbiB3aXRoIGZpbmFsIHYgY2hlY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICBpbml0VHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4ZTZjNDM2MjZmMTEzMTJkZTI5YjAwMTFmYTlkYTcxZWEzYmJhMGU5ZicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweDc4Y2FlYjQ1MjcxNzBlNTJmNTRkOTM2ZTRlZWY2ZjgzMjUwZTAxYmInKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhiMTkzODIxNTk2NzQwOGZmZjdjNTljNzdhZTVlNTI4M2I1NWM4ZTI2Jyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLnYsICcweDAyOTQ4YicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3dhbGxldCBkZXBsb3ltZW50IHRyYW5zYWN0aW9uIGZvciByZWNvdmVyeScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ3RiYXNlZXRoJywgdGVzdERhdGEuYmFzZUNoYWluQ29tbW9uKSBhcyBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlJlY292ZXJ5V2FsbGV0RGVwbG95bWVudCk7XG4gICAgICB0eEJ1aWxkZXIuZGF0YSh0ZXN0RGF0YS5SRUNPVkVSWV9XQUxMRVRfQllURV9DT0RFKTtcbiAgICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgICBlaXAxNTU5OiB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAnMTAwJyxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogJzEwJyxcbiAgICAgICAgfSxcbiAgICAgICAgZmVlOiAnMTAwJyxcbiAgICAgICAgZ2FzTGltaXQ6ICcxMDAwMCcsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5fdHlwZSwgJ0VJUDE1NTknKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZ2FzTGltaXQsICcxMDAwMCcpO1xuICAgICAgc2hvdWxkLmV4aXN0cyh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlsIHdoZW4gZGF0YSBpcyBub3QgcGFzc2VkIHJlY292ZXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcigndGJhc2VldGgnLCB0ZXN0RGF0YS5iYXNlQ2hhaW5Db21tb24pIGFzIEV0aExpa2VUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuUmVjb3ZlcnlXYWxsZXREZXBsb3ltZW50KTtcbiAgICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgICBlaXAxNTU5OiB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAnMTAwJyxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogJzEwJyxcbiAgICAgICAgfSxcbiAgICAgICAgZmVlOiAnMTAwJyxcbiAgICAgICAgZ2FzTGltaXQ6ICcxMDAwMCcsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBjYWxsIGRhdGEgZmllbGQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==