@bitgo/sdk-core 38.5.0 → 38.5.2
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/bitgo/errors.d.ts +2 -0
- package/dist/src/bitgo/errors.d.ts.map +1 -1
- package/dist/src/bitgo/errors.js +5 -2
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +1 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.js +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.js +8 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +1 -7
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +2 -30
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +3 -2
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +9 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.js +29 -8
- package/dist/src/bitgo/utils/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/utils/wallet.js +3 -3
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +22 -31
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +2 -53
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +187 -11
- package/dist/test/unit/bitgo/utils/wallet.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/wallet.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/wallet.js +55 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -33,7 +33,7 @@ describe('recipientUtils', function () {
|
|
|
33
33
|
'defiDeposit',
|
|
34
34
|
'defiWithdraw',
|
|
35
35
|
'contractCall',
|
|
36
|
-
// Staking
|
|
36
|
+
// Staking — 'delegate' also covers SOL solDelegateIntent
|
|
37
37
|
'delegate',
|
|
38
38
|
'undelegate',
|
|
39
39
|
'switchValidator',
|
|
@@ -55,6 +55,10 @@ describe('recipientUtils', function () {
|
|
|
55
55
|
// Avalanche / Flare cross-chain atomic imports
|
|
56
56
|
'import',
|
|
57
57
|
'importtoc',
|
|
58
|
+
// SOL: deactivate stake account (solDeactivateIntent)
|
|
59
|
+
'deactivate',
|
|
60
|
+
// SOL: authorize stake account (solAuthorizeIntent)
|
|
61
|
+
'authorize',
|
|
58
62
|
];
|
|
59
63
|
expected.forEach((t) => assert_1.default.ok(recipientUtils_1.NO_RECIPIENT_TX_TYPES.has(t), `${t} should be in NO_RECIPIENT_TX_TYPES`));
|
|
60
64
|
assert_1.default.strictEqual(recipientUtils_1.NO_RECIPIENT_TX_TYPES.size, expected.length);
|
|
@@ -76,12 +80,7 @@ describe('recipientUtils', function () {
|
|
|
76
80
|
const txRequest = makeTxRequest({
|
|
77
81
|
intent: {
|
|
78
82
|
intentType: 'payment',
|
|
79
|
-
recipients: [
|
|
80
|
-
{
|
|
81
|
-
address: { address: '0xabc' },
|
|
82
|
-
amount: { value: '500', symbol: 'eth' },
|
|
83
|
-
},
|
|
84
|
-
],
|
|
83
|
+
recipients: [{ address: { address: '0xabc' }, amount: { value: '500', symbol: 'eth' } }],
|
|
85
84
|
},
|
|
86
85
|
});
|
|
87
86
|
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
@@ -90,9 +89,7 @@ describe('recipientUtils', function () {
|
|
|
90
89
|
assert_1.default.strictEqual(result.recipients?.[0].amount, '500');
|
|
91
90
|
});
|
|
92
91
|
it('resolves txType from intent.intentType when txParams.type is absent', function () {
|
|
93
|
-
const txRequest = makeTxRequest({
|
|
94
|
-
intent: { intentType: 'consolidate' },
|
|
95
|
-
});
|
|
92
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'consolidate' } });
|
|
96
93
|
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
97
94
|
assert_1.default.strictEqual(result.type, 'consolidate');
|
|
98
95
|
});
|
|
@@ -107,6 +104,7 @@ describe('recipientUtils', function () {
|
|
|
107
104
|
'pledge',
|
|
108
105
|
'import',
|
|
109
106
|
'importtoc',
|
|
107
|
+
'deactivate',
|
|
110
108
|
]) {
|
|
111
109
|
const txRequest = makeTxRequest();
|
|
112
110
|
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, { type: txType }));
|
|
@@ -167,6 +165,184 @@ describe('recipientUtils', function () {
|
|
|
167
165
|
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, txParams);
|
|
168
166
|
assert_1.default.strictEqual(result.recipients?.[0].address, '0xcaller');
|
|
169
167
|
});
|
|
168
|
+
it('preserves data field from intent recipients', function () {
|
|
169
|
+
const txRequest = makeTxRequest({
|
|
170
|
+
intent: {
|
|
171
|
+
intentType: 'payment',
|
|
172
|
+
recipients: [{ address: { address: '0xabc' }, amount: { value: '100', symbol: 'eth' }, data: '0xdeadbeef' }],
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
176
|
+
assert_1.default.strictEqual(result.recipients?.[0].data, '0xdeadbeef');
|
|
177
|
+
});
|
|
178
|
+
describe('tokenName preservation regression tests', function () {
|
|
179
|
+
it('preserves tokenName from amount.symbol when it differs from chainName', function () {
|
|
180
|
+
const txRequest = makeTxRequest({
|
|
181
|
+
intent: {
|
|
182
|
+
intentType: 'payment',
|
|
183
|
+
recipients: [
|
|
184
|
+
{
|
|
185
|
+
address: { address: 'UserWalletAddress111111111111111111111111111' },
|
|
186
|
+
amount: { value: '1000000', symbol: 'tsol:usdc' },
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
192
|
+
assert_1.default.strictEqual(result.recipients?.length, 1);
|
|
193
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'tsol:usdc');
|
|
194
|
+
});
|
|
195
|
+
it('does NOT set tokenName when symbol equals chainName (native SOL transfer)', function () {
|
|
196
|
+
const txRequest = makeTxRequest({
|
|
197
|
+
intent: {
|
|
198
|
+
intentType: 'payment',
|
|
199
|
+
recipients: [
|
|
200
|
+
{
|
|
201
|
+
address: { address: 'RecipientAddress111111111111111111111111111' },
|
|
202
|
+
amount: { value: '5000000000', symbol: 'tsol' },
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
208
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, undefined);
|
|
209
|
+
});
|
|
210
|
+
it('prefers tokenData.tokenName over amount.symbol (uses distinct values to verify)', function () {
|
|
211
|
+
const txRequest = makeTxRequest({
|
|
212
|
+
intent: {
|
|
213
|
+
intentType: 'payment',
|
|
214
|
+
recipients: [
|
|
215
|
+
{
|
|
216
|
+
address: { address: 'RecipientAddress111111111111111111111111111' },
|
|
217
|
+
amount: { value: '500000', symbol: 'tsol:usdc-alt' },
|
|
218
|
+
tokenData: { tokenType: 'fungible', tokenQuantity: '500000', tokenName: 'canonical-token-name' },
|
|
219
|
+
},
|
|
220
|
+
],
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
224
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'canonical-token-name');
|
|
225
|
+
});
|
|
226
|
+
it('falls back to amount.symbol when tokenData.tokenName is absent', function () {
|
|
227
|
+
const txRequest = makeTxRequest({
|
|
228
|
+
intent: {
|
|
229
|
+
intentType: 'payment',
|
|
230
|
+
recipients: [
|
|
231
|
+
{
|
|
232
|
+
address: { address: 'RecipientAddress111111111111111111111111111' },
|
|
233
|
+
amount: { value: '200000', symbol: 'sol:usdc' },
|
|
234
|
+
tokenData: { tokenType: 'fungible', tokenQuantity: '200000' },
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'sol');
|
|
240
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'sol:usdc');
|
|
241
|
+
});
|
|
242
|
+
it('falls back to amount.symbol when tokenData.tokenName is empty string', function () {
|
|
243
|
+
const txRequest = makeTxRequest({
|
|
244
|
+
intent: {
|
|
245
|
+
intentType: 'payment',
|
|
246
|
+
recipients: [
|
|
247
|
+
{
|
|
248
|
+
address: { address: 'RecipientAddress111111111111111111111111111' },
|
|
249
|
+
amount: { value: '100000', symbol: 'tsol:usdc' },
|
|
250
|
+
tokenData: { tokenType: 'fungible', tokenQuantity: '100000', tokenName: '' },
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
256
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'tsol:usdc');
|
|
257
|
+
});
|
|
258
|
+
it('does NOT set tokenName when chainName is absent (legacy ECDSA callers, no tokenData)', function () {
|
|
259
|
+
const txRequest = makeTxRequest({
|
|
260
|
+
intent: {
|
|
261
|
+
intentType: 'payment',
|
|
262
|
+
recipients: [{ address: { address: '0xabc' }, amount: { value: '100', symbol: 'eth' } }],
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
266
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, undefined);
|
|
267
|
+
assert_1.default.strictEqual(result.recipients?.[0].address, '0xabc');
|
|
268
|
+
});
|
|
269
|
+
it('preserves tokenData.tokenName when chainName is absent (legacy ECDSA with tokenData)', function () {
|
|
270
|
+
const txRequest = makeTxRequest({
|
|
271
|
+
intent: {
|
|
272
|
+
intentType: 'transferToken',
|
|
273
|
+
recipients: [
|
|
274
|
+
{
|
|
275
|
+
address: { address: '0xabc' },
|
|
276
|
+
amount: { value: '1000', symbol: 'erc20:usdc' },
|
|
277
|
+
tokenData: { tokenType: 'fungible', tokenQuantity: '1000', tokenName: 'eth:usdc' },
|
|
278
|
+
},
|
|
279
|
+
],
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
283
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'eth:usdc');
|
|
284
|
+
});
|
|
285
|
+
it('sendMany tsol:usdc: does not throw and preserves tokenName in full round-trip', function () {
|
|
286
|
+
const txRequest = makeTxRequest({
|
|
287
|
+
intent: {
|
|
288
|
+
intentType: 'payment',
|
|
289
|
+
recipients: [
|
|
290
|
+
{
|
|
291
|
+
address: { address: 'SolUserWallet1111111111111111111111111111111' },
|
|
292
|
+
amount: { value: '2000000', symbol: 'tsol:usdc' },
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
address: { address: 'SolUserWallet2222222222222222222222222222222' },
|
|
296
|
+
amount: { value: '3000000', symbol: 'tsol:usdc' },
|
|
297
|
+
},
|
|
298
|
+
],
|
|
299
|
+
},
|
|
300
|
+
});
|
|
301
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
302
|
+
assert_1.default.strictEqual(result.recipients?.length, 2);
|
|
303
|
+
result.recipients.forEach((r) => assert_1.default.strictEqual(r.tokenName, 'tsol:usdc'));
|
|
304
|
+
assert_1.default.strictEqual(result.recipients[0].amount, '2000000');
|
|
305
|
+
assert_1.default.strictEqual(result.recipients[1].amount, '3000000');
|
|
306
|
+
});
|
|
307
|
+
it('handles mixed native + token recipients correctly', function () {
|
|
308
|
+
const txRequest = makeTxRequest({
|
|
309
|
+
intent: {
|
|
310
|
+
intentType: 'payment',
|
|
311
|
+
recipients: [
|
|
312
|
+
{
|
|
313
|
+
address: { address: 'SolNative111111111111111111111111111111111' },
|
|
314
|
+
amount: { value: '1000000000', symbol: 'tsol' },
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
address: { address: 'SolToken111111111111111111111111111111111' },
|
|
318
|
+
amount: { value: '500000', symbol: 'tsol:usdc' },
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
324
|
+
assert_1.default.strictEqual(result.recipients[0].tokenName, undefined);
|
|
325
|
+
assert_1.default.strictEqual(result.recipients[1].tokenName, 'tsol:usdc');
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
describe('SOL no-recipient intent types', function () {
|
|
329
|
+
it('does not throw for "delegate" (solDelegateIntent)', function () {
|
|
330
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'delegate' } });
|
|
331
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}));
|
|
332
|
+
});
|
|
333
|
+
it('does not throw for "deactivate" (solDeactivateIntent)', function () {
|
|
334
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'deactivate' } });
|
|
335
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}));
|
|
336
|
+
});
|
|
337
|
+
it('does not throw for "authorize" (solAuthorizeIntent)', function () {
|
|
338
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'authorize' } });
|
|
339
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}));
|
|
340
|
+
});
|
|
341
|
+
it('throws for stakingAuthorize — must be validated at coin layer', function () {
|
|
342
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'stakingAuthorize' } });
|
|
343
|
+
assert_1.default.throws(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}), errors_1.InvalidTransactionError);
|
|
344
|
+
});
|
|
345
|
+
});
|
|
170
346
|
});
|
|
171
347
|
});
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdXRpbHMvdHNzL3JlY2lwaWVudFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHNGQUFvSDtBQUNwSCw0REFBMEU7QUFHMUUsU0FBUyxhQUFhLENBQUMsWUFBZ0MsRUFBRTtJQUN2RCxPQUFPO1FBQ0wsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLEdBQUcsU0FBUztLQUNXLENBQUM7QUFDNUIsQ0FBQztBQUVELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN6QixRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLDZCQUE2QixFQUFFO1lBQ2hDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxXQUFXO2dCQUNYLGVBQWU7Z0JBQ2YsZUFBZTtnQkFDZixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsYUFBYTtnQkFDYixhQUFhO2dCQUNiLGNBQWM7Z0JBQ2QsVUFBVTtnQkFDVixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsY0FBYztnQkFDZCxjQUFjO2dCQUNkLFVBQVU7Z0JBQ1YsVUFBVTtnQkFDVixZQUFZO2dCQUNaLGlCQUFpQjtnQkFDakIsT0FBTztnQkFDUCxTQUFTO2dCQUNULG1CQUFtQjtnQkFDbkIscUJBQXFCO2dCQUNyQixlQUFlO2dCQUNmLGVBQWU7Z0JBQ2YsV0FBVztnQkFDWCxPQUFPO2dCQUNQLG1CQUFtQjtnQkFDbkIsZUFBZTtnQkFDZixnQkFBZ0I7Z0JBQ2hCLGdCQUFnQjtnQkFDaEIsd0JBQXdCO2dCQUN4QixlQUFlO2dCQUNmLFFBQVE7Z0JBQ1IsK0NBQStDO2dCQUMvQyxRQUFRO2dCQUNSLFdBQVc7YUFDWixDQUFDO1lBQ0YsUUFBUSxD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LENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgTk9fUkVDSVBJRU5UX1RYX1RZUEVTLCByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL3JlY2lwaWVudFV0aWxzJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2Vycm9ycyc7XG5pbXBvcnQgeyBUeFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2Jhc2VUeXBlcyc7XG5cbmZ1bmN0aW9uIG1ha2VUeFJlcXVlc3Qob3ZlcnJpZGVzOiBQYXJ0aWFsPFR4UmVxdWVzdD4gPSB7fSk6IFR4UmVxdWVzdCB7XG4gIHJldHVybiB7XG4gICAgdHhSZXF1ZXN0SWQ6ICd0ZXN0LXR4LXJlcXVlc3QtaWQnLFxuICAgIHdhbGxldElkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgIGludGVudDogdW5kZWZpbmVkLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfSBhcyB1bmtub3duIGFzIFR4UmVxdWVzdDtcbn1cblxuZGVzY3JpYmUoJ3JlY2lwaWVudFV0aWxzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnTk9fUkVDSVBJRU5UX1RYX1RZUEVTJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdjb250YWlucyBhbGwgZXhwZWN0ZWQgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICAgICAgLy8gRUNEU0EgRVZNXG4gICAgICAgICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAnZmlsbE5vbmNlJyxcbiAgICAgICAgJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAndG9rZW5BcHByb3ZhbCcsXG4gICAgICAgICdjb25zb2xpZGF0ZScsXG4gICAgICAgICdicmlkZ2VGdW5kcycsXG4gICAgICAgICdlbmFibGVUb2tlbicsXG4gICAgICAgICdlbmFibGV0b2tlbicsXG4gICAgICAgICdkaXNhYmxldG9rZW4nLFxuICAgICAgICAnY3VzdG9tVHgnLFxuICAgICAgICAnZGVmaUFwcHJvdmUnLFxuICAgICAgICAnZGVmaURlcG9zaXQnLFxuICAgICAgICAnZGVmaVdpdGhkcmF3JyxcbiAgICAgICAgJ2NvbnRyYWN0Q2FsbCcsXG4gICAgICAgIC8vIFN0YWtpbmdcbiAgICAgICAgJ2RlbGVnYXRlJyxcbiAgICAgICAgJ3VuZGVsZWdhdGUnLFxuICAgICAgICAnc3dpdGNoVmFsaWRhdG9yJyxcbiAgICAgICAgJ3N0YWtlJyxcbiAgICAgICAgJ3Vuc3Rha2UnLFxuICAgICAgICAnc3Rha2VXaXRoQ2FsbERhdGEnLFxuICAgICAgICAndW5zdGFrZVdpdGhDYWxsRGF0YScsXG4gICAgICAgICd0cmFuc2ZlclN0YWtlJyxcbiAgICAgICAgJ2luY3JlYXNlU3Rha2UnLFxuICAgICAgICAnZ29VbnN0YWtlJyxcbiAgICAgICAgJ2NsYWltJyxcbiAgICAgICAgJ3N0YWtlQ2xhaW1SZXdhcmRzJyxcbiAgICAgICAgJ2NyZWF0ZUFjY291bnQnLFxuICAgICAgICAndHJhbnNmZXJBY2NlcHQnLFxuICAgICAgICAndHJhbnNmZXJSZWplY3QnLFxuICAgICAgICAndHJhbnNmZXJPZmZlcldpdGhkcmF3bicsXG4gICAgICAgICdjYW50b25Db21tYW5kJyxcbiAgICAgICAgJ3BsZWRnZScsXG4gICAgICAgIC8vIEF2YWxhbmNoZSAvIEZsYXJlIGNyb3NzLWNoYWluIGF0b21pYyBpbXBvcnRzXG4gICAgICAgICdpbXBvcnQnLFxuICAgICAgICAnaW1wb3J0dG9jJyxcbiAgICAgIF07XG4gICAgICBleHBlY3RlZC5mb3JFYWNoKCh0KSA9PiBhc3NlcnQub2soTk9fUkVDSVBJRU5UX1RYX1RZUEVTLmhhcyh0KSwgYCR7dH0gc2hvdWxkIGJlIGluIE5PX1JFQ0lQSUVOVF9UWF9UWVBFU2ApKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChOT19SRUNJUElFTlRfVFhfVFlQRVMuc2l6ZSwgZXhwZWN0ZWQubGVuZ3RoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBjb250YWluIHZhbHVlLXRyYW5zZmVyIHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgWydwYXltZW50JywgJ2Zhbm91dCcsICd2b3RlJywgJ2RlZmktZGVwb3NpdCcsICdkZWZpLXJlZGVlbSddLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKCFOT19SRUNJUElFTlRfVFhfVFlQRVMuaGFzKHQpLCBgJHt0fSBtdXN0IE5PVCBiZSBpbiBOT19SRUNJUElFTlRfVFhfVFlQRVNgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdwYXNzZXMgdGhyb3VnaCB0eFBhcmFtcy5yZWNpcGllbnRzIHdoZW4gcHJlc2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3QoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0geyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcxMDAnIH1dIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB0eFBhcmFtcyk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzLCB0eFBhcmFtcy5yZWNpcGllbnRzKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWxscyBiYWNrIHRvIGludGVudC5yZWNpcGllbnRzIHdoZW4gdHhQYXJhbXMgaGFzIG5vbmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHtcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogeyBhZGRyZXNzOiAnMHhhYmMnIH0sXG4gICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzUwMCcsIHN5bWJvbDogJ2V0aCcgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8ubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGFiYycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzPy5bMF0uYW1vdW50LCAnNTAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVzb2x2ZXMgdHhUeXBlIGZyb20gaW50ZW50LmludGVudFR5cGUgd2hlbiB0eFBhcmFtcy50eXBlIGlzIGFic2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2NvbnNvbGlkYXRlJyB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC50eXBlLCAnY29uc29saWRhdGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB0aHJvdyBmb3IgZXhlbXB0IHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCB0eFR5cGUgb2YgW1xuICAgICAgICAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgJ2NvbnNvbGlkYXRlJyxcbiAgICAgICAgJ2NvbnRyYWN0Q2FsbCcsXG4gICAgICAgICdkZWxlZ2F0ZScsXG4gICAgICAgICdzdGFrZScsXG4gICAgICAgICdjcmVhdGVBY2NvdW50JyxcbiAgICAgICAgJ3BsZWRnZScsXG4gICAgICAgICdpbXBvcnQnLFxuICAgICAgICAnaW1wb3J0dG9jJyxcbiAgICAgIF0pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHsgdHlwZTogdHhUeXBlIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB0aHJvdyBmb3IgQXZhbGFuY2hlIGNyb3NzLWNoYWluIGltcG9ydHMgcmVzb2x2ZWQgZnJvbSBpbnRlbnQuaW50ZW50VHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFAtY2hhaW4gYW5kIEMtY2hhaW4gaW1wb3J0IGludGVudHMgbGVnaXRpbWF0ZWx5IGNhcnJ5IG5vIHJlY2lwaWVudHMg4oCUXG4gICAgICAvLyB0aGUgd2FsbGV0IGltcG9ydHMgaXRzIG93biBVVFhPcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgdGhlXG4gICAgICAvLyB3YWxsZXQgaXRzZWxmLiBUaGUgaW50ZW50VHlwZSBsaXZlcyBvbmx5IG9uIHRoZSBpbnRlbnQgKHR4UGFyYW1zLnR5cGVcbiAgICAgIC8vIGlzIHVuc2V0IG9uIHRoZSBNUEMgc2lnbmluZyBjYWxsKSBzbyB0aGUgZ3VhcmQgbXVzdCByZWFkIGl0IGZyb20gdGhlcmUuXG4gICAgICBmb3IgKGNvbnN0IGludGVudFR5cGUgb2YgWydpbXBvcnQnLCAnaW1wb3J0dG9jJ10pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7IGludGVudDogeyBpbnRlbnRUeXBlIH0gYXMgYW55IH0pO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBidWlsZFBhcmFtcy50eXBlIGlzIFBhc2NhbENhc2UgYnV0IGludGVudC5pbnRlbnRUeXBlIGlzIGxvd2VyY2FzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHNpZ25UcmFuc2FjdGlvblRzcyBwYXNzZXMgdHhQcmVidWlsZC5idWlsZFBhcmFtcyBhcyB0eFBhcmFtcy4gUHJlYnVpbGQgdXNlc1xuICAgICAgLy8gdHlwZTogJ0ltcG9ydCcgd2hpbGUgV1Agc3RvcmVzIGludGVudFR5cGU6ICdpbXBvcnQnIG9uIHRoZSB0eFJlcXVlc3QuXG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHsgaW50ZW50OiB7IGludGVudFR5cGU6ICdpbXBvcnQnLCByZWNpcGllbnRzOiBbXSB9IGFzIGFueSB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwgeyB0eXBlOiAnSW1wb3J0JywgcmVjaXBpZW50czogW10gfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciBmb3IgdW5rbm93biB0eXBlcyB3aXRoIG5vIHJlY2lwaWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHR5cGU6ICdwYXltZW50JyB9KSxcbiAgICAgICAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gICAgICAgICdzaG91bGQgdGhyb3cgZm9yIHBheW1lbnQgdHlwZSB3aXRoIG5vIHJlY2lwaWVudHMnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHR4UGFyYW1zIGlzIHVuZGVmaW5lZCBhbmQgbm8gaW50ZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB1bmRlZmluZWQpLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBpbnRlbnQgaGFzIHN0YWtpbmdSZXF1ZXN0SWQgKHN0YWtpbmcgYnlwYXNzKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTEyMycgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9wYWdhdGVzIHN0YWtpbmdSZXF1ZXN0SWQgZnJvbSBpbnRlbnQgaW50byBlZmZlY3RpdmVUeFBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTQ1NicgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuc3Rha2luZ1JlcXVlc3RJZCwgJ3N0YWtpbmctcmVxLTQ1NicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG92ZXJ3cml0ZSBleGlzdGluZyBzdGFraW5nUmVxdWVzdElkIGluIHR4UGFyYW1zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAnZGVsZWdhdGUnLCBzdGFraW5nUmVxdWVzdElkOiAnZnJvbS1pbnRlbnQnIH0gYXMgYW55LFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHN0YWtpbmdSZXF1ZXN0SWQ6ICdmcm9tLWNhbGxlcicgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnN0YWtpbmdSZXF1ZXN0SWQsICdmcm9tLWNhbGxlcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZWZlcnMgdHhQYXJhbXMucmVjaXBpZW50cyBvdmVyIGludGVudC5yZWNpcGllbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICcweGludGVudCcgfSwgYW1vdW50OiB7IHZhbHVlOiAnOTk5Jywgc3ltYm9sOiAnZXRoJyB9IH1dLFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGNhbGxlcicsIGFtb3VudDogJzEwMCcgfV0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHR4UGFyYW1zKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGNhbGxlcicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
348
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdXRpbHMvdHNzL3JlY2lwaWVudFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHNGQUFvSDtBQUNwSCw0REFBMEU7QUFHMUUsU0FBUyxhQUFhLENBQUMsWUFBZ0MsRUFBRTtJQUN2RCxPQUFPO1FBQ0wsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLEdBQUcsU0FBUztLQUNXLENBQUM7QUFDNUIsQ0FBQztBQUVELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN6QixRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLDZCQUE2QixFQUFFO1lBQ2hDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxXQUFXO2dCQUNYLGVBQWU7Z0JBQ2YsZUFBZTtnQkFDZixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsYUFBYTtnQkFDYixhQUFhO2dCQUNiLGNBQWM7Z0JBQ2QsVUFBVTtnQkFDVixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsY0FBYztnQkFDZCxjQUFjO2dCQUNkLHlEQUF5RDtnQkFDekQsVUFBVTtnQkFDVixZQUFZO2dCQUNaLGlCQUFpQjtnQkFDakIsT0FBTztnQkFDUCxTQUFTO2dCQUNULG1CQUFtQjtnQkFDbkIscUJBQXFCO2dCQUNyQixlQUFlO2dCQUNmLGVBQWU7Z0JBQ2YsV0FBVztnQkFDWCxPQUFPO2dCQUNQLG1CQUFtQjtnQkFDbkIsZUFBZTtnQkFDZixnQkFBZ0I7Z0JBQ2hCLGdCQUFnQjtnQkFDaEIsd0JBQXdCO2dCQUN4QixlQUFlO2dCQUNmLFFBQVE7Z0JBQ1IsK0NBQStDO2dCQUMvQyxRQUFRO2dCQUNSLFdBQVc7Z0JBQ1gsc0RBQXNEO2dCQUN0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SCxFQUFFLENBQUMsK0RBQStELEVBQUU7Z0JBQ2xFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBUyxFQUFFLENBQUMsQ0FBQztnQkFDdkYsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSx5Q0FBd0IsRUFBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsZ0NBQXVCLENBQUMsQ0FBQztZQUN4RixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IE5PX1JFQ0lQSUVOVF9UWF9UWVBFUywgcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9yZWNpcGllbnRVdGlscyc7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby9lcnJvcnMnO1xuaW1wb3J0IHsgVHhSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVHlwZXMnO1xuXG5mdW5jdGlvbiBtYWtlVHhSZXF1ZXN0KG92ZXJyaWRlczogUGFydGlhbDxUeFJlcXVlc3Q+ID0ge30pOiBUeFJlcXVlc3Qge1xuICByZXR1cm4ge1xuICAgIHR4UmVxdWVzdElkOiAndGVzdC10eC1yZXF1ZXN0LWlkJyxcbiAgICB3YWxsZXRJZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICBpbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG59XG5cbmRlc2NyaWJlKCdyZWNpcGllbnRVdGlscycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ05PX1JFQ0lQSUVOVF9UWF9UWVBFUycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnY29udGFpbnMgYWxsIGV4cGVjdGVkIHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAgICAgIC8vIEVDRFNBIEVWTVxuICAgICAgICAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgJ2ZpbGxOb25jZScsXG4gICAgICAgICd0cmFuc2ZlclRva2VuJyxcbiAgICAgICAgJ3Rva2VuQXBwcm92YWwnLFxuICAgICAgICAnY29uc29saWRhdGUnLFxuICAgICAgICAnYnJpZGdlRnVuZHMnLFxuICAgICAgICAnZW5hYmxlVG9rZW4nLFxuICAgICAgICAnZW5hYmxldG9rZW4nLFxuICAgICAgICAnZGlzYWJsZXRva2VuJyxcbiAgICAgICAgJ2N1c3RvbVR4JyxcbiAgICAgICAgJ2RlZmlBcHByb3ZlJyxcbiAgICAgICAgJ2RlZmlEZXBvc2l0JyxcbiAgICAgICAgJ2RlZmlXaXRoZHJhdycsXG4gICAgICAgICdjb250cmFjdENhbGwnLFxuICAgICAgICAvLyBTdGFraW5nIOKAlCAnZGVsZWdhdGUnIGFsc28gY292ZXJzIFNPTCBzb2xEZWxlZ2F0ZUludGVudFxuICAgICAgICAnZGVsZWdhdGUnLFxuICAgICAgICAndW5kZWxlZ2F0ZScsXG4gICAgICAgICdzd2l0Y2hWYWxpZGF0b3InLFxuICAgICAgICAnc3Rha2UnLFxuICAgICAgICAndW5zdGFrZScsXG4gICAgICAgICdzdGFrZVdpdGhDYWxsRGF0YScsXG4gICAgICAgICd1bnN0YWtlV2l0aENhbGxEYXRhJyxcbiAgICAgICAgJ3RyYW5zZmVyU3Rha2UnLFxuICAgICAgICAnaW5jcmVhc2VTdGFrZScsXG4gICAgICAgICdnb1Vuc3Rha2UnLFxuICAgICAgICAnY2xhaW0nLFxuICAgICAgICAnc3Rha2VDbGFpbVJld2FyZHMnLFxuICAgICAgICAnY3JlYXRlQWNjb3VudCcsXG4gICAgICAgICd0cmFuc2ZlckFjY2VwdCcsXG4gICAgICAgICd0cmFuc2ZlclJlamVjdCcsXG4gICAgICAgICd0cmFuc2Zlck9mZmVyV2l0aGRyYXduJyxcbiAgICAgICAgJ2NhbnRvbkNvbW1hbmQnLFxuICAgICAgICAncGxlZGdlJyxcbiAgICAgICAgLy8gQXZhbGFuY2hlIC8gRmxhcmUgY3Jvc3MtY2hhaW4gYXRvbWljIGltcG9ydHNcbiAgICAgICAgJ2ltcG9ydCcsXG4gICAgICAgICdpbXBvcnR0b2MnLFxuICAgICAgICAvLyBTT0w6IGRlYWN0aXZhdGUgc3Rha2UgYWNjb3VudCAoc29sRGVhY3RpdmF0ZUludGVudClcbiAgICAgICAgJ2RlYWN0aXZhdGUnLFxuICAgICAgICAvLyBTT0w6IGF1dGhvcml6ZSBzdGFrZSBhY2NvdW50IChzb2xBdXRob3JpemVJbnRlbnQpXG4gICAgICAgICdhdXRob3JpemUnLFxuICAgICAgXTtcbiAgICAgIGV4cGVjdGVkLmZvckVhY2goKHQpID0+IGFzc2VydC5vayhOT19SRUNJUElFTlRfVFhfVFlQRVMuaGFzKHQpLCBgJHt0fSBzaG91bGQgYmUgaW4gTk9fUkVDSVBJRU5UX1RYX1RZUEVTYCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKE5PX1JFQ0lQSUVOVF9UWF9UWVBFUy5zaXplLCBleHBlY3RlZC5sZW5ndGgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGNvbnRhaW4gdmFsdWUtdHJhbnNmZXIgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBbJ3BheW1lbnQnLCAnZmFub3V0JywgJ3ZvdGUnLCAnZGVmaS1kZXBvc2l0JywgJ2RlZmktcmVkZWVtJ10uZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBhc3NlcnQub2soIU5PX1JFQ0lQSUVOVF9UWF9UWVBFUy5oYXModCksIGAke3R9IG11c3QgTk9UIGJlIGluIE5PX1JFQ0lQSUVOVF9UWF9UWVBFU2ApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Bhc3NlcyB0aHJvdWdoIHR4UGFyYW1zLnJlY2lwaWVudHMgd2hlbiBwcmVzZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGFiYycsIGFtb3VudDogJzEwMCcgfV0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHR4UGFyYW1zKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHMsIHR4UGFyYW1zLnJlY2lwaWVudHMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhbGxzIGJhY2sgdG8gaW50ZW50LnJlY2lwaWVudHMgd2hlbiB0eFBhcmFtcyBoYXMgbm9uZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogeyBhZGRyZXNzOiAnMHhhYmMnIH0sIGFtb3VudDogeyB2YWx1ZTogJzUwMCcsIHN5bWJvbDogJ2V0aCcgfSB9XSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8ubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGFiYycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzPy5bMF0uYW1vdW50LCAnNTAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVzb2x2ZXMgdHhUeXBlIGZyb20gaW50ZW50LmludGVudFR5cGUgd2hlbiB0eFBhcmFtcy50eXBlIGlzIGFic2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3QoeyBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2NvbnNvbGlkYXRlJyB9IGFzIGFueSB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudHlwZSwgJ2NvbnNvbGlkYXRlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgZm9yIGV4ZW1wdCB0eXBlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgdHhUeXBlIG9mIFtcbiAgICAgICAgJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICdjb25zb2xpZGF0ZScsXG4gICAgICAgICdjb250cmFjdENhbGwnLFxuICAgICAgICAnZGVsZWdhdGUnLFxuICAgICAgICAnc3Rha2UnLFxuICAgICAgICAnY3JlYXRlQWNjb3VudCcsXG4gICAgICAgICdwbGVkZ2UnLFxuICAgICAgICAnaW1wb3J0JyxcbiAgICAgICAgJ2ltcG9ydHRvYycsXG4gICAgICAgICdkZWFjdGl2YXRlJyxcbiAgICAgIF0pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHsgdHlwZTogdHhUeXBlIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB0aHJvdyBmb3IgQXZhbGFuY2hlIGNyb3NzLWNoYWluIGltcG9ydHMgcmVzb2x2ZWQgZnJvbSBpbnRlbnQuaW50ZW50VHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFAtY2hhaW4gYW5kIEMtY2hhaW4gaW1wb3J0IGludGVudHMgbGVnaXRpbWF0ZWx5IGNhcnJ5IG5vIHJlY2lwaWVudHMg4oCUXG4gICAgICAvLyB0aGUgd2FsbGV0IGltcG9ydHMgaXRzIG93biBVVFhPcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgdGhlXG4gICAgICAvLyB3YWxsZXQgaXRzZWxmLiBUaGUgaW50ZW50VHlwZSBsaXZlcyBvbmx5IG9uIHRoZSBpbnRlbnQgKHR4UGFyYW1zLnR5cGVcbiAgICAgIC8vIGlzIHVuc2V0IG9uIHRoZSBNUEMgc2lnbmluZyBjYWxsKSBzbyB0aGUgZ3VhcmQgbXVzdCByZWFkIGl0IGZyb20gdGhlcmUuXG4gICAgICBmb3IgKGNvbnN0IGludGVudFR5cGUgb2YgWydpbXBvcnQnLCAnaW1wb3J0dG9jJ10pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7IGludGVudDogeyBpbnRlbnRUeXBlIH0gYXMgYW55IH0pO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBidWlsZFBhcmFtcy50eXBlIGlzIFBhc2NhbENhc2UgYnV0IGludGVudC5pbnRlbnRUeXBlIGlzIGxvd2VyY2FzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHNpZ25UcmFuc2FjdGlvblRzcyBwYXNzZXMgdHhQcmVidWlsZC5idWlsZFBhcmFtcyBhcyB0eFBhcmFtcy4gUHJlYnVpbGQgdXNlc1xuICAgICAgLy8gdHlwZTogJ0ltcG9ydCcgd2hpbGUgV1Agc3RvcmVzIGludGVudFR5cGU6ICdpbXBvcnQnIG9uIHRoZSB0eFJlcXVlc3QuXG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHsgaW50ZW50OiB7IGludGVudFR5cGU6ICdpbXBvcnQnLCByZWNpcGllbnRzOiBbXSB9IGFzIGFueSB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwgeyB0eXBlOiAnSW1wb3J0JywgcmVjaXBpZW50czogW10gfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciBmb3IgdW5rbm93biB0eXBlcyB3aXRoIG5vIHJlY2lwaWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHR5cGU6ICdwYXltZW50JyB9KSxcbiAgICAgICAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gICAgICAgICdzaG91bGQgdGhyb3cgZm9yIHBheW1lbnQgdHlwZSB3aXRoIG5vIHJlY2lwaWVudHMnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHR4UGFyYW1zIGlzIHVuZGVmaW5lZCBhbmQgbm8gaW50ZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB1bmRlZmluZWQpLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBpbnRlbnQgaGFzIHN0YWtpbmdSZXF1ZXN0SWQgKHN0YWtpbmcgYnlwYXNzKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTEyMycgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9wYWdhdGVzIHN0YWtpbmdSZXF1ZXN0SWQgZnJvbSBpbnRlbnQgaW50byBlZmZlY3RpdmVUeFBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTQ1NicgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuc3Rha2luZ1JlcXVlc3RJZCwgJ3N0YWtpbmctcmVxLTQ1NicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG92ZXJ3cml0ZSBleGlzdGluZyBzdGFraW5nUmVxdWVzdElkIGluIHR4UGFyYW1zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAnZGVsZWdhdGUnLCBzdGFraW5nUmVxdWVzdElkOiAnZnJvbS1pbnRlbnQnIH0gYXMgYW55LFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHN0YWtpbmdSZXF1ZXN0SWQ6ICdmcm9tLWNhbGxlcicgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnN0YWtpbmdSZXF1ZXN0SWQsICdmcm9tLWNhbGxlcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZWZlcnMgdHhQYXJhbXMucmVjaXBpZW50cyBvdmVyIGludGVudC5yZWNpcGllbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICcweGludGVudCcgfSwgYW1vdW50OiB7IHZhbHVlOiAnOTk5Jywgc3ltYm9sOiAnZXRoJyB9IH1dLFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGNhbGxlcicsIGFtb3VudDogJzEwMCcgfV0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHR4UGFyYW1zKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGNhbGxlcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZXNlcnZlcyBkYXRhIGZpZWxkIGZyb20gaW50ZW50IHJlY2lwaWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHtcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHsgYWRkcmVzczogJzB4YWJjJyB9LCBhbW91bnQ6IHsgdmFsdWU6ICcxMDAnLCBzeW1ib2w6ICdldGgnIH0sIGRhdGE6ICcweGRlYWRiZWVmJyB9XSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmRhdGEsICcweGRlYWRiZWVmJyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndG9rZW5OYW1lIHByZXNlcnZhdGlvbiByZWdyZXNzaW9uIHRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3ByZXNlcnZlcyB0b2tlbk5hbWUgZnJvbSBhbW91bnQuc3ltYm9sIHdoZW4gaXQgZGlmZmVycyBmcm9tIGNoYWluTmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdVc2VyV2FsbGV0QWRkcmVzczExMTExMTExMTExMTExMTExMTExMTExMTExMScgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHsgdmFsdWU6ICcxMDAwMDAwJywgc3ltYm9sOiAndHNvbDp1c2RjJyB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9LCAndHNvbCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHM/Lmxlbmd0aCwgMSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLnRva2VuTmFtZSwgJ3Rzb2w6dXNkYycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzIE5PVCBzZXQgdG9rZW5OYW1lIHdoZW4gc3ltYm9sIGVxdWFscyBjaGFpbk5hbWUgKG5hdGl2ZSBTT0wgdHJhbnNmZXIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHtcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHsgYWRkcmVzczogJ1JlY2lwaWVudEFkZHJlc3MxMTExMTExMTExMTExMTExMTExMTExMTExMTEnIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7IHZhbHVlOiAnNTAwMDAwMDAwMCcsIHN5bWJvbDogJ3Rzb2wnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30sICd0c29sJyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLnRva2VuTmFtZSwgdW5kZWZpbmVkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncHJlZmVycyB0b2tlbkRhdGEudG9rZW5OYW1lIG92ZXIgYW1vdW50LnN5bWJvbCAodXNlcyBkaXN0aW5jdCB2YWx1ZXMgdG8gdmVyaWZ5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdSZWNpcGllbnRBZGRyZXNzMTExMTExMTExMTExMTExMTExMTExMTExMTExJyB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzUwMDAwMCcsIHN5bWJvbDogJ3Rzb2w6dXNkYy1hbHQnIH0sXG4gICAgICAgICAgICAgICAgdG9rZW5EYXRhOiB7IHRva2VuVHlwZTogJ2Z1bmdpYmxlJywgdG9rZW5RdWFudGl0eTogJzUwMDAwMCcsIHRva2VuTmFtZTogJ2Nhbm9uaWNhbC10b2tlbi1uYW1lJyB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9LCAndHNvbCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHM/LlswXS50b2tlbk5hbWUsICdjYW5vbmljYWwtdG9rZW4tbmFtZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdmYWxscyBiYWNrIHRvIGFtb3VudC5zeW1ib2wgd2hlbiB0b2tlbkRhdGEudG9rZW5OYW1lIGlzIGFic2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdSZWNpcGllbnRBZGRyZXNzMTExMTExMTExMTExMTExMTExMTExMTExMTExJyB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzIwMDAwMCcsIHN5bWJvbDogJ3NvbDp1c2RjJyB9LFxuICAgICAgICAgICAgICAgIHRva2VuRGF0YTogeyB0b2tlblR5cGU6ICdmdW5naWJsZScsIHRva2VuUXVhbnRpdHk6ICcyMDAwMDAnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30sICdzb2wnKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzPy5bMF0udG9rZW5OYW1lLCAnc29sOnVzZGMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZmFsbHMgYmFjayB0byBhbW91bnQuc3ltYm9sIHdoZW4gdG9rZW5EYXRhLnRva2VuTmFtZSBpcyBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICAgIGludGVudDoge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogeyBhZGRyZXNzOiAnUmVjaXBpZW50QWRkcmVzczExMTExMTExMTExMTExMTExMTExMTExMTExMScgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHsgdmFsdWU6ICcxMDAwMDAnLCBzeW1ib2w6ICd0c29sOnVzZGMnIH0sXG4gICAgICAgICAgICAgICAgdG9rZW5EYXRhOiB7IHRva2VuVHlwZTogJ2Z1bmdpYmxlJywgdG9rZW5RdWFudGl0eTogJzEwMDAwMCcsIHRva2VuTmFtZTogJycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7fSwgJ3Rzb2wnKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzPy5bMF0udG9rZW5OYW1lLCAndHNvbDp1c2RjJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RvZXMgTk9UIHNldCB0b2tlbk5hbWUgd2hlbiBjaGFpbk5hbWUgaXMgYWJzZW50IChsZWdhY3kgRUNEU0EgY2FsbGVycywgbm8gdG9rZW5EYXRhKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICcweGFiYycgfSwgYW1vdW50OiB7IHZhbHVlOiAnMTAwJywgc3ltYm9sOiAnZXRoJyB9IH1dLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHM/LlswXS50b2tlbk5hbWUsIHVuZGVmaW5lZCk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGFiYycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwcmVzZXJ2ZXMgdG9rZW5EYXRhLnRva2VuTmFtZSB3aGVuIGNoYWluTmFtZSBpcyBhYnNlbnQgKGxlZ2FjeSBFQ0RTQSB3aXRoIHRva2VuRGF0YSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICAgIGludGVudDoge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogeyBhZGRyZXNzOiAnMHhhYmMnIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7IHZhbHVlOiAnMTAwMCcsIHN5bWJvbDogJ2VyYzIwOnVzZGMnIH0sXG4gICAgICAgICAgICAgICAgdG9rZW5EYXRhOiB7IHRva2VuVHlwZTogJ2Z1bmdpYmxlJywgdG9rZW5RdWFudGl0eTogJzEwMDAnLCB0b2tlbk5hbWU6ICdldGg6dXNkYycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7fSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLnRva2VuTmFtZSwgJ2V0aDp1c2RjJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3NlbmRNYW55IHRzb2w6dXNkYzogZG9lcyBub3QgdGhyb3cgYW5kIHByZXNlcnZlcyB0b2tlbk5hbWUgaW4gZnVsbCByb3VuZC10cmlwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHtcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHsgYWRkcmVzczogJ1NvbFVzZXJXYWxsZXQxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzIwMDAwMDAnLCBzeW1ib2w6ICd0c29sOnVzZGMnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdTb2xVc2VyV2FsbGV0MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMicgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHsgdmFsdWU6ICczMDAwMDAwJywgc3ltYm9sOiAndHNvbDp1c2RjJyB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9LCAndHNvbCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHM/Lmxlbmd0aCwgMik7XG4gICAgICAgIHJlc3VsdC5yZWNpcGllbnRzIS5mb3JFYWNoKChyKSA9PiBhc3NlcnQuc3RyaWN0RXF1YWwoci50b2tlbk5hbWUsICd0c29sOnVzZGMnKSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cyFbMF0uYW1vdW50LCAnMjAwMDAwMCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHMhWzFdLmFtb3VudCwgJzMwMDAwMDAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnaGFuZGxlcyBtaXhlZCBuYXRpdmUgKyB0b2tlbiByZWNpcGllbnRzIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdTb2xOYXRpdmUxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7IHZhbHVlOiAnMTAwMDAwMDAwMCcsIHN5bWJvbDogJ3Rzb2wnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdTb2xUb2tlbjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHsgdmFsdWU6ICc1MDAwMDAnLCBzeW1ib2w6ICd0c29sOnVzZGMnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30sICd0c29sJyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cyFbMF0udG9rZW5OYW1lLCB1bmRlZmluZWQpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHMhWzFdLnRva2VuTmFtZSwgJ3Rzb2w6dXNkYycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnU09MIG5vLXJlY2lwaWVudCBpbnRlbnQgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnZG9lcyBub3QgdGhyb3cgZm9yIFwiZGVsZWdhdGVcIiAoc29sRGVsZWdhdGVJbnRlbnQpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHsgaW50ZW50OiB7IGludGVudFR5cGU6ICdkZWxlZ2F0ZScgfSBhcyBhbnkgfSk7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgdGhyb3cgZm9yIFwiZGVhY3RpdmF0ZVwiIChzb2xEZWFjdGl2YXRlSW50ZW50KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7IGludGVudDogeyBpbnRlbnRUeXBlOiAnZGVhY3RpdmF0ZScgfSBhcyBhbnkgfSk7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgdGhyb3cgZm9yIFwiYXV0aG9yaXplXCIgKHNvbEF1dGhvcml6ZUludGVudCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3QoeyBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2F1dGhvcml6ZScgfSBhcyBhbnkgfSk7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndGhyb3dzIGZvciBzdGFraW5nQXV0aG9yaXplIOKAlCBtdXN0IGJlIHZhbGlkYXRlZCBhdCBjb2luIGxheWVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHsgaW50ZW50OiB7IGludGVudFR5cGU6ICdzdGFraW5nQXV0aG9yaXplJyB9IGFzIGFueSB9KTtcbiAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7fSksIEludmFsaWRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/utils/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
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 bs58 = __importStar(require("bs58"));
|
|
38
|
+
const wallet_1 = require("../../../../src/bitgo/utils/wallet");
|
|
39
|
+
describe('generateRandomPassword', () => {
|
|
40
|
+
it('returns a decodable base58 string of numWords * 4 bytes', () => {
|
|
41
|
+
for (const numWords of [1, 5, 10, 32]) {
|
|
42
|
+
const pwd = (0, wallet_1.generateRandomPassword)(numWords);
|
|
43
|
+
const decoded = bs58.decode(pwd);
|
|
44
|
+
decoded.length.should.equal(numWords * 4);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
it('produces distinct outputs on repeated calls', () => {
|
|
48
|
+
const samples = new Set();
|
|
49
|
+
for (let i = 0; i < 100; i++) {
|
|
50
|
+
samples.add((0, wallet_1.generateRandomPassword)(5));
|
|
51
|
+
}
|
|
52
|
+
samples.size.should.equal(100);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3V0aWxzL3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtCQUFnQjtBQUNoQiwyQ0FBNkI7QUFDN0IsK0RBQTRFO0FBRTVFLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtRQUNqRSxLQUFLLE1BQU0sUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFBLCtCQUFzQixFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1FBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSwrQkFBc0IsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3dhbGxldCc7XG5cbmRlc2NyaWJlKCdnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkJywgKCkgPT4ge1xuICBpdCgncmV0dXJucyBhIGRlY29kYWJsZSBiYXNlNTggc3RyaW5nIG9mIG51bVdvcmRzICogNCBieXRlcycsICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IG51bVdvcmRzIG9mIFsxLCA1LCAxMCwgMzJdKSB7XG4gICAgICBjb25zdCBwd2QgPSBnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkKG51bVdvcmRzKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBiczU4LmRlY29kZShwd2QpO1xuICAgICAgZGVjb2RlZC5sZW5ndGguc2hvdWxkLmVxdWFsKG51bVdvcmRzICogNCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgncHJvZHVjZXMgZGlzdGluY3Qgb3V0cHV0cyBvbiByZXBlYXRlZCBjYWxscycsICgpID0+IHtcbiAgICBjb25zdCBzYW1wbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykge1xuICAgICAgc2FtcGxlcy5hZGQoZ2VuZXJhdGVSYW5kb21QYXNzd29yZCg1KSk7XG4gICAgfVxuICAgIHNhbXBsZXMuc2l6ZS5zaG91bGQuZXF1YWwoMTAwKTtcbiAgfSk7XG59KTtcbiJdfQ==
|