@bitgo-beta/sdk-coin-eos 1.3.19-beta.162 → 1.3.19-beta.1621
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/eos.d.ts +6 -3
- package/dist/src/eos.d.ts.map +1 -1
- package/dist/src/eos.js +48 -26
- package/dist/src/eosToken.d.ts +3 -1
- package/dist/src/eosToken.d.ts.map +1 -1
- package/dist/src/eosToken.js +9 -3
- package/dist/src/eosutil/eosabiprovider.d.ts.map +1 -1
- package/dist/src/eosutil/eosabiprovider.js +15 -1
- package/dist/src/index.js +6 -2
- package/dist/src/lib/enum.js +3 -3
- package/dist/src/lib/keyPair.d.ts +1 -3
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +2 -5
- package/dist/src/lib/utils.d.ts +0 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +1 -1
- package/dist/test/fixtures.d.ts +317 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +377 -0
- package/dist/test/unit/eos.d.ts +2 -0
- package/dist/test/unit/eos.d.ts.map +1 -0
- package/dist/test/unit/eos.js +472 -0
- package/dist/test/unit/eosToken.d.ts +2 -0
- package/dist/test/unit/eosToken.d.ts.map +1 -0
- package/dist/test/unit/eosToken.js +222 -0
- package/dist/test/unit/stringTextDecoder.d.ts +5 -0
- package/dist/test/unit/stringTextDecoder.d.ts.map +1 -0
- package/dist/test/unit/stringTextDecoder.js +48 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +13 -10
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -225
|
@@ -0,0 +1,222 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
require("should");
|
|
37
|
+
const _ = __importStar(require("lodash"));
|
|
38
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
39
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
40
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
41
|
+
const src_1 = require("../../src");
|
|
42
|
+
describe('EOS Token:', function () {
|
|
43
|
+
let bitgo;
|
|
44
|
+
let eosTokenCoin;
|
|
45
|
+
let baseCoin;
|
|
46
|
+
const tokenName = 'teos:CHEX';
|
|
47
|
+
before(function () {
|
|
48
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
49
|
+
bitgo.safeRegister('eos', src_1.Eos.createInstance);
|
|
50
|
+
bitgo.safeRegister('teos', src_1.Teos.createInstance);
|
|
51
|
+
src_1.EosToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
|
|
52
|
+
bitgo.safeRegister(name, coinConstructor);
|
|
53
|
+
});
|
|
54
|
+
bitgo.initializeTestVars();
|
|
55
|
+
eosTokenCoin = bitgo.coin(tokenName);
|
|
56
|
+
baseCoin = bitgo.coin('teos');
|
|
57
|
+
});
|
|
58
|
+
it('should return constants', function () {
|
|
59
|
+
eosTokenCoin.getChain().should.equal(tokenName);
|
|
60
|
+
eosTokenCoin.getBaseChain().should.equal('teos');
|
|
61
|
+
eosTokenCoin.getBaseFactor().should.equal(1e8);
|
|
62
|
+
eosTokenCoin.getFullName().should.equal('EOS Token');
|
|
63
|
+
eosTokenCoin.coin.should.equal('teos');
|
|
64
|
+
eosTokenCoin.decimalPlaces.should.equal(8);
|
|
65
|
+
eosTokenCoin.tokenContractAddress.should.equal('testtoken113');
|
|
66
|
+
eosTokenCoin.contractName.should.equal('testtoken113');
|
|
67
|
+
eosTokenCoin.contractAddress.should.equal('testtoken113');
|
|
68
|
+
eosTokenCoin.tokenContractAddress.should.equal(eosTokenCoin.contractName);
|
|
69
|
+
eosTokenCoin.tokenContractAddress.should.equal(eosTokenCoin.contractAddress);
|
|
70
|
+
});
|
|
71
|
+
describe('verify transaction', function () {
|
|
72
|
+
let wallet;
|
|
73
|
+
let verification;
|
|
74
|
+
let newTxPrebuild;
|
|
75
|
+
let newTxParams;
|
|
76
|
+
before(function () {
|
|
77
|
+
const walletData = {
|
|
78
|
+
id: '5a78dd561c6258a907f1eeaee132f796',
|
|
79
|
+
users: [
|
|
80
|
+
{
|
|
81
|
+
user: '543c11ed356d00cb7600000b98794503',
|
|
82
|
+
permissions: ['admin', 'view', 'spend'],
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
coin: 'teos',
|
|
86
|
+
label: 'Verification Wallet',
|
|
87
|
+
m: 2,
|
|
88
|
+
n: 3,
|
|
89
|
+
keys: [
|
|
90
|
+
'5a78dd56bfe424aa07aa068651b194fd',
|
|
91
|
+
'5a78dd5674a70eb4079f58797dfe2f5e',
|
|
92
|
+
'5a78dd561c6258a907f1eea9f1d079e2',
|
|
93
|
+
],
|
|
94
|
+
tags: ['5a78dd561c6258a907f1eeaee132f796'],
|
|
95
|
+
disableTransactionNotifications: false,
|
|
96
|
+
freeze: {},
|
|
97
|
+
deleted: false,
|
|
98
|
+
approvalsRequired: 1,
|
|
99
|
+
isCold: true,
|
|
100
|
+
coinSpecific: {},
|
|
101
|
+
clientFlags: [],
|
|
102
|
+
balance: 650000000,
|
|
103
|
+
confirmedBalance: 650000000,
|
|
104
|
+
spendableBalance: 650000000,
|
|
105
|
+
balanceString: '650000000',
|
|
106
|
+
confirmedBalanceString: '650000000',
|
|
107
|
+
spendableBalanceString: '650000000',
|
|
108
|
+
receiveAddress: {
|
|
109
|
+
id: '5a78de2bbfe424aa07aa131ec03c8dc1',
|
|
110
|
+
address: '78xczhaijyhek2',
|
|
111
|
+
chain: 0,
|
|
112
|
+
index: 0,
|
|
113
|
+
coin: 'teos',
|
|
114
|
+
wallet: '5a78dd561c6258a907f1eeaee132f796',
|
|
115
|
+
coinSpecific: {},
|
|
116
|
+
},
|
|
117
|
+
pendingApprovals: [],
|
|
118
|
+
};
|
|
119
|
+
wallet = new sdk_core_1.Wallet(bitgo, eosTokenCoin, walletData);
|
|
120
|
+
const userKeychain = {
|
|
121
|
+
prv: '5KJq565HTrgEJG9EbvJH5BLYTgioAyY27dT9am1kCtn2YVAJEYK',
|
|
122
|
+
pub: 'EOS6g7AAMQkhXp8j73E8BD4KRwtQevEsFgYx8htaQkRVhhXJMgkMZ',
|
|
123
|
+
};
|
|
124
|
+
const backupKeychain = {
|
|
125
|
+
prv: '5KZ1nXXCi5yXH8AjCJqjnCYHCVnhQa9YWGV2D14i8g221dxNwLW',
|
|
126
|
+
pub: 'EOS7gyDLNk12faVb1aqNxj1L2DpBerFkhAsxBs95yW3yxJpqvg9Mt',
|
|
127
|
+
};
|
|
128
|
+
const txPrebuild = {
|
|
129
|
+
recipients: [
|
|
130
|
+
{
|
|
131
|
+
address: 'lionteste212',
|
|
132
|
+
amount: '1000',
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
headers: {
|
|
136
|
+
expiration: '2021-10-28T03:56:09.180',
|
|
137
|
+
ref_block_num: 52755,
|
|
138
|
+
ref_block_prefix: 54626512,
|
|
139
|
+
},
|
|
140
|
+
txHex: '2a02a0053e5a8cf73a56ba0fda11e4d92e0238a4a2aa74fccf46d5a910746840591f7a6113ced08841030000000100408c7a02ea3055000000000085269d0003023432011042980ad29cb1ca000000572d3ccdcd0120ceb8437333427c00000000a8ed32322120ceb8437333427c20825019ab3ca98be803000000000000084348455800000000000000000000000000000000000000000000000000000000000000000000000000',
|
|
141
|
+
transaction: {
|
|
142
|
+
compression: 'none',
|
|
143
|
+
packed_trx: '591f7a6113ced08841030000000100408c7a02ea3055000000000085269d0003023432011042980ad29cb1ca000000572d3ccdcd0120ceb8437333427c00000000a8ed32322120ceb8437333427c20825019ab3ca98be80300000000000008434845580000000000',
|
|
144
|
+
signatures: [],
|
|
145
|
+
},
|
|
146
|
+
txid: '0bc7d8026af6710680e0f3e819ff7ddbbb3dff8a740846c76fd47f9386832edc',
|
|
147
|
+
isVotingTransaction: false,
|
|
148
|
+
coin: 'teos',
|
|
149
|
+
token: tokenName,
|
|
150
|
+
};
|
|
151
|
+
verification = {
|
|
152
|
+
disableNetworking: true,
|
|
153
|
+
keychains: {
|
|
154
|
+
user: { pub: userKeychain.pub },
|
|
155
|
+
backup: { pub: backupKeychain.pub },
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
const seed = Buffer.from('c3b09c24731be2851b624d9d5b3f60fa129695c24071768d15654bea207b7bb6', 'hex');
|
|
159
|
+
const keyPair = baseCoin.generateKeyPair(seed);
|
|
160
|
+
const txParams = {
|
|
161
|
+
txPrebuild,
|
|
162
|
+
prv: keyPair.prv,
|
|
163
|
+
recipients: [
|
|
164
|
+
{
|
|
165
|
+
address: 'lionteste212',
|
|
166
|
+
amount: '1000',
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
};
|
|
170
|
+
newTxPrebuild = () => {
|
|
171
|
+
return _.cloneDeep(txPrebuild);
|
|
172
|
+
};
|
|
173
|
+
newTxParams = () => {
|
|
174
|
+
return _.cloneDeep(txParams);
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
it('should verify token transaction', async function () {
|
|
178
|
+
const txParams = newTxParams();
|
|
179
|
+
const txPrebuild = newTxPrebuild();
|
|
180
|
+
const validTransaction = await eosTokenCoin.verifyTransaction({ txParams, txPrebuild, wallet, verification });
|
|
181
|
+
validTransaction.should.equal(true);
|
|
182
|
+
});
|
|
183
|
+
it('should throw if expected receive symbol is different than actual receive symbol', async function () {
|
|
184
|
+
const txPrebuild = newTxPrebuild();
|
|
185
|
+
const txParams = newTxParams();
|
|
186
|
+
txParams.txPrebuild = txPrebuild;
|
|
187
|
+
txParams.txPrebuild.token = 'teos:IQ';
|
|
188
|
+
await eosTokenCoin
|
|
189
|
+
.verifyTransaction({ txParams, txPrebuild, wallet, verification })
|
|
190
|
+
.should.be.rejectedWith('txHex receive symbol does not match expected recipient symbol');
|
|
191
|
+
});
|
|
192
|
+
it('should be able to verify vaulta transaction', async function () {
|
|
193
|
+
const vaultaCoin = bitgo.coin('teos:VAULTA');
|
|
194
|
+
const txParams = {
|
|
195
|
+
recipients: [
|
|
196
|
+
{
|
|
197
|
+
address: 'lionteste212',
|
|
198
|
+
amount: '1000',
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
};
|
|
202
|
+
const txPrebuild = {
|
|
203
|
+
txHex: '5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191ee694868c24f71ef56f10000000100408c7a02ea3055000000000085269d000302323801004c8eda6ca02e45000000572d3ccdcd0170e5e73f5643715600000000a8ed32322170e5e73f5643715620825019ab3ca98be803000000000000044100000000000000000000000000000000000000000000000000000000000000000000000000000000',
|
|
204
|
+
transaction: {
|
|
205
|
+
packed_trx: 'ee694868c24f71ef56f10000000100408c7a02ea3055000000000085269d000302323801004c8eda6ca02e45000000572d3ccdcd0170e5e73f5643715600000000a8ed32322170e5e73f5643715620825019ab3ca98be80300000000000004410000000000000000',
|
|
206
|
+
signatures: [],
|
|
207
|
+
compression: 'none',
|
|
208
|
+
},
|
|
209
|
+
token: 'teos:VAULTA',
|
|
210
|
+
coin: 'teos',
|
|
211
|
+
};
|
|
212
|
+
const validTransaction = await vaultaCoin.verifyTransaction({
|
|
213
|
+
txParams,
|
|
214
|
+
txPrebuild,
|
|
215
|
+
wallet,
|
|
216
|
+
verification,
|
|
217
|
+
});
|
|
218
|
+
validTransaction.should.equal(true);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9zVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvZW9zVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFFaEIsMENBQTRCO0FBRTVCLGlEQUErQztBQUMvQyxtREFBOEM7QUFDOUMsbURBQStEO0FBQy9ELG1DQUFnRDtBQUVoRCxRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLFFBQVEsQ0FBQztJQUNiLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztJQUU5QixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsY0FBUSxDQUFDLHVCQUF1QixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtZQUN2RSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlCQUF5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QUM3RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLO1lBQ3JELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSxjQUFjO3dCQUN2QixNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLFVBQVUsR0FBRztnQkFDakIsS0FBSyxFQUNILGtWQUFrVjtnQkFDcFYsV0FBVyxFQUFFO29CQUNYLFVBQVUsRUFDUixrTkFBa047b0JBQ3BOLFVBQVUsRUFBRSxFQUFFO29CQUNkLFdBQVcsRUFBRSxNQUFNO2lCQUNwQjtnQkFDRCxLQUFLLEVBQUUsYUFBYTtnQkFDcEIsSUFBSSxFQUFFLE1BQU07YUFDYixDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDMUQsUUFBUTtnQkFDUixVQUFVO2dCQUNWLE1BQU07Z0JBQ04sWUFBWTthQUNiLENBQUMsQ0FBQztZQUNILGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IEVvcywgVGVvcywgRW9zVG9rZW4gfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnRU9TIFRva2VuOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBlb3NUb2tlbkNvaW47XG4gIGxldCBiYXNlQ29pbjtcbiAgY29uc3QgdG9rZW5OYW1lID0gJ3Rlb3M6Q0hFWCc7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2VvcycsIEVvcy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0ZW9zJywgVGVvcy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgRW9zVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBiaXRnby5zYWZlUmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBlb3NUb2tlbkNvaW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSk7XG4gICAgYmFzZUNvaW4gPSBiaXRnby5jb2luKCd0ZW9zJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGNvbnN0YW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICBlb3NUb2tlbkNvaW4uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwodG9rZW5OYW1lKTtcbiAgICBlb3NUb2tlbkNvaW4uZ2V0QmFzZUNoYWluKCkuc2hvdWxkLmVxdWFsKCd0ZW9zJyk7XG4gICAgZW9zVG9rZW5Db2luLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBlb3NUb2tlbkNvaW4uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0VPUyBUb2tlbicpO1xuICAgIGVvc1Rva2VuQ29pbi5jb2luLnNob3VsZC5lcXVhbCgndGVvcycpO1xuICAgIGVvc1Rva2VuQ29pbi5kZWNpbWFsUGxhY2VzLnNob3VsZC5lcXVhbCg4KTtcbiAgICBlb3NUb2tlbkNvaW4udG9rZW5Db250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCd0ZXN0dG9rZW4xMTMnKTtcbiAgICBlb3NUb2tlbkNvaW4uY29udHJhY3ROYW1lLnNob3VsZC5lcXVhbCgndGVzdHRva2VuMTEzJyk7XG4gICAgZW9zVG9rZW5Db2luLmNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoJ3Rlc3R0b2tlbjExMycpO1xuICAgIGVvc1Rva2VuQ29pbi50b2tlbkNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoZW9zVG9rZW5Db2luLmNvbnRyYWN0TmFtZSk7XG4gICAgZW9zVG9rZW5Db2luLnRva2VuQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbChlb3NUb2tlbkNvaW4uY29udHJhY3RBZGRyZXNzKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeSB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgd2FsbGV0O1xuICAgIGxldCB2ZXJpZmljYXRpb247XG4gICAgbGV0IG5ld1R4UHJlYnVpbGQ7XG4gICAgbGV0IG5ld1R4UGFyYW1zO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWE3OGRkNTYxYzYyNThhOTA3ZjFlZWFlZTEzMmY3OTYnLFxuICAgICAgICB1c2VyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVzZXI6ICc1NDNjMTFlZDM1NmQwMGNiNzYwMDAwMGI5ODc5NDUwMycsXG4gICAgICAgICAgICBwZXJtaXNzaW9uczogWydhZG1pbicsICd2aWV3JywgJ3NwZW5kJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY29pbjogJ3Rlb3MnLFxuICAgICAgICBsYWJlbDogJ1ZlcmlmaWNhdGlvbiBXYWxsZXQnLFxuICAgICAgICBtOiAyLFxuICAgICAgICBuOiAzLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzVhNzhkZDU2YmZlNDI0YWEwN2FhMDY4NjUxYjE5NGZkJyxcbiAgICAgICAgICAnNWE3OGRkNTY3NGE3MGViNDA3OWY1ODc5N2RmZTJmNWUnLFxuICAgICAgICAgICc1YTc4ZGQ1NjFjNjI1OGE5MDdmMWVlYTlmMWQwNzllMicsXG4gICAgICAgIF0sXG4gICAgICAgIHRhZ3M6IFsnNWE3OGRkNTYxYzYyNThhOTA3ZjFlZWFlZTEzMmY3OTYnXSxcbiAgICAgICAgZGlzYWJsZVRyYW5zYWN0aW9uTm90aWZpY2F0aW9uczogZmFsc2UsXG4gICAgICAgIGZyZWV6ZToge30sXG4gICAgICAgIGRlbGV0ZWQ6IGZhbHNlLFxuICAgICAgICBhcHByb3ZhbHNSZXF1aXJlZDogMSxcbiAgICAgICAgaXNDb2xkOiB0cnVlLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICBjbGllbnRGbGFnczogW10sXG4gICAgICAgIGJhbGFuY2U6IDY1MDAwMDAwMCxcbiAgICAgICAgY29uZmlybWVkQmFsYW5jZTogNjUwMDAwMDAwLFxuICAgICAgICBzcGVuZGFibGVCYWxhbmNlOiA2NTAwMDAwMDAsXG4gICAgICAgIGJhbGFuY2VTdHJpbmc6ICc2NTAwMDAwMDAnLFxuICAgICAgICBjb25maXJtZWRCYWxhbmNlU3RyaW5nOiAnNjUwMDAwMDAwJyxcbiAgICAgICAgc3BlbmRhYmxlQmFsYW5jZVN0cmluZzogJzY1MDAwMDAwMCcsXG4gICAgICAgIHJlY2VpdmVBZGRyZXNzOiB7XG4gICAgICAgICAgaWQ6ICc1YTc4ZGUyYmJmZTQyNGFhMDdhYTEzMWVjMDNjOGRjMScsXG4gICAgICAgICAgYWRkcmVzczogJzc4eGN6aGFpanloZWsyJyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBjb2luOiAndGVvcycsXG4gICAgICAgICAgd2FsbGV0OiAnNWE3OGRkNTYxYzYyNThhOTA3ZjFlZWFlZTEzMmY3OTYnLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHBlbmRpbmdBcHByb3ZhbHM6IFtdLFxuICAgICAgfTtcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGVvc1Rva2VuQ29pbiwgd2FsbGV0RGF0YSk7XG4gICAgICBjb25zdCB1c2VyS2V5Y2hhaW4gPSB7XG4gICAgICAgIHBydjogJzVLSnE1NjVIVHJnRUpHOUVidkpINUJMWVRnaW9BeVkyN2RUOWFtMWtDdG4yWVZBSkVZSycsXG4gICAgICAgIHB1YjogJ0VPUzZnN0FBTVFraFhwOGo3M0U4QkQ0S1J3dFFldkVzRmdZeDhodGFRa1JWaGhYSk1na01aJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBiYWNrdXBLZXljaGFpbiA9IHtcbiAgICAgICAgcHJ2OiAnNUtaMW5YWENpNXlYSDhBakNKcWpuQ1lIQ1ZuaFFhOVlXR1YyRDE0aThnMjIxZHhOd0xXJyxcbiAgICAgICAgcHViOiAnRU9TN2d5RExOazEyZmFWYjFhcU54ajFMMkRwQmVyRmtoQXN4QnM5NXlXM3l4SnBxdmc5TXQnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnbGlvbnRlc3RlMjEyJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBleHBpcmF0aW9uOiAnMjAyMS0xMC0yOFQwMzo1NjowOS4xODAnLFxuICAgICAgICAgIHJlZl9ibG9ja19udW06IDUyNzU1LFxuICAgICAgICAgIHJlZl9ibG9ja19wcmVmaXg6IDU0NjI2NTEyLFxuICAgICAgICB9LFxuICAgICAgICB0eEhleDpcbiAgICAgICAgICAnMmEwMmEwMDUzZTVhOGNmNzNhNTZiYTBmZGExMWU0ZDkyZTAyMzhhNGEyYWE3NGZjY2Y0NmQ1YTkxMDc0Njg0MDU5MWY3YTYxMTNjZWQwODg0MTAzMDAwMDAwMDEwMDQwOGM3YTAyZWEzMDU1MDAwMDAwMDAwMDg1MjY5ZDAwMDMwMjM0MzIwMTEwNDI5ODBhZDI5Y2IxY2EwMDAwMDA1NzJkM2NjZGNkMDEyMGNlYjg0MzczMzM0MjdjMDAwMDAwMDBhOGVkMzIzMjIxMjBjZWI4NDM3MzMzNDI3YzIwODI1MDE5YWIzY2E5OGJlODAzMDAwMDAwMDAwMDAwMDg0MzQ4NDU1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgdHJhbnNhY3Rpb246IHtcbiAgICAgICAgICBjb21wcmVzc2lvbjogJ25vbmUnLFxuICAgICAgICAgIHBhY2tlZF90cng6XG4gICAgICAgICAgICAnNTkxZjdhNjExM2NlZDA4ODQxMDMwMDAwMDAwMTAwNDA4YzdhMDJlYTMwNTUwMDAwMDAwMDAwODUyNjlkMDAwMzAyMzQzMjAxMTA0Mjk4MGFkMjljYjFjYTAwMDAwMDU3MmQzY2NkY2QwMTIwY2ViODQzNzMzMzQyN2MwMDAwMDAwMGE4ZWQzMjMyMjEyMGNlYjg0MzczMzM0MjdjMjA4MjUwMTlhYjNjYTk4YmU4MDMwMDAwMDAwMDAwMDAwODQzNDg0NTU4MDAwMDAwMDAwMCcsXG4gICAgICAgICAgc2lnbmF0dXJlczogW10sXG4gICAgICAgIH0sXG4gICAgICAgIHR4aWQ6ICcwYmM3ZDgwMjZhZjY3MTA2ODBlMGYzZTgxOWZmN2RkYmJiM2RmZjhhNzQwODQ2Yzc2ZmQ0N2Y5Mzg2ODMyZWRjJyxcbiAgICAgICAgaXNWb3RpbmdUcmFuc2FjdGlvbjogZmFsc2UsXG4gICAgICAgIGNvaW46ICd0ZW9zJyxcbiAgICAgICAgdG9rZW46IHRva2VuTmFtZSxcbiAgICAgIH07XG4gICAgICB2ZXJpZmljYXRpb24gPSB7XG4gICAgICAgIGRpc2FibGVOZXR3b3JraW5nOiB0cnVlLFxuICAgICAgICBrZXljaGFpbnM6IHtcbiAgICAgICAgICB1c2VyOiB7IHB1YjogdXNlcktleWNoYWluLnB1YiB9LFxuICAgICAgICAgIGJhY2t1cDogeyBwdWI6IGJhY2t1cEtleWNoYWluLnB1YiB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbSgnYzNiMDljMjQ3MzFiZTI4NTFiNjI0ZDlkNWIzZjYwZmExMjk2OTVjMjQwNzE3NjhkMTU2NTRiZWEyMDdiN2JiNicsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlQ29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgcHJ2OiBrZXlQYWlyLnBydixcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdsaW9udGVzdGUyMTInLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIG5ld1R4UHJlYnVpbGQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBfLmNsb25lRGVlcCh0eFByZWJ1aWxkKTtcbiAgICAgIH07XG4gICAgICBuZXdUeFBhcmFtcyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UGFyYW1zKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB0b2tlbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB2YWxpZFRyYW5zYWN0aW9uID0gYXdhaXQgZW9zVG9rZW5Db2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgdmFsaWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIGV4cGVjdGVkIHJlY2VpdmUgc3ltYm9sIGlzIGRpZmZlcmVudCB0aGFuIGFjdHVhbCByZWNlaXZlIHN5bWJvbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy50eFByZWJ1aWxkID0gdHhQcmVidWlsZDtcbiAgICAgIHR4UGFyYW1zLnR4UHJlYnVpbGQudG9rZW4gPSAndGVvczpJUSc7XG4gICAgICBhd2FpdCBlb3NUb2tlbkNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eEhleCByZWNlaXZlIHN5bWJvbCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCByZWNpcGllbnQgc3ltYm9sJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gdmVyaWZ5IHZhdWx0YSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhdWx0YUNvaW4gPSBiaXRnby5jb2luKCd0ZW9zOlZBVUxUQScpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnbGlvbnRlc3RlMjEyJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6XG4gICAgICAgICAgJzVmZmYxZGFlOGRjOGUyZmM0ZDViMjNiMmM3NjY1Yzk3ZjllOWQ4ZWRmMmI2NDg1YTg2YmEzMTFjMjU2MzkxOTFlZTY5NDg2OGMyNGY3MWVmNTZmMTAwMDAwMDAxMDA0MDhjN2EwMmVhMzA1NTAwMDAwMDAwMDA4NTI2OWQwMDAzMDIzMjM4MDEwMDRjOGVkYTZjYTAyZTQ1MDAwMDAwNTcyZDNjY2RjZDAxNzBlNWU3M2Y1NjQzNzE1NjAwMDAwMDAwYThlZDMyMzIyMTcwZTVlNzNmNTY0MzcxNTYyMDgyNTAxOWFiM2NhOThiZTgwMzAwMDAwMDAwMDAwMDA0NDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIHRyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgcGFja2VkX3RyeDpcbiAgICAgICAgICAgICdlZTY5NDg2OGMyNGY3MWVmNTZmMTAwMDAwMDAxMDA0MDhjN2EwMmVhMzA1NTAwMDAwMDAwMDA4NTI2OWQwMDAzMDIzMjM4MDEwMDRjOGVkYTZjYTAyZTQ1MDAwMDAwNTcyZDNjY2RjZDAxNzBlNWU3M2Y1NjQzNzE1NjAwMDAwMDAwYThlZDMyMzIyMTcwZTVlNzNmNTY0MzcxNTYyMDgyNTAxOWFiM2NhOThiZTgwMzAwMDAwMDAwMDAwMDA0NDEwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICBzaWduYXR1cmVzOiBbXSxcbiAgICAgICAgICBjb21wcmVzc2lvbjogJ25vbmUnLFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbjogJ3Rlb3M6VkFVTFRBJyxcbiAgICAgICAgY29pbjogJ3Rlb3MnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZhbGlkVHJhbnNhY3Rpb24gPSBhd2FpdCB2YXVsdGFDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHdhbGxldCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgfSk7XG4gICAgICB2YWxpZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringTextDecoder.d.ts","sourceRoot":"","sources":["../../../test/unit/stringTextDecoder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @prettier
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
require("should");
|
|
7
|
+
const utils_1 = require("../../src/lib/utils");
|
|
8
|
+
const fixtures_1 = require("../fixtures");
|
|
9
|
+
describe('String Text Decoder', function () {
|
|
10
|
+
const stringTextDecoder = new utils_1.StringTextDecoder();
|
|
11
|
+
const textDecoder = new TextDecoder();
|
|
12
|
+
it('should decode in utf8', function () {
|
|
13
|
+
const data = Buffer.from('abc');
|
|
14
|
+
const eosDecoded = stringTextDecoder.decode(data);
|
|
15
|
+
const decoded = textDecoder.decode(data);
|
|
16
|
+
eosDecoded.should.equal('abc');
|
|
17
|
+
eosDecoded.should.equal(decoded);
|
|
18
|
+
});
|
|
19
|
+
it('should have inconsistent results for non-utf8', function () {
|
|
20
|
+
const data = Buffer.from([0x0001d11e]);
|
|
21
|
+
const eosDecoded = stringTextDecoder.decode(data);
|
|
22
|
+
const decoded = new TextDecoder('utf-16').decode(data);
|
|
23
|
+
eosDecoded.should.not.equal(decoded);
|
|
24
|
+
});
|
|
25
|
+
it('should decode large inputs', function () {
|
|
26
|
+
const largeInput = 'a'.repeat(16384);
|
|
27
|
+
const data = Buffer.from(largeInput);
|
|
28
|
+
const eosDecoded = stringTextDecoder.decode(data);
|
|
29
|
+
const decoded = textDecoder.decode(data);
|
|
30
|
+
eosDecoded.should.equal(largeInput);
|
|
31
|
+
eosDecoded.should.equal(decoded);
|
|
32
|
+
});
|
|
33
|
+
it('should return empty string no data', function () {
|
|
34
|
+
const eosDecoded = stringTextDecoder.decode();
|
|
35
|
+
const decoded = textDecoder.decode();
|
|
36
|
+
eosDecoded.should.equal('');
|
|
37
|
+
eosDecoded.should.equal(decoded);
|
|
38
|
+
});
|
|
39
|
+
it('should encode and decode eos transaction', function () {
|
|
40
|
+
const packedTrxHex = fixtures_1.EosInputs.unsignedTransaction.transaction.packed_trx;
|
|
41
|
+
const encoded = new TextEncoder().encode(packedTrxHex);
|
|
42
|
+
const decoded = stringTextDecoder.decode(Buffer.from(encoded));
|
|
43
|
+
const decoded2 = textDecoder.decode(Buffer.from(encoded));
|
|
44
|
+
decoded.should.equal(packedTrxHex);
|
|
45
|
+
decoded.should.equal(decoded2);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nVGV4dERlY29kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3RyaW5nVGV4dERlY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOztBQUVILGtCQUFnQjtBQUNoQiwrQ0FBd0Q7QUFDeEQsMENBQXdDO0FBRXhDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixNQUFNLGlCQUFpQixHQUFHLElBQUkseUJBQWlCLEVBQUUsQ0FBQztJQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBRXRDLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRTtRQUMxQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFO1FBQ2xELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRCQUE0QixFQUFFO1FBQy9CLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyQyxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtRQUN2QyxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFckMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMENBQTBDLEVBQUU7UUFDN0MsTUFBTSxZQUFZLEdBQUcsb0JBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBRTFFLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFMUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cblxuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgU3RyaW5nVGV4dERlY29kZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IEVvc0lucHV0cyB9IGZyb20gJy4uL2ZpeHR1cmVzJztcblxuZGVzY3JpYmUoJ1N0cmluZyBUZXh0IERlY29kZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHN0cmluZ1RleHREZWNvZGVyID0gbmV3IFN0cmluZ1RleHREZWNvZGVyKCk7XG4gIGNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbiAgaXQoJ3Nob3VsZCBkZWNvZGUgaW4gdXRmOCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmZyb20oJ2FiYycpO1xuXG4gICAgY29uc3QgZW9zRGVjb2RlZCA9IHN0cmluZ1RleHREZWNvZGVyLmRlY29kZShkYXRhKTtcbiAgICBjb25zdCBkZWNvZGVkID0gdGV4dERlY29kZXIuZGVjb2RlKGRhdGEpO1xuXG4gICAgZW9zRGVjb2RlZC5zaG91bGQuZXF1YWwoJ2FiYycpO1xuICAgIGVvc0RlY29kZWQuc2hvdWxkLmVxdWFsKGRlY29kZWQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhdmUgaW5jb25zaXN0ZW50IHJlc3VsdHMgZm9yIG5vbi11dGY4JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuZnJvbShbMHgwMDAxZDExZV0pO1xuXG4gICAgY29uc3QgZW9zRGVjb2RlZCA9IHN0cmluZ1RleHREZWNvZGVyLmRlY29kZShkYXRhKTtcbiAgICBjb25zdCBkZWNvZGVkID0gbmV3IFRleHREZWNvZGVyKCd1dGYtMTYnKS5kZWNvZGUoZGF0YSk7XG5cbiAgICBlb3NEZWNvZGVkLnNob3VsZC5ub3QuZXF1YWwoZGVjb2RlZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZGVjb2RlIGxhcmdlIGlucHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBsYXJnZUlucHV0ID0gJ2EnLnJlcGVhdCgxNjM4NCk7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5mcm9tKGxhcmdlSW5wdXQpO1xuXG4gICAgY29uc3QgZW9zRGVjb2RlZCA9IHN0cmluZ1RleHREZWNvZGVyLmRlY29kZShkYXRhKTtcbiAgICBjb25zdCBkZWNvZGVkID0gdGV4dERlY29kZXIuZGVjb2RlKGRhdGEpO1xuXG4gICAgZW9zRGVjb2RlZC5zaG91bGQuZXF1YWwobGFyZ2VJbnB1dCk7XG4gICAgZW9zRGVjb2RlZC5zaG91bGQuZXF1YWwoZGVjb2RlZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZyBubyBkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVvc0RlY29kZWQgPSBzdHJpbmdUZXh0RGVjb2Rlci5kZWNvZGUoKTtcbiAgICBjb25zdCBkZWNvZGVkID0gdGV4dERlY29kZXIuZGVjb2RlKCk7XG5cbiAgICBlb3NEZWNvZGVkLnNob3VsZC5lcXVhbCgnJyk7XG4gICAgZW9zRGVjb2RlZC5zaG91bGQuZXF1YWwoZGVjb2RlZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZW5jb2RlIGFuZCBkZWNvZGUgZW9zIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhY2tlZFRyeEhleCA9IEVvc0lucHV0cy51bnNpZ25lZFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uLnBhY2tlZF90cng7XG5cbiAgICBjb25zdCBlbmNvZGVkID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBhY2tlZFRyeEhleCk7XG4gICAgY29uc3QgZGVjb2RlZCA9IHN0cmluZ1RleHREZWNvZGVyLmRlY29kZShCdWZmZXIuZnJvbShlbmNvZGVkKSk7XG4gICAgY29uc3QgZGVjb2RlZDIgPSB0ZXh0RGVjb2Rlci5kZWNvZGUoQnVmZmVyLmZyb20oZW5jb2RlZCkpO1xuXG4gICAgZGVjb2RlZC5zaG91bGQuZXF1YWwocGFja2VkVHJ4SGV4KTtcbiAgICBkZWNvZGVkLnNob3VsZC5lcXVhbChkZWNvZGVkMik7XG4gIH0pO1xufSk7XG4iXX0=
|