@bitgo/sdk-core 2.0.0-rc.14 → 2.0.0-rc.15
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/CHANGELOG.md +11 -0
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +41 -8
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/ecdsa.js +151 -76
- package/dist/src/bitgo/tss/ecdsa/types.d.ts +1 -0
- package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/types.js +1 -1
- package/dist/tsconfig.tsbuildinfo +4 -4
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [2.0.0-rc.15](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-core@2.0.0-rc.14...@bitgo/sdk-core@2.0.0-rc.15) (2022-09-07)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **sdk-core:** ecdsa type converters ([800b01b](https://github.com/BitGo/BitGoJS/commit/800b01b02194011bc0ac608a5d75094f935d6235))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [2.0.0-rc.14](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-core@2.0.0-rc.13...@bitgo/sdk-core@2.0.0-rc.14) (2022-09-06)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { DecryptableNShare, CombinedKey, EncryptedNShare, AShare, CreateUserGammaAndMuShareRT, CreateUserOmicronAndDeltaShareRT, DShare, GShare, KeyShare, NShare, OShare, SendShareType, SignatureShare, SignShare, WShare, XShare, YShare, SendShareToBitgoRT, ReceivedShareType } from './types';
|
|
2
|
+
import { DecryptableNShare, CombinedKey, EncryptedNShare, AShare, CreateUserGammaAndMuShareRT, CreateUserOmicronAndDeltaShareRT, DShare, GShare, KeyShare, NShare, OShare, SendShareType, SignatureShare, SignShare, WShare, XShare, YShare, SendShareToBitgoRT, ReceivedShareType, BShare, Signature } from './types';
|
|
3
3
|
import { SignatureShareRecord, SignatureShareType } from './../../utils';
|
|
4
4
|
import { BitGoBase } from '../../bitgoBase';
|
|
5
5
|
import { KShare, MUShare, SShare } from '../../../account-lib/mpc/tss/ecdsa/types';
|
|
@@ -82,6 +82,8 @@ export declare function decryptNShare(encryptedNShare: DecryptableNShare): Promi
|
|
|
82
82
|
* @returns public key
|
|
83
83
|
*/
|
|
84
84
|
export declare function getPublicKey(commonKeyChain: string): string;
|
|
85
|
+
export declare const delimeter = ":";
|
|
86
|
+
export declare const secondaryDelimeter = "-";
|
|
85
87
|
/**
|
|
86
88
|
* parses K share from signature share record
|
|
87
89
|
* @param share - signature share record
|
|
@@ -154,22 +156,53 @@ export declare function convertSDShare(share: {
|
|
|
154
156
|
* @returns Signature Share
|
|
155
157
|
*/
|
|
156
158
|
export declare function parseSignatureShare(share: SignatureShareRecord): SignatureShare;
|
|
159
|
+
/**
|
|
160
|
+
* convets combined signature to signature share record
|
|
161
|
+
* @param signature - combined signature share
|
|
162
|
+
* @param userIndex - user index, either 1 (user) or 2 (backup)
|
|
163
|
+
* @returns signature share record
|
|
164
|
+
*/
|
|
165
|
+
export declare function convertCombinedSignature(signature: Signature, userIndex: number): SignatureShareRecord;
|
|
157
166
|
/**
|
|
158
167
|
* convert signature share to signature share record
|
|
159
|
-
* @param share -
|
|
168
|
+
* @param share - Signature share
|
|
160
169
|
* @returns signature share record
|
|
161
170
|
*/
|
|
162
171
|
export declare function convertSignatureShare(share: SignatureShare, senderIndex: number): SignatureShareRecord;
|
|
163
172
|
/**
|
|
164
|
-
*
|
|
173
|
+
* converts B share to signature share record
|
|
174
|
+
* @param share - B share
|
|
175
|
+
* @returns signature share record
|
|
176
|
+
*/
|
|
177
|
+
export declare function convertBShare(share: BShare): SignatureShareRecord;
|
|
178
|
+
/**
|
|
179
|
+
* parses B share from signature share record
|
|
180
|
+
* @param share B share record
|
|
181
|
+
* @returns B Share
|
|
182
|
+
*/
|
|
183
|
+
export declare function parseBShare(share: SignatureShareRecord): BShare;
|
|
184
|
+
/**
|
|
185
|
+
* converts O share to signature share record
|
|
186
|
+
* @param share O share
|
|
187
|
+
* @returns signature share record
|
|
188
|
+
*/
|
|
189
|
+
export declare function convertOShare(share: OShare): SignatureShareRecord;
|
|
190
|
+
/**
|
|
191
|
+
* parses O share from signature share record
|
|
192
|
+
* @param share O share record
|
|
193
|
+
* @returns O Share
|
|
194
|
+
*/
|
|
195
|
+
export declare function parseOShare(share: SignatureShareRecord): OShare;
|
|
196
|
+
/**
|
|
197
|
+
* gets participant index
|
|
165
198
|
* @param participant - participants (user, backup, or bitgo)
|
|
166
199
|
* @returns index (1, 2, 0r 3)
|
|
167
200
|
*/
|
|
168
|
-
export declare function
|
|
201
|
+
export declare function getParticipantIndex(participant: 'user' | 'backup' | 'bitgo'): number;
|
|
169
202
|
/**
|
|
170
|
-
* gets
|
|
171
|
-
* @param index
|
|
172
|
-
* @returns
|
|
203
|
+
* gets participant name by index
|
|
204
|
+
* @param index participant index
|
|
205
|
+
* @returns participant name
|
|
173
206
|
*/
|
|
174
|
-
export declare function
|
|
207
|
+
export declare function getParticipantFromIndex(index: number): SignatureShareType;
|
|
175
208
|
//# sourceMappingURL=ecdsa.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":";AACA,OAAO,EACL,iBAAiB,EACjB,WAAW,EAEX,eAAe,EACf,MAAM,EACN,2BAA2B,EAC3B,gCAAgC,EAChC,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,aAAa,EACb,cAAc,EACd,SAAS,EACT,MAAM,EACN,MAAM,EACN,MAAM,EACN,kBAAkB,EAClB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getParticipantFromIndex = exports.getParticipantIndex = exports.parseOShare = exports.convertOShare = exports.parseBShare = exports.convertBShare = exports.convertSignatureShare = exports.convertCombinedSignature = exports.parseSignatureShare = exports.convertSDShare = exports.parseSDShare = exports.convertDShare = exports.parseDShare = exports.convertMuShare = exports.parseMuShare = exports.convertAShare = exports.parseAShare = exports.convertKShare = exports.parseKShare = exports.secondaryDelimeter = exports.delimeter = exports.getPublicKey = exports.decryptNShare = exports.encryptNShare = exports.getBitgoToUserLatestShare = exports.sendShareToBitgo = exports.createUserSignatureShare = exports.createUserOmicronAndDeltaShare = exports.createUserGammaAndMuShare = exports.createUserSignShare = exports.createCombinedKey = void 0;
|
|
4
4
|
const tss_1 = require("./../../../account-lib/mpc/tss");
|
|
5
5
|
const types_1 = require("./types");
|
|
6
6
|
const utils_1 = require("./../../utils");
|
|
@@ -254,22 +254,11 @@ function getPublicKey(commonKeyChain) {
|
|
|
254
254
|
return commonKeyChain.slice(0, 66);
|
|
255
255
|
}
|
|
256
256
|
exports.getPublicKey = getPublicKey;
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
*/
|
|
263
|
-
function validateShare(share, shareLength, isExactLength = true) {
|
|
264
|
-
const error = (message) => new Error(message);
|
|
265
|
-
if (share.share.length < shareLength) {
|
|
266
|
-
throw error(`Excepted share length to be greater than or equal ${shareLength} but got ${share.share.length}.`);
|
|
267
|
-
}
|
|
268
|
-
if (isExactLength && share.share.length !== shareLength) {
|
|
269
|
-
throw error(`Excepted share length to be ${shareLength} but got ${share.share.length}.`);
|
|
270
|
-
}
|
|
271
|
-
if (share.from === share.to) {
|
|
272
|
-
throw error(`Key share sender and receiver cannot be the same.`);
|
|
257
|
+
exports.delimeter = ':';
|
|
258
|
+
exports.secondaryDelimeter = '-';
|
|
259
|
+
function validateSharesLength(shares, expectedLength, shareName) {
|
|
260
|
+
if (shares.length < expectedLength) {
|
|
261
|
+
throw new Error(`Invalid ${shareName} share`);
|
|
273
262
|
}
|
|
274
263
|
}
|
|
275
264
|
/**
|
|
@@ -278,12 +267,13 @@ function validateShare(share, shareLength, isExactLength = true) {
|
|
|
278
267
|
* @returns K Share
|
|
279
268
|
*/
|
|
280
269
|
function parseKShare(share) {
|
|
281
|
-
|
|
270
|
+
const shares = share.share.split(exports.delimeter);
|
|
271
|
+
validateSharesLength(shares, 2, 'K');
|
|
282
272
|
return {
|
|
283
|
-
i:
|
|
284
|
-
j:
|
|
285
|
-
k:
|
|
286
|
-
n:
|
|
273
|
+
i: getParticipantIndex(share.to),
|
|
274
|
+
j: getParticipantIndex(share.from),
|
|
275
|
+
k: shares[0],
|
|
276
|
+
n: shares[1],
|
|
287
277
|
};
|
|
288
278
|
}
|
|
289
279
|
exports.parseKShare = parseKShare;
|
|
@@ -294,9 +284,9 @@ exports.parseKShare = parseKShare;
|
|
|
294
284
|
*/
|
|
295
285
|
function convertKShare(share) {
|
|
296
286
|
return {
|
|
297
|
-
to:
|
|
298
|
-
from:
|
|
299
|
-
share: share.k
|
|
287
|
+
to: getParticipantFromIndex(share.i),
|
|
288
|
+
from: getParticipantFromIndex(share.j),
|
|
289
|
+
share: `${share.k}${exports.delimeter}${share.n}`,
|
|
300
290
|
};
|
|
301
291
|
}
|
|
302
292
|
exports.convertKShare = convertKShare;
|
|
@@ -306,14 +296,15 @@ exports.convertKShare = convertKShare;
|
|
|
306
296
|
* @returns A Share
|
|
307
297
|
*/
|
|
308
298
|
function parseAShare(share) {
|
|
309
|
-
|
|
299
|
+
const shares = share.share.split(exports.delimeter);
|
|
300
|
+
validateSharesLength(shares, 4, 'A');
|
|
310
301
|
return {
|
|
311
|
-
i:
|
|
312
|
-
j:
|
|
313
|
-
k:
|
|
314
|
-
alpha:
|
|
315
|
-
mu:
|
|
316
|
-
n:
|
|
302
|
+
i: getParticipantIndex(share.to),
|
|
303
|
+
j: getParticipantIndex(share.from),
|
|
304
|
+
k: shares[0],
|
|
305
|
+
alpha: shares[1],
|
|
306
|
+
mu: shares[2],
|
|
307
|
+
n: shares[3],
|
|
317
308
|
};
|
|
318
309
|
}
|
|
319
310
|
exports.parseAShare = parseAShare;
|
|
@@ -324,9 +315,9 @@ exports.parseAShare = parseAShare;
|
|
|
324
315
|
*/
|
|
325
316
|
function convertAShare(share) {
|
|
326
317
|
return {
|
|
327
|
-
to:
|
|
328
|
-
from:
|
|
329
|
-
share: share.k
|
|
318
|
+
to: getParticipantFromIndex(share.i),
|
|
319
|
+
from: getParticipantFromIndex(share.j),
|
|
320
|
+
share: `${share.k}${exports.delimeter}${share.alpha}${exports.delimeter}${share.mu}${exports.delimeter}${share.n}`,
|
|
330
321
|
};
|
|
331
322
|
}
|
|
332
323
|
exports.convertAShare = convertAShare;
|
|
@@ -336,12 +327,13 @@ exports.convertAShare = convertAShare;
|
|
|
336
327
|
* @returns Mu Share
|
|
337
328
|
*/
|
|
338
329
|
function parseMuShare(share) {
|
|
339
|
-
|
|
330
|
+
const shares = share.share.split(exports.delimeter);
|
|
331
|
+
validateSharesLength(shares, 2, 'Mu');
|
|
340
332
|
return {
|
|
341
|
-
i:
|
|
342
|
-
j:
|
|
343
|
-
alpha:
|
|
344
|
-
mu:
|
|
333
|
+
i: getParticipantIndex(share.to),
|
|
334
|
+
j: getParticipantIndex(share.from),
|
|
335
|
+
alpha: shares[0],
|
|
336
|
+
mu: shares[1],
|
|
345
337
|
};
|
|
346
338
|
}
|
|
347
339
|
exports.parseMuShare = parseMuShare;
|
|
@@ -352,9 +344,9 @@ exports.parseMuShare = parseMuShare;
|
|
|
352
344
|
*/
|
|
353
345
|
function convertMuShare(share) {
|
|
354
346
|
return {
|
|
355
|
-
to:
|
|
356
|
-
from:
|
|
357
|
-
share: share.alpha
|
|
347
|
+
to: getParticipantFromIndex(share.i),
|
|
348
|
+
from: getParticipantFromIndex(share.j),
|
|
349
|
+
share: `${share.alpha}${exports.delimeter}${share.mu}`,
|
|
358
350
|
};
|
|
359
351
|
}
|
|
360
352
|
exports.convertMuShare = convertMuShare;
|
|
@@ -364,12 +356,13 @@ exports.convertMuShare = convertMuShare;
|
|
|
364
356
|
* @returns D Share
|
|
365
357
|
*/
|
|
366
358
|
function parseDShare(share) {
|
|
367
|
-
|
|
359
|
+
const shares = share.share.split(exports.delimeter);
|
|
360
|
+
validateSharesLength(shares, 2, 'D');
|
|
368
361
|
return {
|
|
369
|
-
i:
|
|
370
|
-
j:
|
|
371
|
-
delta:
|
|
372
|
-
Gamma:
|
|
362
|
+
i: getParticipantIndex(share.to),
|
|
363
|
+
j: getParticipantIndex(share.from),
|
|
364
|
+
delta: shares[0],
|
|
365
|
+
Gamma: shares[1],
|
|
373
366
|
};
|
|
374
367
|
}
|
|
375
368
|
exports.parseDShare = parseDShare;
|
|
@@ -380,9 +373,9 @@ exports.parseDShare = parseDShare;
|
|
|
380
373
|
*/
|
|
381
374
|
function convertDShare(share) {
|
|
382
375
|
return {
|
|
383
|
-
to:
|
|
384
|
-
from:
|
|
385
|
-
share: share.delta
|
|
376
|
+
to: getParticipantFromIndex(share.i),
|
|
377
|
+
from: getParticipantFromIndex(share.j),
|
|
378
|
+
share: `${share.delta}${exports.delimeter}${share.Gamma}`,
|
|
386
379
|
};
|
|
387
380
|
}
|
|
388
381
|
exports.convertDShare = convertDShare;
|
|
@@ -392,10 +385,11 @@ exports.convertDShare = convertDShare;
|
|
|
392
385
|
* @returns Object containing S and D Share
|
|
393
386
|
*/
|
|
394
387
|
function parseSDShare(share) {
|
|
395
|
-
|
|
388
|
+
const shares = share.share.split(exports.secondaryDelimeter);
|
|
389
|
+
validateSharesLength(shares, 2, 'SD');
|
|
396
390
|
return {
|
|
397
|
-
sShare: parseSignatureShare({ to: share.to, from: share.from, share:
|
|
398
|
-
dShare: parseDShare({ to: share.to, from: share.from, share:
|
|
391
|
+
sShare: parseSignatureShare({ to: share.to, from: share.from, share: shares[0] }),
|
|
392
|
+
dShare: parseDShare({ to: share.to, from: share.from, share: shares[1] }),
|
|
399
393
|
};
|
|
400
394
|
}
|
|
401
395
|
exports.parseSDShare = parseSDShare;
|
|
@@ -406,9 +400,9 @@ exports.parseSDShare = parseSDShare;
|
|
|
406
400
|
*/
|
|
407
401
|
function convertSDShare(share) {
|
|
408
402
|
return {
|
|
409
|
-
to:
|
|
410
|
-
from:
|
|
411
|
-
share: share.sShare.r
|
|
403
|
+
to: getParticipantFromIndex(share.dShare.i),
|
|
404
|
+
from: getParticipantFromIndex(share.dShare.j),
|
|
405
|
+
share: `${share.sShare.r}${exports.delimeter}${share.sShare.s}${exports.delimeter}${share.sShare.y}${exports.secondaryDelimeter}${share.dShare.delta}${exports.delimeter}${share.dShare.Gamma}`,
|
|
412
406
|
};
|
|
413
407
|
}
|
|
414
408
|
exports.convertSDShare = convertSDShare;
|
|
@@ -418,34 +412,115 @@ exports.convertSDShare = convertSDShare;
|
|
|
418
412
|
* @returns Signature Share
|
|
419
413
|
*/
|
|
420
414
|
function parseSignatureShare(share) {
|
|
421
|
-
|
|
415
|
+
const shares = share.share.split(exports.delimeter);
|
|
416
|
+
validateSharesLength(shares, 3, 'Signature');
|
|
422
417
|
return {
|
|
423
|
-
i:
|
|
424
|
-
r:
|
|
425
|
-
s:
|
|
426
|
-
y:
|
|
418
|
+
i: getParticipantIndex(share.to),
|
|
419
|
+
r: shares[0],
|
|
420
|
+
s: shares[1],
|
|
421
|
+
y: shares[2],
|
|
427
422
|
};
|
|
428
423
|
}
|
|
429
424
|
exports.parseSignatureShare = parseSignatureShare;
|
|
425
|
+
/**
|
|
426
|
+
* convets combined signature to signature share record
|
|
427
|
+
* @param signature - combined signature share
|
|
428
|
+
* @param userIndex - user index, either 1 (user) or 2 (backup)
|
|
429
|
+
* @returns signature share record
|
|
430
|
+
*/
|
|
431
|
+
function convertCombinedSignature(signature, userIndex) {
|
|
432
|
+
return {
|
|
433
|
+
to: utils_1.SignatureShareType.BITGO,
|
|
434
|
+
from: getParticipantFromIndex(userIndex),
|
|
435
|
+
share: `${signature.r}${exports.delimeter}${signature.s}${exports.delimeter}${signature.y}`,
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
exports.convertCombinedSignature = convertCombinedSignature;
|
|
430
439
|
/**
|
|
431
440
|
* convert signature share to signature share record
|
|
432
|
-
* @param share -
|
|
441
|
+
* @param share - Signature share
|
|
433
442
|
* @returns signature share record
|
|
434
443
|
*/
|
|
435
444
|
function convertSignatureShare(share, senderIndex) {
|
|
436
445
|
return {
|
|
437
|
-
to:
|
|
438
|
-
from:
|
|
439
|
-
share: share.r
|
|
446
|
+
to: getParticipantFromIndex(share.i),
|
|
447
|
+
from: getParticipantFromIndex(senderIndex),
|
|
448
|
+
share: `${share.r}${exports.delimeter}${share.s}${exports.delimeter}${share.y}`,
|
|
440
449
|
};
|
|
441
450
|
}
|
|
442
451
|
exports.convertSignatureShare = convertSignatureShare;
|
|
443
452
|
/**
|
|
444
|
-
*
|
|
453
|
+
* converts B share to signature share record
|
|
454
|
+
* @param share - B share
|
|
455
|
+
* @returns signature share record
|
|
456
|
+
*/
|
|
457
|
+
function convertBShare(share) {
|
|
458
|
+
return {
|
|
459
|
+
to: utils_1.SignatureShareType.BITGO,
|
|
460
|
+
from: getParticipantFromIndex(share.i),
|
|
461
|
+
share: `${share.beta}${exports.delimeter}${share.gamma}${exports.delimeter}${share.k}${exports.delimeter}${share.nu}${exports.delimeter}${share.w}${exports.delimeter}${share.y}${exports.delimeter}${share.l}${exports.delimeter}${share.m}${exports.delimeter}${share.n}`,
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
exports.convertBShare = convertBShare;
|
|
465
|
+
/**
|
|
466
|
+
* parses B share from signature share record
|
|
467
|
+
* @param share B share record
|
|
468
|
+
* @returns B Share
|
|
469
|
+
*/
|
|
470
|
+
function parseBShare(share) {
|
|
471
|
+
const shares = share.share.split(exports.delimeter);
|
|
472
|
+
validateSharesLength(shares, 9, 'B');
|
|
473
|
+
return {
|
|
474
|
+
i: getParticipantIndex(share.to),
|
|
475
|
+
beta: shares[0],
|
|
476
|
+
gamma: shares[1],
|
|
477
|
+
k: shares[2],
|
|
478
|
+
nu: shares[3],
|
|
479
|
+
w: shares[4],
|
|
480
|
+
y: shares[5],
|
|
481
|
+
l: shares[6],
|
|
482
|
+
m: shares[7],
|
|
483
|
+
n: shares[8],
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
exports.parseBShare = parseBShare;
|
|
487
|
+
/**
|
|
488
|
+
* converts O share to signature share record
|
|
489
|
+
* @param share O share
|
|
490
|
+
* @returns signature share record
|
|
491
|
+
*/
|
|
492
|
+
function convertOShare(share) {
|
|
493
|
+
return {
|
|
494
|
+
to: utils_1.SignatureShareType.BITGO,
|
|
495
|
+
from: getParticipantFromIndex(share.i),
|
|
496
|
+
share: `${share.Gamma}${exports.delimeter}${share.delta}${exports.delimeter}${share.k}${exports.delimeter}${share.omicron}${exports.delimeter}${share.y}`,
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
exports.convertOShare = convertOShare;
|
|
500
|
+
/**
|
|
501
|
+
* parses O share from signature share record
|
|
502
|
+
* @param share O share record
|
|
503
|
+
* @returns O Share
|
|
504
|
+
*/
|
|
505
|
+
function parseOShare(share) {
|
|
506
|
+
const shares = share.share.split(exports.delimeter);
|
|
507
|
+
validateSharesLength(shares, 5, 'O');
|
|
508
|
+
return {
|
|
509
|
+
i: getParticipantIndex(share.to),
|
|
510
|
+
Gamma: shares[0],
|
|
511
|
+
delta: shares[1],
|
|
512
|
+
k: shares[2],
|
|
513
|
+
omicron: shares[3],
|
|
514
|
+
y: shares[4],
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
exports.parseOShare = parseOShare;
|
|
518
|
+
/**
|
|
519
|
+
* gets participant index
|
|
445
520
|
* @param participant - participants (user, backup, or bitgo)
|
|
446
521
|
* @returns index (1, 2, 0r 3)
|
|
447
522
|
*/
|
|
448
|
-
function
|
|
523
|
+
function getParticipantIndex(participant) {
|
|
449
524
|
switch (participant) {
|
|
450
525
|
case 'user':
|
|
451
526
|
return 1;
|
|
@@ -457,13 +532,13 @@ function getParticapantIndex(participant) {
|
|
|
457
532
|
throw Error('Unkown participant');
|
|
458
533
|
}
|
|
459
534
|
}
|
|
460
|
-
exports.
|
|
535
|
+
exports.getParticipantIndex = getParticipantIndex;
|
|
461
536
|
/**
|
|
462
|
-
* gets
|
|
463
|
-
* @param index
|
|
464
|
-
* @returns
|
|
537
|
+
* gets participant name by index
|
|
538
|
+
* @param index participant index
|
|
539
|
+
* @returns participant name
|
|
465
540
|
*/
|
|
466
|
-
function
|
|
541
|
+
function getParticipantFromIndex(index) {
|
|
467
542
|
switch (index) {
|
|
468
543
|
case 1:
|
|
469
544
|
return utils_1.SignatureShareType.USER;
|
|
@@ -472,8 +547,8 @@ function getParticapantFromIndex(index) {
|
|
|
472
547
|
case 3:
|
|
473
548
|
return utils_1.SignatureShareType.BITGO;
|
|
474
549
|
default:
|
|
475
|
-
throw new Error(`Unknown
|
|
550
|
+
throw new Error(`Unknown participant index ${index}`);
|
|
476
551
|
}
|
|
477
552
|
}
|
|
478
|
-
exports.
|
|
479
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdEQUF1RDtBQUN2RCxtQ0FxQmlCO0FBQ2pCLHlDQUFnSDtBQUNoSCxvQ0FBNEM7QUFHNUMsc0NBQTZEO0FBRTdELE1BQU0sR0FBRyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7QUFFeEI7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQWtCLEVBQ2xCLGdCQUFxQyxFQUNyQyxjQUFzQjtJQUV0QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsSUFBSSxXQUErQixDQUFDO0lBQ3BDLElBQUksVUFBOEIsQ0FBQztJQUNuQyxJQUFJLFlBQWdDLENBQUM7SUFFckMsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVwRCxRQUFRLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssQ0FBQztnQkFDSixVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUNwQixNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLFlBQVksR0FBRyxNQUFNLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osV0FBVyxHQUFHLE1BQU0sQ0FBQztnQkFDckIsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUMzQztRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdEI7SUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQUMxQztJQUVELE1BQU0sV0FBVyxHQUFHLEdBQUcs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Q0FBQyxLQUFhO0lBQ25ELFFBQVEsS0FBSyxFQUFFO1FBQ2IsS0FBSyxDQUFDO1lBQ0osT0FBTywwQkFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDakMsS0FBSyxDQUFDO1lBQ0osT0FBTywwQkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFDbkMsS0FBSyxDQUFDO1lBQ0osT0FBTywwQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDbEM7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3pEO0FBQ0gsQ0FBQztBQVhELDBEQVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWNkc2EgfSBmcm9tICcuLy4uLy4uLy4uL2FjY291bnQtbGliL21wYy90c3MnO1xuaW1wb3J0IHtcbiAgRGVjcnlwdGFibGVOU2hhcmUsXG4gIENvbWJpbmVkS2V5LFxuICBTaWduaW5nTWF0ZXJpYWwsXG4gIEVuY3J5cHRlZE5TaGFyZSxcbiAgQVNoYXJlLFxuICBDcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlUlQsXG4gIENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJULFxuICBEU2hhcmUsXG4gIEdTaGFyZSxcbiAgS2V5U2hhcmUsXG4gIE5TaGFyZSxcbiAgT1NoYXJlLFxuICBTZW5kU2hhcmVUeXBlLFxuICBTaWduYXR1cmVTaGFyZSxcbiAgU2lnblNoYXJlLFxuICBXU2hhcmUsXG4gIFhTaGFyZSxcbiAgWVNoYXJlLFxuICBTZW5kU2hhcmVUb0JpdGdvUlQsXG4gIFJlY2VpdmVkU2hhcmVUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGVuY3J5cHRBbmRTaWduVGV4dCwgcmVhZFNpZ25lZE1lc3NhZ2UsIFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFNoYXJlS2V5UG9zaXRpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi8uLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgS1NoYXJlLCBNVVNoYXJlLCBTU2hhcmUgfSBmcm9tICcuLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IGdldFR4UmVxdWVzdCwgc2VuZFNpZ25hdHVyZVNoYXJlIH0gZnJvbSAnLi4vY29tbW9uJztcblxuY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG5cbi8qKlxuICogQ29tYmluZXMgTlNoYXJlcyB0byBjb21iaW5lIHRoZSBmaW5hbCBUU1Mga2V5XG4gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBVc2VyIG9yIEJhY2t1cCBrZXkgc2luY2UgaXQgcmVxdWlyZXMgdGhlIGNvbW1vbiBrZXljaGFpbiBmcm9tIEJpdEdvIGZpcnN0XG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZVxuICogQHBhcmFtIGVuY3J5cHRlZE5TaGFyZXMgLSBlbmNyeXB0ZWQgTlNoYXJlcyB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWNyeXB0XG4gKiBAcGFyYW0gY29tbW9uS2V5Y2hhaW4gLSBleHBlY3RlZCBjb21tb24ga2V5Y2hhaW4gb2YgdGhlIGNvbWJpbmVkIGtleVxuICogQHJldHVybnMge0NvbWJpbmVkS2V5fSBjb21iaW5lZCBUU1Mga2V5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb21iaW5lZEtleShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdLFxuICBjb21tb25LZXljaGFpbjogc3RyaW5nXG4pOiBQcm9taXNlPENvbWJpbmVkS2V5PiB7XG4gIGNvbnN0IG5TaGFyZXM6IE5TaGFyZVtdID0gW107XG5cbiAgbGV0IGJpdGdvTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCB1c2VyTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCBiYWNrdXBOU2hhcmU6IE5TaGFyZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGVuY3J5cHRlZE5TaGFyZSBvZiBlbmNyeXB0ZWROU2hhcmVzKSB7XG4gICAgY29uc3QgblNoYXJlID0gYXdhaXQgZGVjcnlwdE5TaGFyZShlbmNyeXB0ZWROU2hhcmUpO1xuXG4gICAgc3dpdGNoIChlbmNyeXB0ZWROU2hhcmUublNoYXJlLmopIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdXNlck5TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGJhY2t1cE5TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGJpdGdvTlNoYXJlID0gblNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBOU2hhcmUgaW5kZXgnKTtcbiAgICB9XG5cbiAgICBuU2hhcmVzLnB1c2goblNoYXJlKTtcbiAgfVxuXG4gIGlmICghYml0Z29OU2hhcmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gTiBTaGFyZScpO1xuICB9XG5cbiAgY29uc3QgY29tYmluZWRLZXkgPSBNUEMua2V5Q29tYmluZShrZXlTaGFyZS5wU2hhcmUsIG5TaGFyZXMpO1xuICBpZiAoY29tYmluZWRLZXkueFNoYXJlLnkgKyBjb21iaW5lZEtleS54U2hhcmUuY2hhaW5jb2RlICE9PSBjb21tb25LZXljaGFpbikge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gnKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25pbmdNYXRlcmlhbDogU2lnbmluZ01hdGVyaWFsID0ge1xuICAgIHBTaGFyZToga2V5U2hhcmUucFNoYXJlLFxuICAgIGJpdGdvTlNoYXJlLFxuICAgIGJhY2t1cE5TaGFyZSxcbiAgICB1c2VyTlNoYXJlLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc2lnbmluZ01hdGVyaWFsLFxuICAgIGNvbW1vbktleWNoYWluLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFNpZ25TaGFyZSB3aXRoIFVzZXIgWFNoYXJlIGFuZCBZU2hhcmUgQ29ycmVzcG9uZGluZyB0byBCaXRHb1xuICogQHBhcmFtIHtYU2hhcmV9IHhTaGFyZSBVc2VyIHNlY3JldCB4U2hhcmVcbiAqIEBwYXJhbSB7WVNoYXJlfSB5U2hhcmUgWVNoYXJlIGZyb20gQml0Z29cbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25TaGFyZT59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyU2lnblNoYXJlKHhTaGFyZTogWFNoYXJlLCB5U2hhcmU6IFlTaGFyZSk6IFByb21pc2U8U2lnblNoYXJlPiB7XG4gIGlmICh4U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFhTaGFyZSwgWFNoYXJlIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cblxuICBpZiAoeVNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCB5U2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBZU2hhcmUgcHJvdmlkZWQgZm9yIHNpZ24nKTtcbiAgfVxuICByZXR1cm4gTVBDLnNpZ25TaGFyZSh4U2hhcmUsIHlTaGFyZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgR2FtbWEgU2hhcmUgYW5kIE11U2hhcmUgd2l0aCBVc2VyIFdTaGFyZSBhbmQgQVNoYXJlIEZyb20gQml0R29cbiAqIEBwYXJhbSB7V1NoYXJlfSB3U2hhcmUgVXNlciBXU2hhcmVcbiAqIEBwYXJhbSB7QVNoYXJlfSBhU2hhcmUgQVNoYXJlIGZyb20gQml0Z29cbiAqIEByZXR1cm5zIHtQcm9taXNlPENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlKHdTaGFyZTogV1NoYXJlLCBhU2hhcmU6IEFTaGFyZSk6IFByb21pc2U8Q3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZVJUPiB7XG4gIGlmICh3U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFdTaGFyZSwgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuICBpZiAoYVNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCBhU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBBU2hhcmUsIGlzIG5vdCBmcm9tIEJpdGdvIHRvIFVzZXInKTtcbiAgfVxuXG4gIHJldHVybiBNUEMuc2lnbkNvbnZlcnQoeyB3U2hhcmUsIGFTaGFyZSB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBPbWljcm9uIFNoYXJlIGFuZCBEZWx0YSBzaGFyZSB3aXRoIHVzZXIgR1NoYXJlXG4gKiBAcGFyYW0ge0dTaGFyZX0gZ1NoYXJlIFVzZXIgR1NoYXJlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmUoZ1NoYXJlOiBHU2hhcmUpOiBQcm9taXNlPENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJUPiB7XG4gIGlmIChnU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEdTaGFyZSwgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuICByZXR1cm4gTVBDLnNpZ25Db21iaW5lKHtcbiAgICBnU2hhcmU6IGdTaGFyZSxcbiAgICBzaWduSW5kZXg6IHtcbiAgICAgIGk6IFNoYXJlS2V5UG9zaXRpb24uQklUR08sXG4gICAgICBqOiBnU2hhcmUuaSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBTaWduYXR1cmUgU2hhcmUgd2l0aCBVc2VyIE9TaGFyZSBhbmQgRFNoYXJlIEZyb20gQml0R29cbiAqIEBwYXJhbSB7T1NoYXJlfSBvU2hhcmUgVXNlciBPU2hhcmVcbiAqIEBwYXJhbSB7RFNoYXJlfSBkU2hhcmUgRFNoYXJlIGZyb20gYml0Z29cbiAqIEBwYXJhbSB7QnVmZmVyfSBtZXNzYWdlIG1lc3NhZ2UgdG8gcGVyZm9ybSBzaWduXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxjcmVhdGVVc2VyU2lnblNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclNpZ25hdHVyZVNoYXJlKFxuICBvU2hhcmU6IE9TaGFyZSxcbiAgZFNoYXJlOiBEU2hhcmUsXG4gIG1lc3NhZ2U6IEJ1ZmZlclxuKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZT4ge1xuICBpZiAob1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBPU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cblxuICBpZiAoZFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCBkU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBEU2hhcmUsIGRvZXNuJ3Qgc2VlbSB0byBiZSBmcm9tIEJpdEdvYCk7XG4gIH1cbiAgcmV0dXJuIE1QQy5zaWduKG1lc3NhZ2UsIG9TaGFyZSwgZFNoYXJlKTtcbn1cblxuLyoqXG4gKiBTZW5kcyBTaGFyZSBUbyBCaXRnb1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1NpZ25hdHVyZVNoYXJlUmVjb3JkfSBzaWduYXR1cmVTaGFyZSAtIGEgU2lnbmF0dXJlIFNoYXJlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD59IC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTaGFyZVRvQml0Z28oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHR4UmVxdWVzdElkOiBzdHJpbmcsXG4gIHNoYXJlVHlwZTogU2VuZFNoYXJlVHlwZSxcbiAgc2hhcmU6IFNTaGFyZSB8IE1VU2hhcmUgfCBLU2hhcmUsXG4gIGRTaGFyZT86IERTaGFyZVxuKTogUHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+IHtcbiAgaWYgKHNoYXJlVHlwZSAhPT0gU2VuZFNoYXJlVHlwZS5TU2hhcmUgJiYgc2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaGFyZSwgaXMgbm90IGZyb20gVXNlciB0byBCaXRnbycpO1xuICB9XG4gIGxldCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuXG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLktTaGFyZTpcbiAgICAgIGNvbnN0IGtTaGFyZSA9IHNoYXJlIGFzIEtTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydEtTaGFyZShrU2hhcmUpO1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJMYXRlc3RTaGFyZShiaXRnbywgd2FsbGV0SWQsIHR4UmVxdWVzdElkLCBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLk1VU2hhcmU6XG4gICAgICBjb25zdCBtdVNoYXJlID0gc2hhcmUgYXMgTVVTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydE11U2hhcmUobXVTaGFyZSk7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgc2lnbmF0dXJlU2hhcmUpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBhd2FpdCBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIFJlY2VpdmVkU2hhcmVUeXBlLkRTaGFyZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuU1NoYXJlOlxuICAgICAgaWYgKCFkU2hhcmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEU2hhcmUgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoZFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08gfHwgZFNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRFNoYXJlIHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzU2hhcmUgPSBzaGFyZSBhcyBTU2hhcmU7XG4gICAgICBzaWduYXR1cmVTaGFyZSA9IGNvbnZlcnRTRFNoYXJlKHsgc1NoYXJlLCBkU2hhcmUgfSk7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgc2lnbmF0dXJlU2hhcmUpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBzU2hhcmU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNoYXJlIGdpdmVuIHRvIHNlbmQnKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZUZyb21CaXRnbztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsYXRlc3QgdXNlcidzIHNoYXJlIGZyb20gYml0Z28gbmVlZGVkIHRvIGNvbnRpbnVlIHNpZ25pbmcgZmxvd1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1JlY2VpdmVkU2hhcmVUeXBlfSBzaGFyZVR5cGUgLSB0aGUgZXhjcGVjdGVkIHNoYXJlIHR5cGVcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD59IC0gc2hhcmUgZnJvbSBiaXRnbyB0byB1c2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBzaGFyZVR5cGU6IFJlY2VpdmVkU2hhcmVUeXBlXG4pOiBQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD4ge1xuICBsZXQgcmVzcG9uc2VGcm9tQml0Z286IFNlbmRTaGFyZVRvQml0Z29SVDtcbiAgY29uc3QgdHhSZXF1ZXN0ID0gYXdhaXQgZ2V0VHhSZXF1ZXN0KGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQpO1xuICBjb25zdCB1c2VyU2hhcmVzID0gdHhSZXF1ZXN0LnNpZ25hdHVyZVNoYXJlcztcbiAgaWYgKCF1c2VyU2hhcmVzIHx8ICF1c2VyU2hhcmVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlciBzaGFyZSBpcyBub3QgcHJlc2VudCcpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVSZWNvcmQgPSB1c2VyU2hhcmVzW3VzZXJTaGFyZXMubGVuZ3RoIC0gMV07XG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlQVNoYXJlKHNoYXJlUmVjb3JkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuRFNoYXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZURTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLlNpZ25hdHVyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VTaWduYXR1cmVTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNoYXJlIHJlY2VpdmVkJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2VGcm9tQml0Z287XG59XG5cbi8qKlxuICogUHJlcGFyZXMgYSBOU2hhcmUgdG8gYmUgZXhjaGFuZ2VkIHdpdGggb3RoZXIga2V5IGhvbGRlcnMuXG4gKiBPdXRwdXQgaXMgaW4gYSBmb3JtYXQgdGhhdCBpcyB1c2FibGUgd2l0aGluIEJpdEdvJ3MgZWNvc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmUgb2YgdGhlIHBhcnR5IHByZXBhcmluZyBleGNoYW5nZSBtYXRlcmlhbHNcbiAqIEBwYXJhbSByZWNpcGllbnRJbmRleCAtIGluZGV4IG9mIHRoZSByZWNpcGllbnQgKDEsIDIsIG9yIDMpXG4gKiBAcGFyYW0gcmVjaXBpZW50R3BnUHVibGljQXJtb3IgLSByZWNpcGllbnQncyBwdWJsaWMgZ3BnIGtleSBpbiBhcm1vciBmb3JtYXRcbiAqIEBwYXJhbSBzZW5kZXJHcGdQcml2YXRlQXJtb3IgLSBzZW5kZXIncyBwcml2YXRlIGdwZyBrZXkgaW4gYXJtb3IgZm9ybWF0XG4gKiBAcmV0dXJucyBlbmNyeXB0ZWQgTiBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdE5TaGFyZShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICByZWNpcGllbnRJbmRleDogbnVtYmVyLFxuICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcjogc3RyaW5nLFxuICBzZW5kZXJHcGdQcml2YXRlQXJtb3I6IHN0cmluZ1xuKTogUHJvbWlzZTxFbmNyeXB0ZWROU2hhcmU+IHtcbiAgY29uc3QgblNoYXJlID0ga2V5U2hhcmUublNoYXJlc1tyZWNpcGllbnRJbmRleF07XG4gIGlmICghblNoYXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY2lwaWVudCcpO1xuICB9XG5cbiAgY29uc3QgcHVibGljU2hhcmUgPSBrZXlTaGFyZS5wU2hhcmUueSArIG5TaGFyZS5jaGFpbmNvZGUgKyBuU2hhcmUubjtcbiAgY29uc3QgcHJpdmF0ZVNoYXJlID0gblNoYXJlLnU7XG5cbiAgY29uc3QgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlID0gYXdhaXQgZW5jcnlwdEFuZFNpZ25UZXh0KHByaXZhdGVTaGFyZSwgcmVjaXBpZW50R3BnUHVibGljQXJtb3IsIHNlbmRlckdwZ1ByaXZhdGVBcm1vcik7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBuU2hhcmUuaSxcbiAgICBqOiBuU2hhcmUuaixcbiAgICBwdWJsaWNTaGFyZSxcbiAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmUsXG4gIH07XG59XG5cbi8qKlxuICogRGVjcnlwdHMgZW5jcnlwdGVkIG4gc2hhcmVcbiAqIEBwYXJhbSBlbmNyeXB0ZWROU2hhcmUgLSBkZWNyeXB0YWJsZSBuIHNoYXJlIHdpdGggcmVjaXBpZW50IHByaXZhdGUgZ3BnIGtleSBhcm1vciBhbmQgc2VuZGVyIHB1YmxpYyBncGcga2V5XG4gKiBAcmV0dXJucyBOIHNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0TlNoYXJlKGVuY3J5cHRlZE5TaGFyZTogRGVjcnlwdGFibGVOU2hhcmUpOiBQcm9taXNlPE5TaGFyZT4ge1xuICBjb25zdCBwcml2YXRlU2hhcmUgPSBhd2FpdCByZWFkU2lnbmVkTWVzc2FnZShcbiAgICBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmVuY3J5cHRlZFByaXZhdGVTaGFyZSxcbiAgICBlbmNyeXB0ZWROU2hhcmUuc2VuZGVyUHVibGljQXJtb3IsXG4gICAgZW5jcnlwdGVkTlNoYXJlLnJlY2lwaWVudFByaXZhdGVBcm1vclxuICApO1xuXG4gIGNvbnN0IG5TaGFyZTogTlNoYXJlID0ge1xuICAgIGk6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuaSxcbiAgICBqOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmosXG4gICAgeTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5wdWJsaWNTaGFyZS5zbGljZSgwLCA2NiksXG4gICAgdTogcHJpdmF0ZVNoYXJlLFxuICAgIG46IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUucHVibGljU2hhcmUuc2xpY2UoMTMwKSxcbiAgICBjaGFpbmNvZGU6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUucHVibGljU2hhcmUuc2xpY2UoNjYsIDEzMCksXG4gIH07XG5cbiAgcmV0dXJuIG5TaGFyZTtcbn1cblxuLyoqXG4gKiBHZXRzIHB1YmxpYyBrZXkgZnJvbSBjb21tb24ga2V5IGNoYWluXG4gKiBAcGFyYW0gY29tbW9uS2V5Q2hhaW4gLSBjb21tb24ga2V5IGNoYWluIG9mIGVjZHNhIHRzc1xuICogQHJldHVybnMgcHVibGljIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljS2V5KGNvbW1vbktleUNoYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY29tbW9uS2V5Q2hhaW4uc2xpY2UoMCwgNjYpO1xufVxuXG4vKipcbiAqIHZhbGlkYXRlcyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gc2hhcmVMZW5ndGggLSBzaGFyZSByZWNvcmQgZXhwZWN0ZWQgbGVuZ3RoXG4gKiBAcGFyYW0gaXNFeGFjdExlbmd0aCAtIGlmIHRoaXMgZmFsc2UgdGhlbiBzaGFyZSBsZW5ndGggY2FuIGJlIGdyZWF0ZXIuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBzaGFyZUxlbmd0aDogbnVtYmVyLCBpc0V4YWN0TGVuZ3RoID0gdHJ1ZSk6IHZvaWQge1xuICBjb25zdCBlcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IG5ldyBFcnJvcihtZXNzYWdlKTtcblxuICBpZiAoc2hhcmUuc2hhcmUubGVuZ3RoIDwgc2hhcmVMZW5ndGgpIHtcbiAgICB0aHJvdyBlcnJvcihgRXhjZXB0ZWQgc2hhcmUgbGVuZ3RoIHRvIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCAke3NoYXJlTGVuZ3RofSBidXQgZ290ICR7c2hhcmUuc2hhcmUubGVuZ3RofS5gKTtcbiAgfVxuXG4gIGlmIChpc0V4YWN0TGVuZ3RoICYmIHNoYXJlLnNoYXJlLmxlbmd0aCAhPT0gc2hhcmVMZW5ndGgpIHtcbiAgICB0aHJvdyBlcnJvcihgRXhjZXB0ZWQgc2hhcmUgbGVuZ3RoIHRvIGJlICR7c2hhcmVMZW5ndGh9IGJ1dCBnb3QgJHtzaGFyZS5zaGFyZS5sZW5ndGh9LmApO1xuICB9XG5cbiAgaWYgKHNoYXJlLmZyb20gPT09IHNoYXJlLnRvKSB7XG4gICAgdGhyb3cgZXJyb3IoYEtleSBzaGFyZSBzZW5kZXIgYW5kIHJlY2VpdmVyIGNhbm5vdCBiZSB0aGUgc2FtZS5gKTtcbiAgfVxufVxuXG4vKipcbiAqIHBhcnNlcyBLIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgSyBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogS1NoYXJlIHtcbiAgdmFsaWRhdGVTaGFyZShzaGFyZSwgMTUzNiwgZmFsc2UpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljYXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljYXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBrOiBzaGFyZS5zaGFyZS5zdWJzdHJpbmcoMCwgMTUzNiksXG4gICAgbjogc2hhcmUuc2hhcmUuc3Vic3RyaW5nKDE1MzYpLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgSyBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBLIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0S1NoYXJlKHNoYXJlOiBLU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2FwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2FwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBzaGFyZS5rICsgc2hhcmUubixcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgQSBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEEgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IEFTaGFyZSB7XG4gIHZhbGlkYXRlU2hhcmUoc2hhcmUsIDQ2MDgsIGZhbHNlKTtcbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNhcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNhcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGs6IHNoYXJlLnNoYXJlLnNsaWNlKDAsIDE1MzYpLFxuICAgIGFscGhhOiBzaGFyZS5zaGFyZS5zbGljZSgxNTM2LCAzMDcyKSxcbiAgICBtdTogc2hhcmUuc2hhcmUuc2xpY2UoMzA3MiwgNDYwOCksXG4gICAgbjogc2hhcmUuc2hhcmUuc2xpY2UoNDYwOCksXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBBIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEEgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBU2hhcmUoc2hhcmU6IEFTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljYXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljYXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IHNoYXJlLmshICsgc2hhcmUuYWxwaGEhICsgc2hhcmUubXUhICsgc2hhcmUubiEsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIE11IHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgTXUgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXVTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBNVVNoYXJlIHtcbiAgdmFsaWRhdGVTaGFyZShzaGFyZSwgMzA3Mik7XG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljYXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljYXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBhbHBoYTogc2hhcmUuc2hhcmUuc2xpY2UoMCwgMTUzNiksXG4gICAgbXU6IHNoYXJlLnNoYXJlLnNsaWNlKDE1MzYsIDMwNzIpLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgTXUgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gTXUgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRNdVNoYXJlKHNoYXJlOiBNVVNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNhcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNhcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogc2hhcmUuYWxwaGEgKyBzaGFyZS5tdSxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgRCBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEQgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRFNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IERTaGFyZSB7XG4gIHZhbGlkYXRlU2hhcmUoc2hhcmUsIDEzMCk7XG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljYXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljYXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBkZWx0YTogc2hhcmUuc2hhcmUuc2xpY2UoMCwgNjQpLFxuICAgIEdhbW1hOiBzaGFyZS5zaGFyZS5zbGljZSg2NCwgMTMwKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IEQgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gRCBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERTaGFyZShzaGFyZTogRFNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNhcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNhcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogc2hhcmUuZGVsdGEgKyBzaGFyZS5HYW1tYSxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgUyBhbmQgRCBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIFMgYW5kIEQgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU0RTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiB7IHNTaGFyZTogU2lnbmF0dXJlU2hhcmU7IGRTaGFyZTogRFNoYXJlIH0ge1xuICB2YWxpZGF0ZVNoYXJlKHNoYXJlLCAzMjQpO1xuICByZXR1cm4ge1xuICAgIHNTaGFyZTogcGFyc2VTaWduYXR1cmVTaGFyZSh7IHRvOiBzaGFyZS50bywgZnJvbTogc2hhcmUuZnJvbSwgc2hhcmU6IHNoYXJlLnNoYXJlLnNsaWNlKDAsIDE5NCkgfSksXG4gICAgZFNoYXJlOiBwYXJzZURTaGFyZSh7IHRvOiBzaGFyZS50bywgZnJvbTogc2hhcmUuZnJvbSwgc2hhcmU6IHNoYXJlLnNoYXJlLnNsaWNlKDE5NCkgfSksXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBTIGFuZCBEIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIFMgYW5kIEQgc2hhcmUgaW4gYSBvYmplY3RcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTRFNoYXJlKHNoYXJlOiB7IHNTaGFyZTogU2lnbmF0dXJlU2hhcmU7IGRTaGFyZTogRFNoYXJlIH0pOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2FwYW50RnJvbUluZGV4KHNoYXJlLmRTaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNhcGFudEZyb21JbmRleChzaGFyZS5kU2hhcmUuaiksXG4gICAgc2hhcmU6IHNoYXJlLnNTaGFyZS5yICsgc2hhcmUuc1NoYXJlLnMgKyBzaGFyZS5zU2hhcmUueSArIHNoYXJlLmRTaGFyZS5kZWx0YSArIHNoYXJlLmRTaGFyZS5HYW1tYSxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgc2lnbmF0dXJlIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgU2lnbmF0dXJlIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IFNpZ25hdHVyZVNoYXJlIHtcbiAgdmFsaWRhdGVTaGFyZShzaGFyZSwgMTk0KTtcbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNhcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICByOiBzaGFyZS5zaGFyZS5zdWJzdHJpbmcoMCwgNjQpLFxuICAgIHM6IHNoYXJlLnNoYXJlLnN1YnN0cmluZyg2NCwgMTI4KSxcbiAgICB5OiBzaGFyZS5zaGFyZS5zdWJzdHJpbmcoMTI4LCAxOTQpLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgc2lnbmF0dXJlIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEsgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTaWduYXR1cmVTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmUsIHNlbmRlckluZGV4OiBudW1iZXIpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2FwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2FwYW50RnJvbUluZGV4KHNlbmRlckluZGV4KSxcbiAgICBzaGFyZTogc2hhcmUuciArIHNoYXJlLnMgKyBzaGFyZS55LFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgcGFydGljYXBhbnQgaW5kZXhcbiAqIEBwYXJhbSBwYXJ0aWNpcGFudCAtIHBhcnRpY2lwYW50cyAodXNlciwgYmFja3VwLCBvciBiaXRnbylcbiAqIEByZXR1cm5zIGluZGV4ICgxLCAyLCAwciAzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFydGljYXBhbnRJbmRleChwYXJ0aWNpcGFudDogJ3VzZXInIHwgJ2JhY2t1cCcgfCAnYml0Z28nKTogbnVtYmVyIHtcbiAgc3dpdGNoIChwYXJ0aWNpcGFudCkge1xuICAgIGNhc2UgJ3VzZXInOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSAnYmFja3VwJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2JpdGdvJzpcbiAgICAgIHJldHVybiAzO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcignVW5rb3duIHBhcnRpY2lwYW50Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBnZXRzIHBhcnRpY2FwYW50IG5hbWUgYnkgaW5kZXhcbiAqIEBwYXJhbSBpbmRleCBwYXJ0aWNhcGFudCBpbmRleFxuICogQHJldHVybnMgcGFydGljYXBhbnQgbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFydGljYXBhbnRGcm9tSW5kZXgoaW5kZXg6IG51bWJlcik6IFNpZ25hdHVyZVNoYXJlVHlwZSB7XG4gIHN3aXRjaCAoaW5kZXgpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVI7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVA7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBhcnRpY2FwYW50IGluZGV4ICR7aW5kZXh9YCk7XG4gIH1cbn1cbiJdfQ==
|
|
553
|
+
exports.getParticipantFromIndex = getParticipantFromIndex;
|
|
554
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdEQUF1RDtBQUN2RCxtQ0F1QmlCO0FBQ2pCLHlDQUFnSDtBQUNoSCxvQ0FBNEM7QUFHNUMsc0NBQTZEO0FBRTdELE1BQU0sR0FBRyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7QUFFeEI7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQWtCLEVBQ2xCLGdCQUFxQyxFQUNyQyxjQUFzQjtJQUV0QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsSUFBSSxXQUErQixDQUFDO0lBQ3BDLElBQUksVUFBOEIsQ0FBQztJQUNuQyxJQUFJLFlBQWdDLENBQUM7SUFFckMsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVwRCxRQUFRLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssQ0FBQztnQkFDSixVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUNwQixNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLFlBQVksR0FBRyxNQUFNLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osV0FBVyxHQUFHLE1BQU0sQ0FBQztnQkFDckIsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUMzQztRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdEI7SUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQUMxQztJQUVELE1BQU0sV0FBVyxHQUFHLEdBQUcs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WUFDWCxPQUFPLENBQUMsQ0FBQztRQUNYLEtBQUssT0FBTztZQUNWLE9BQU8sQ0FBQyxDQUFDO1FBQ1g7WUFDRSxNQUFNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBQ3JDO0FBQ0gsQ0FBQztBQVhELGtEQVdDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEtBQWE7SUFDbkQsUUFBUSxLQUFLLEVBQUU7UUFDYixLQUFLLENBQUM7WUFDSixPQUFPLDBCQUFrQixDQUFDLElBQUksQ0FBQztRQUNqQyxLQUFLLENBQUM7WUFDSixPQUFPLDBCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUNuQyxLQUFLLENBQUM7WUFDSixPQUFPLDBCQUFrQixDQUFDLEtBQUssQ0FBQztRQUNsQztZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDekQ7QUFDSCxDQUFDO0FBWEQsMERBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFY2RzYSB9IGZyb20gJy4vLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5pbXBvcnQge1xuICBEZWNyeXB0YWJsZU5TaGFyZSxcbiAgQ29tYmluZWRLZXksXG4gIFNpZ25pbmdNYXRlcmlhbCxcbiAgRW5jcnlwdGVkTlNoYXJlLFxuICBBU2hhcmUsXG4gIENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVCxcbiAgQ3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlUlQsXG4gIERTaGFyZSxcbiAgR1NoYXJlLFxuICBLZXlTaGFyZSxcbiAgTlNoYXJlLFxuICBPU2hhcmUsXG4gIFNlbmRTaGFyZVR5cGUsXG4gIFNpZ25hdHVyZVNoYXJlLFxuICBTaWduU2hhcmUsXG4gIFdTaGFyZSxcbiAgWFNoYXJlLFxuICBZU2hhcmUsXG4gIFNlbmRTaGFyZVRvQml0Z29SVCxcbiAgUmVjZWl2ZWRTaGFyZVR5cGUsXG4gIEJTaGFyZSxcbiAgU2lnbmF0dXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGVuY3J5cHRBbmRTaWduVGV4dCwgcmVhZFNpZ25lZE1lc3NhZ2UsIFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFNoYXJlS2V5UG9zaXRpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi8uLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgS1NoYXJlLCBNVVNoYXJlLCBTU2hhcmUgfSBmcm9tICcuLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IGdldFR4UmVxdWVzdCwgc2VuZFNpZ25hdHVyZVNoYXJlIH0gZnJvbSAnLi4vY29tbW9uJztcblxuY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG5cbi8qKlxuICogQ29tYmluZXMgTlNoYXJlcyB0byBjb21iaW5lIHRoZSBmaW5hbCBUU1Mga2V5XG4gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBVc2VyIG9yIEJhY2t1cCBrZXkgc2luY2UgaXQgcmVxdWlyZXMgdGhlIGNvbW1vbiBrZXljaGFpbiBmcm9tIEJpdEdvIGZpcnN0XG4gKlxuICogQHBhcmFtIGtleVNoYXJlIC0gVFNTIGtleSBzaGFyZVxuICogQHBhcmFtIGVuY3J5cHRlZE5TaGFyZXMgLSBlbmNyeXB0ZWQgTlNoYXJlcyB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWNyeXB0XG4gKiBAcGFyYW0gY29tbW9uS2V5Y2hhaW4gLSBleHBlY3RlZCBjb21tb24ga2V5Y2hhaW4gb2YgdGhlIGNvbWJpbmVkIGtleVxuICogQHJldHVybnMge0NvbWJpbmVkS2V5fSBjb21iaW5lZCBUU1Mga2V5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb21iaW5lZEtleShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdLFxuICBjb21tb25LZXljaGFpbjogc3RyaW5nXG4pOiBQcm9taXNlPENvbWJpbmVkS2V5PiB7XG4gIGNvbnN0IG5TaGFyZXM6IE5TaGFyZVtdID0gW107XG5cbiAgbGV0IGJpdGdvTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCB1c2VyTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG4gIGxldCBiYWNrdXBOU2hhcmU6IE5TaGFyZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGVuY3J5cHRlZE5TaGFyZSBvZiBlbmNyeXB0ZWROU2hhcmVzKSB7XG4gICAgY29uc3QgblNoYXJlID0gYXdhaXQgZGVjcnlwdE5TaGFyZShlbmNyeXB0ZWROU2hhcmUpO1xuXG4gICAgc3dpdGNoIChlbmNyeXB0ZWROU2hhcmUublNoYXJlLmopIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdXNlck5TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGJhY2t1cE5TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGJpdGdvTlNoYXJlID0gblNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBOU2hhcmUgaW5kZXgnKTtcbiAgICB9XG5cbiAgICBuU2hhcmVzLnB1c2goblNoYXJlKTtcbiAgfVxuXG4gIGlmICghYml0Z29OU2hhcmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gTiBTaGFyZScpO1xuICB9XG5cbiAgY29uc3QgY29tYmluZWRLZXkgPSBNUEMua2V5Q29tYmluZShrZXlTaGFyZS5wU2hhcmUsIG5TaGFyZXMpO1xuICBpZiAoY29tYmluZWRLZXkueFNoYXJlLnkgKyBjb21iaW5lZEtleS54U2hhcmUuY2hhaW5jb2RlICE9PSBjb21tb25LZXljaGFpbikge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gnKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25pbmdNYXRlcmlhbDogU2lnbmluZ01hdGVyaWFsID0ge1xuICAgIHBTaGFyZToga2V5U2hhcmUucFNoYXJlLFxuICAgIGJpdGdvTlNoYXJlLFxuICAgIGJhY2t1cE5TaGFyZSxcbiAgICB1c2VyTlNoYXJlLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc2lnbmluZ01hdGVyaWFsLFxuICAgIGNvbW1vbktleWNoYWluLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFNpZ25TaGFyZSB3aXRoIFVzZXIgWFNoYXJlIGFuZCBZU2hhcmUgQ29ycmVzcG9uZGluZyB0byBCaXRHb1xuICogQHBhcmFtIHtYU2hhcmV9IHhTaGFyZSBVc2VyIHNlY3JldCB4U2hhcmVcbiAqIEBwYXJhbSB7WVNoYXJlfSB5U2hhcmUgWVNoYXJlIGZyb20gQml0Z29cbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25TaGFyZT59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyU2lnblNoYXJlKHhTaGFyZTogWFNoYXJlLCB5U2hhcmU6IFlTaGFyZSk6IFByb21pc2U8U2lnblNoYXJlPiB7XG4gIGlmICh4U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFhTaGFyZSwgWFNoYXJlIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cblxuICBpZiAoeVNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCB5U2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBZU2hhcmUgcHJvdmlkZWQgZm9yIHNpZ24nKTtcbiAgfVxuICByZXR1cm4gTVBDLnNpZ25TaGFyZSh4U2hhcmUsIHlTaGFyZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgR2FtbWEgU2hhcmUgYW5kIE11U2hhcmUgd2l0aCBVc2VyIFdTaGFyZSBhbmQgQVNoYXJlIEZyb20gQml0R29cbiAqIEBwYXJhbSB7V1NoYXJlfSB3U2hhcmUgVXNlciBXU2hhcmVcbiAqIEBwYXJhbSB7QVNoYXJlfSBhU2hhcmUgQVNoYXJlIGZyb20gQml0Z29cbiAqIEByZXR1cm5zIHtQcm9taXNlPENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlKHdTaGFyZTogV1NoYXJlLCBhU2hhcmU6IEFTaGFyZSk6IFByb21pc2U8Q3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZVJUPiB7XG4gIGlmICh3U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFdTaGFyZSwgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuICBpZiAoYVNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCBhU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBBU2hhcmUsIGlzIG5vdCBmcm9tIEJpdGdvIHRvIFVzZXInKTtcbiAgfVxuXG4gIHJldHVybiBNUEMuc2lnbkNvbnZlcnQoeyB3U2hhcmUsIGFTaGFyZSB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBPbWljcm9uIFNoYXJlIGFuZCBEZWx0YSBzaGFyZSB3aXRoIHVzZXIgR1NoYXJlXG4gKiBAcGFyYW0ge0dTaGFyZX0gZ1NoYXJlIFVzZXIgR1NoYXJlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmUoZ1NoYXJlOiBHU2hhcmUpOiBQcm9taXNlPENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJUPiB7XG4gIGlmIChnU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEdTaGFyZSwgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuICByZXR1cm4gTVBDLnNpZ25Db21iaW5lKHtcbiAgICBnU2hhcmU6IGdTaGFyZSxcbiAgICBzaWduSW5kZXg6IHtcbiAgICAgIGk6IFNoYXJlS2V5UG9zaXRpb24uQklUR08sXG4gICAgICBqOiBnU2hhcmUuaSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBTaWduYXR1cmUgU2hhcmUgd2l0aCBVc2VyIE9TaGFyZSBhbmQgRFNoYXJlIEZyb20gQml0R29cbiAqIEBwYXJhbSB7T1NoYXJlfSBvU2hhcmUgVXNlciBPU2hhcmVcbiAqIEBwYXJhbSB7RFNoYXJlfSBkU2hhcmUgRFNoYXJlIGZyb20gYml0Z29cbiAqIEBwYXJhbSB7QnVmZmVyfSBtZXNzYWdlIG1lc3NhZ2UgdG8gcGVyZm9ybSBzaWduXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxjcmVhdGVVc2VyU2lnblNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclNpZ25hdHVyZVNoYXJlKFxuICBvU2hhcmU6IE9TaGFyZSxcbiAgZFNoYXJlOiBEU2hhcmUsXG4gIG1lc3NhZ2U6IEJ1ZmZlclxuKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZT4ge1xuICBpZiAob1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBPU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cblxuICBpZiAoZFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCBkU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBEU2hhcmUsIGRvZXNuJ3Qgc2VlbSB0byBiZSBmcm9tIEJpdEdvYCk7XG4gIH1cbiAgcmV0dXJuIE1QQy5zaWduKG1lc3NhZ2UsIG9TaGFyZSwgZFNoYXJlKTtcbn1cblxuLyoqXG4gKiBTZW5kcyBTaGFyZSBUbyBCaXRnb1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1NpZ25hdHVyZVNoYXJlUmVjb3JkfSBzaWduYXR1cmVTaGFyZSAtIGEgU2lnbmF0dXJlIFNoYXJlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD59IC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTaGFyZVRvQml0Z28oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHR4UmVxdWVzdElkOiBzdHJpbmcsXG4gIHNoYXJlVHlwZTogU2VuZFNoYXJlVHlwZSxcbiAgc2hhcmU6IFNTaGFyZSB8IE1VU2hhcmUgfCBLU2hhcmUsXG4gIGRTaGFyZT86IERTaGFyZVxuKTogUHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+IHtcbiAgaWYgKHNoYXJlVHlwZSAhPT0gU2VuZFNoYXJlVHlwZS5TU2hhcmUgJiYgc2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaGFyZSwgaXMgbm90IGZyb20gVXNlciB0byBCaXRnbycpO1xuICB9XG4gIGxldCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuXG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLktTaGFyZTpcbiAgICAgIGNvbnN0IGtTaGFyZSA9IHNoYXJlIGFzIEtTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydEtTaGFyZShrU2hhcmUpO1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJMYXRlc3RTaGFyZShiaXRnbywgd2FsbGV0SWQsIHR4UmVxdWVzdElkLCBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLk1VU2hhcmU6XG4gICAgICBjb25zdCBtdVNoYXJlID0gc2hhcmUgYXMgTVVTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydE11U2hhcmUobXVTaGFyZSk7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgc2lnbmF0dXJlU2hhcmUpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBhd2FpdCBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIFJlY2VpdmVkU2hhcmVUeXBlLkRTaGFyZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuU1NoYXJlOlxuICAgICAgaWYgKCFkU2hhcmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEU2hhcmUgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoZFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08gfHwgZFNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRFNoYXJlIHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzU2hhcmUgPSBzaGFyZSBhcyBTU2hhcmU7XG4gICAgICBzaWduYXR1cmVTaGFyZSA9IGNvbnZlcnRTRFNoYXJlKHsgc1NoYXJlLCBkU2hhcmUgfSk7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgc2lnbmF0dXJlU2hhcmUpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBzU2hhcmU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNoYXJlIGdpdmVuIHRvIHNlbmQnKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZUZyb21CaXRnbztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsYXRlc3QgdXNlcidzIHNoYXJlIGZyb20gYml0Z28gbmVlZGVkIHRvIGNvbnRpbnVlIHNpZ25pbmcgZmxvd1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1JlY2VpdmVkU2hhcmVUeXBlfSBzaGFyZVR5cGUgLSB0aGUgZXhjcGVjdGVkIHNoYXJlIHR5cGVcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD59IC0gc2hhcmUgZnJvbSBiaXRnbyB0byB1c2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBzaGFyZVR5cGU6IFJlY2VpdmVkU2hhcmVUeXBlXG4pOiBQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD4ge1xuICBsZXQgcmVzcG9uc2VGcm9tQml0Z286IFNlbmRTaGFyZVRvQml0Z29SVDtcbiAgY29uc3QgdHhSZXF1ZXN0ID0gYXdhaXQgZ2V0VHhSZXF1ZXN0KGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQpO1xuICBjb25zdCB1c2VyU2hhcmVzID0gdHhSZXF1ZXN0LnNpZ25hdHVyZVNoYXJlcztcbiAgaWYgKCF1c2VyU2hhcmVzIHx8ICF1c2VyU2hhcmVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlciBzaGFyZSBpcyBub3QgcHJlc2VudCcpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVSZWNvcmQgPSB1c2VyU2hhcmVzW3VzZXJTaGFyZXMubGVuZ3RoIC0gMV07XG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlQVNoYXJlKHNoYXJlUmVjb3JkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuRFNoYXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZURTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLlNpZ25hdHVyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VTaWduYXR1cmVTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNoYXJlIHJlY2VpdmVkJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2VGcm9tQml0Z287XG59XG5cbi8qKlxuICogUHJlcGFyZXMgYSBOU2hhcmUgdG8gYmUgZXhjaGFuZ2VkIHdpdGggb3RoZXIga2V5IGhvbGRlcnMuXG4gKiBPdXRwdXQgaXMgaW4gYSBmb3JtYXQgdGhhdCBpcyB1c2FibGUgd2l0aGluIEJpdEdvJ3MgZWNvc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmUgb2YgdGhlIHBhcnR5IHByZXBhcmluZyBleGNoYW5nZSBtYXRlcmlhbHNcbiAqIEBwYXJhbSByZWNpcGllbnRJbmRleCAtIGluZGV4IG9mIHRoZSByZWNpcGllbnQgKDEsIDIsIG9yIDMpXG4gKiBAcGFyYW0gcmVjaXBpZW50R3BnUHVibGljQXJtb3IgLSByZWNpcGllbnQncyBwdWJsaWMgZ3BnIGtleSBpbiBhcm1vciBmb3JtYXRcbiAqIEBwYXJhbSBzZW5kZXJHcGdQcml2YXRlQXJtb3IgLSBzZW5kZXIncyBwcml2YXRlIGdwZyBrZXkgaW4gYXJtb3IgZm9ybWF0XG4gKiBAcmV0dXJucyBlbmNyeXB0ZWQgTiBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdE5TaGFyZShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICByZWNpcGllbnRJbmRleDogbnVtYmVyLFxuICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcjogc3RyaW5nLFxuICBzZW5kZXJHcGdQcml2YXRlQXJtb3I6IHN0cmluZ1xuKTogUHJvbWlzZTxFbmNyeXB0ZWROU2hhcmU+IHtcbiAgY29uc3QgblNoYXJlID0ga2V5U2hhcmUublNoYXJlc1tyZWNpcGllbnRJbmRleF07XG4gIGlmICghblNoYXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY2lwaWVudCcpO1xuICB9XG5cbiAgY29uc3QgcHVibGljU2hhcmUgPSBrZXlTaGFyZS5wU2hhcmUueSArIG5TaGFyZS5jaGFpbmNvZGUgKyBuU2hhcmUubjtcbiAgY29uc3QgcHJpdmF0ZVNoYXJlID0gblNoYXJlLnU7XG5cbiAgY29uc3QgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlID0gYXdhaXQgZW5jcnlwdEFuZFNpZ25UZXh0KHByaXZhdGVTaGFyZSwgcmVjaXBpZW50R3BnUHVibGljQXJtb3IsIHNlbmRlckdwZ1ByaXZhdGVBcm1vcik7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBuU2hhcmUuaSxcbiAgICBqOiBuU2hhcmUuaixcbiAgICBwdWJsaWNTaGFyZSxcbiAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmUsXG4gIH07XG59XG5cbi8qKlxuICogRGVjcnlwdHMgZW5jcnlwdGVkIG4gc2hhcmVcbiAqIEBwYXJhbSBlbmNyeXB0ZWROU2hhcmUgLSBkZWNyeXB0YWJsZSBuIHNoYXJlIHdpdGggcmVjaXBpZW50IHByaXZhdGUgZ3BnIGtleSBhcm1vciBhbmQgc2VuZGVyIHB1YmxpYyBncGcga2V5XG4gKiBAcmV0dXJucyBOIHNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0TlNoYXJlKGVuY3J5cHRlZE5TaGFyZTogRGVjcnlwdGFibGVOU2hhcmUpOiBQcm9taXNlPE5TaGFyZT4ge1xuICBjb25zdCBwcml2YXRlU2hhcmUgPSBhd2FpdCByZWFkU2lnbmVkTWVzc2FnZShcbiAgICBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmVuY3J5cHRlZFByaXZhdGVTaGFyZSxcbiAgICBlbmNyeXB0ZWROU2hhcmUuc2VuZGVyUHVibGljQXJtb3IsXG4gICAgZW5jcnlwdGVkTlNoYXJlLnJlY2lwaWVudFByaXZhdGVBcm1vclxuICApO1xuXG4gIGNvbnN0IG5TaGFyZTogTlNoYXJlID0ge1xuICAgIGk6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuaSxcbiAgICBqOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmosXG4gICAgeTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5wdWJsaWNTaGFyZS5zbGljZSgwLCA2NiksXG4gICAgdTogcHJpdmF0ZVNoYXJlLFxuICAgIG46IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUucHVibGljU2hhcmUuc2xpY2UoMTMwKSxcbiAgICBjaGFpbmNvZGU6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUucHVibGljU2hhcmUuc2xpY2UoNjYsIDEzMCksXG4gIH07XG5cbiAgcmV0dXJuIG5TaGFyZTtcbn1cblxuLyoqXG4gKiBHZXRzIHB1YmxpYyBrZXkgZnJvbSBjb21tb24ga2V5IGNoYWluXG4gKiBAcGFyYW0gY29tbW9uS2V5Q2hhaW4gLSBjb21tb24ga2V5IGNoYWluIG9mIGVjZHNhIHRzc1xuICogQHJldHVybnMgcHVibGljIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljS2V5KGNvbW1vbktleUNoYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY29tbW9uS2V5Q2hhaW4uc2xpY2UoMCwgNjYpO1xufVxuXG5leHBvcnQgY29uc3QgZGVsaW1ldGVyID0gJzonO1xuZXhwb3J0IGNvbnN0IHNlY29uZGFyeURlbGltZXRlciA9ICctJztcblxuZnVuY3Rpb24gdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzOiBzdHJpbmdbXSwgZXhwZWN0ZWRMZW5ndGg6IG51bWJlciwgc2hhcmVOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKHNoYXJlcy5sZW5ndGggPCBleHBlY3RlZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke3NoYXJlTmFtZX0gc2hhcmVgKTtcbiAgfVxufVxuXG4vKipcbiAqIHBhcnNlcyBLIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgSyBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogS1NoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcblxuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDIsICdLJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGs6IHNoYXJlc1swXSxcbiAgICBuOiBzaGFyZXNbMV0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBLIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEsgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRLU2hhcmUoc2hhcmU6IEtTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEEgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBBIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBBU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDQsICdBJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGs6IHNoYXJlc1swXSxcbiAgICBhbHBoYTogc2hhcmVzWzFdLFxuICAgIG11OiBzaGFyZXNbMl0sXG4gICAgbjogc2hhcmVzWzNdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgQSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBBIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QVNoYXJlKHNoYXJlOiBBU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUuYWxwaGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tdX0ke2RlbGltZXRlcn0ke3NoYXJlLm59YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgTXUgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBNdSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IE1VU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDIsICdNdScpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBhbHBoYTogc2hhcmVzWzBdLFxuICAgIG11OiBzaGFyZXNbMV0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBNdSBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBNdSBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE11U2hhcmUoc2hhcmU6IE1VU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5hbHBoYX0ke2RlbGltZXRlcn0ke3NoYXJlLm11fWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEQgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBEIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBEU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDIsICdEJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGRlbHRhOiBzaGFyZXNbMF0sXG4gICAgR2FtbWE6IHNoYXJlc1sxXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IEQgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gRCBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERTaGFyZShzaGFyZTogRFNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5HYW1tYX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBTIGFuZCBEIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgUyBhbmQgRCBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTRFNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IHsgc1NoYXJlOiBTaWduYXR1cmVTaGFyZTsgZFNoYXJlOiBEU2hhcmUgfSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KHNlY29uZGFyeURlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMiwgJ1NEJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBzU2hhcmU6IHBhcnNlU2lnbmF0dXJlU2hhcmUoeyB0bzogc2hhcmUudG8sIGZyb206IHNoYXJlLmZyb20sIHNoYXJlOiBzaGFyZXNbMF0gfSksXG4gICAgZFNoYXJlOiBwYXJzZURTaGFyZSh7IHRvOiBzaGFyZS50bywgZnJvbTogc2hhcmUuZnJvbSwgc2hhcmU6IHNoYXJlc1sxXSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IFMgYW5kIEQgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gUyBhbmQgRCBzaGFyZSBpbiBhIG9iamVjdFxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNEU2hhcmUoc2hhcmU6IHsgc1NoYXJlOiBTaWduYXR1cmVTaGFyZTsgZFNoYXJlOiBEU2hhcmUgfSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuZFNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmRTaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuc1NoYXJlLnJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zU2hhcmUuc30ke2RlbGltZXRlcn0ke3NoYXJlLnNTaGFyZS55fSR7c2Vjb25kYXJ5RGVsaW1ldGVyfSR7c2hhcmUuZFNoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZFNoYXJlLkdhbW1hfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIHNpZ25hdHVyZSBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIFNpZ25hdHVyZSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBTaWduYXR1cmVTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMywgJ1NpZ25hdHVyZScpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgcjogc2hhcmVzWzBdLFxuICAgIHM6IHNoYXJlc1sxXSxcbiAgICB5OiBzaGFyZXNbMl0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmV0cyBjb21iaW5lZCBzaWduYXR1cmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNpZ25hdHVyZSAtIGNvbWJpbmVkIHNpZ25hdHVyZSBzaGFyZVxuICogQHBhcmFtIHVzZXJJbmRleCAtIHVzZXIgaW5kZXgsIGVpdGhlciAxICh1c2VyKSBvciAyIChiYWNrdXApXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0Q29tYmluZWRTaWduYXR1cmUoc2lnbmF0dXJlOiBTaWduYXR1cmUsIHVzZXJJbmRleDogbnVtYmVyKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgodXNlckluZGV4KSxcbiAgICBzaGFyZTogYCR7c2lnbmF0dXJlLnJ9JHtkZWxpbWV0ZXJ9JHtzaWduYXR1cmUuc30ke2RlbGltZXRlcn0ke3NpZ25hdHVyZS55fWAsXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBzaWduYXR1cmUgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gU2lnbmF0dXJlIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U2lnbmF0dXJlU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlLCBzZW5kZXJJbmRleDogbnVtYmVyKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzZW5kZXJJbmRleCksXG4gICAgc2hhcmU6IGAke3NoYXJlLnJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5zfSR7ZGVsaW1ldGVyfSR7c2hhcmUueX1gLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIEIgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gQiBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEJTaGFyZShzaGFyZTogQlNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgc2hhcmU6IGAke3NoYXJlLmJldGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYX0ke2RlbGltZXRlcn0ke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5udX0ke2RlbGltZXRlcn0ke3NoYXJlLnd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fSR7ZGVsaW1ldGVyfSR7c2hhcmUubH0ke2RlbGltZXRlcn0ke3NoYXJlLm19JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIEIgc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgQiBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEIgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQlNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IEJTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgOSwgJ0InKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGJldGE6IHNoYXJlc1swXSxcbiAgICBnYW1tYTogc2hhcmVzWzFdLFxuICAgIGs6IHNoYXJlc1syXSxcbiAgICBudTogc2hhcmVzWzNdLFxuICAgIHc6IHNoYXJlc1s0XSxcbiAgICB5OiBzaGFyZXNbNV0sXG4gICAgbDogc2hhcmVzWzZdLFxuICAgIG06IHNoYXJlc1s3XSxcbiAgICBuOiBzaGFyZXNbOF0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydHMgTyBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgTyBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE9TaGFyZShzaGFyZTogT1NoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgc2hhcmU6IGAke3NoYXJlLkdhbW1hfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUub21pY3Jvbn0ke2RlbGltZXRlcn0ke3NoYXJlLnl9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgTyBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSBPIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgTyBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogT1NoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCA1LCAnTycpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgR2FtbWE6IHNoYXJlc1swXSxcbiAgICBkZWx0YTogc2hhcmVzWzFdLFxuICAgIGs6IHNoYXJlc1syXSxcbiAgICBvbWljcm9uOiBzaGFyZXNbM10sXG4gICAgeTogc2hhcmVzWzRdLFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgcGFydGljaXBhbnQgaW5kZXhcbiAqIEBwYXJhbSBwYXJ0aWNpcGFudCAtIHBhcnRpY2lwYW50cyAodXNlciwgYmFja3VwLCBvciBiaXRnbylcbiAqIEByZXR1cm5zIGluZGV4ICgxLCAyLCAwciAzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRJbmRleChwYXJ0aWNpcGFudDogJ3VzZXInIHwgJ2JhY2t1cCcgfCAnYml0Z28nKTogbnVtYmVyIHtcbiAgc3dpdGNoIChwYXJ0aWNpcGFudCkge1xuICAgIGNhc2UgJ3VzZXInOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSAnYmFja3VwJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2JpdGdvJzpcbiAgICAgIHJldHVybiAzO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcignVW5rb3duIHBhcnRpY2lwYW50Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBnZXRzIHBhcnRpY2lwYW50IG5hbWUgYnkgaW5kZXhcbiAqIEBwYXJhbSBpbmRleCBwYXJ0aWNpcGFudCBpbmRleFxuICogQHJldHVybnMgcGFydGljaXBhbnQgbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoaW5kZXg6IG51bWJlcik6IFNpZ25hdHVyZVNoYXJlVHlwZSB7XG4gIHN3aXRjaCAoaW5kZXgpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVI7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVA7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBhcnRpY2lwYW50IGluZGV4ICR7aW5kZXh9YCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -14,6 +14,7 @@ export declare type CreateUserGammaAndMuShareRT = ECDSA.SignConvertRT;
|
|
|
14
14
|
export declare type CreateUserOmicronAndDeltaShareRT = ECDSA.SignCombineRT;
|
|
15
15
|
export declare type SignatureShare = ECDSA.SignRT;
|
|
16
16
|
export declare type Signature = ECDSA.Signature;
|
|
17
|
+
export declare type BShare = ECDSA.BShare;
|
|
17
18
|
export declare enum SendShareType {
|
|
18
19
|
KShare = "KShare",
|
|
19
20
|
MUShare = "MUShare",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;AAC1C,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,2BAA2B,GAAG,KAAK,CAAC,aAAa,CAAC;AAC9D,oBAAY,gCAAgC,GAAG,KAAK,CAAC,aAAa,CAAC;AACnE,oBAAY,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1C,oBAAY,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;AAC1C,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,2BAA2B,GAAG,KAAK,CAAC,aAAa,CAAC;AAC9D,oBAAY,gCAAgC,GAAG,KAAK,CAAC,aAAa,CAAC;AACnE,oBAAY,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1C,oBAAY,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACxC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAElC,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED,oBAAY,mBAAmB,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,oBAAY,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IAEpB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAGF,oBAAY,iBAAiB,GAAG;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAGF,oBAAY,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAGF,oBAAY,eAAe,GAAG;IAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACrB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;CAC3B,CAAC;AAEF,oBAAY,uBAAuB,GAAG;IACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzB,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,oBAAY,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC"}
|
|
@@ -13,4 +13,4 @@ var ReceivedShareType;
|
|
|
13
13
|
ReceivedShareType["DShare"] = "DShare";
|
|
14
14
|
ReceivedShareType["Signature"] = "Signature";
|
|
15
15
|
})(ReceivedShareType = exports.ReceivedShareType || (exports.ReceivedShareType = {}));
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1CQSxJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDdkIsa0NBQWlCLENBQUE7SUFDakIsb0NBQW1CLENBQUE7SUFDbkIsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBSXhCO0FBRUQsSUFBWSxpQkFJWDtBQUpELFdBQVksaUJBQWlCO0lBQzNCLHNDQUFpQixDQUFBO0lBQ2pCLHNDQUFpQixDQUFBO0lBQ2pCLDRDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFKVyxpQkFBaUIsR0FBakIseUJBQWlCLEtBQWpCLHlCQUFpQixRQUk1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVDRFNBIH0gZnJvbSAnLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcblxuZXhwb3J0IHR5cGUgTlNoYXJlID0gRUNEU0EuTlNoYXJlO1xuZXhwb3J0IHR5cGUgS2V5U2hhcmUgPSBFQ0RTQS5LZXlTaGFyZTtcbmV4cG9ydCB0eXBlIFhTaGFyZSA9IEVDRFNBLlhTaGFyZTtcbmV4cG9ydCB0eXBlIFlTaGFyZSA9IEVDRFNBLllTaGFyZTtcbmV4cG9ydCB0eXBlIFNpZ25TaGFyZSA9IEVDRFNBLlNpZ25TaGFyZVJUO1xuZXhwb3J0IHR5cGUgS1NoYXJlID0gRUNEU0EuS1NoYXJlO1xuZXhwb3J0IHR5cGUgV1NoYXJlID0gRUNEU0EuV1NoYXJlO1xuZXhwb3J0IHR5cGUgQVNoYXJlID0gRUNEU0EuQVNoYXJlO1xuZXhwb3J0IHR5cGUgR1NoYXJlID0gRUNEU0EuR1NoYXJlO1xuZXhwb3J0IHR5cGUgT1NoYXJlID0gRUNEU0EuT1NoYXJlO1xuZXhwb3J0IHR5cGUgRFNoYXJlID0gRUNEU0EuRFNoYXJlO1xuZXhwb3J0IHR5cGUgQ3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZVJUID0gRUNEU0EuU2lnbkNvbnZlcnRSVDtcbmV4cG9ydCB0eXBlIENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJUID0gRUNEU0EuU2lnbkNvbWJpbmVSVDtcbmV4cG9ydCB0eXBlIFNpZ25hdHVyZVNoYXJlID0gRUNEU0EuU2lnblJUO1xuZXhwb3J0IHR5cGUgU2lnbmF0dXJlID0gRUNEU0EuU2lnbmF0dXJlO1xuZXhwb3J0IHR5cGUgQlNoYXJlID0gRUNEU0EuQlNoYXJlO1xuXG5leHBvcnQgZW51bSBTZW5kU2hhcmVUeXBlIHtcbiAgS1NoYXJlID0gJ0tTaGFyZScsXG4gIE1VU2hhcmUgPSAnTVVTaGFyZScsXG4gIFNTaGFyZSA9ICdTU2hhcmUnLFxufVxuXG5leHBvcnQgZW51bSBSZWNlaXZlZFNoYXJlVHlwZSB7XG4gIEFTaGFyZSA9ICdBU2hhcmUnLFxuICBEU2hhcmUgPSAnRFNoYXJlJyxcbiAgU2lnbmF0dXJlID0gJ1NpZ25hdHVyZScsXG59XG5cbmV4cG9ydCB0eXBlIEdldFNoYXJlRnJvbUJpdGdvUlQgPSBEU2hhcmUgfCBBU2hhcmU7XG4vLyBOU2hhcmUgdGhhdCBoYXMgYmVlbiBlbmNyeXB0ZWQgYW5kIHNpZ25lZCB2aWEgR1BHXG5leHBvcnQgdHlwZSBFbmNyeXB0ZWROU2hhcmUgPSB7XG4gIGk6IG51bWJlcjtcbiAgajogbnVtYmVyO1xuICBwdWJsaWNTaGFyZTogc3RyaW5nO1xuICAvLyBzaWduZWQgYW5kIGVuY3J5cHRlZCBncGcgYXJtb3JcbiAgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlOiBzdHJpbmc7XG59O1xuXG4vLyBOU2hhcmUgd2l0aCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGVjcnlwdCBhbmQgdmVyaWZ5IGEgR1BHIG1lc2FzZ2VcbmV4cG9ydCB0eXBlIERlY3J5cHRhYmxlTlNoYXJlID0ge1xuICBuU2hhcmU6IEVuY3J5cHRlZE5TaGFyZTtcbiAgcmVjaXBpZW50UHJpdmF0ZUFybW9yOiBzdHJpbmc7XG4gIHNlbmRlclB1YmxpY0FybW9yOiBzdHJpbmc7XG59O1xuXG4vLyBGaW5hbCBUU1MgXCJLZXlwYWlyXCJcbmV4cG9ydCB0eXBlIENvbWJpbmVkS2V5ID0ge1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xuICBzaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbDtcbn07XG5cbi8vIFByaXZhdGUgcG9ydGlvbiBvZiBhIFRTUyBrZXksIHRoaXMgbXVzdCBiZSBoYW5kbGVkIGxpa2UgYW55IG90aGVyIHByaXZhdGUga2V5XG5leHBvcnQgdHlwZSBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gIHBTaGFyZTogRUNEU0EuUFNoYXJlO1xuICBiaXRnb05TaGFyZTogRUNEU0EuTlNoYXJlO1xuICBiYWNrdXBOU2hhcmU/OiBFQ0RTQS5OU2hhcmU7XG4gIHVzZXJOU2hhcmU/OiBFQ0RTQS5OU2hhcmU7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVDb21iaW5lZEtleVBhcmFtcyA9IHtcbiAga2V5U2hhcmU6IEVDRFNBLktleVNoYXJlO1xuICBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdO1xuICBjb21tb25LZXljaGFpbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2VuZFNoYXJlVG9CaXRnb1JUID0gQVNoYXJlIHwgRFNoYXJlIHwgU2lnbmF0dXJlO1xuIl19
|
|
@@ -1287,8 +1287,8 @@
|
|
|
1287
1287
|
"affectsGlobalScope": false
|
|
1288
1288
|
},
|
|
1289
1289
|
"../src/bitgo/tss/ecdsa/types.ts": {
|
|
1290
|
-
"version": "
|
|
1291
|
-
"signature": "
|
|
1290
|
+
"version": "8e8ccee1cac2cb48082d04802699e222114bb8ead36798c8fe7036880aaf7f2c",
|
|
1291
|
+
"signature": "beee491d15c66af12c53da27019f796f05e0bf80fe7072f7919aaa90998e28da",
|
|
1292
1292
|
"affectsGlobalScope": false
|
|
1293
1293
|
},
|
|
1294
1294
|
"../src/bitgo/tss/types.ts": {
|
|
@@ -1302,8 +1302,8 @@
|
|
|
1302
1302
|
"affectsGlobalScope": false
|
|
1303
1303
|
},
|
|
1304
1304
|
"../src/bitgo/tss/ecdsa/ecdsa.ts": {
|
|
1305
|
-
"version": "
|
|
1306
|
-
"signature": "
|
|
1305
|
+
"version": "30b3666d80f970b7a909f2f77f9608d9598f6fefd3ac8fe7e02cf3e0e0001547",
|
|
1306
|
+
"signature": "f8d47dd48faf3f45d849d3b5344f4291eb2e4b38ed6284c873a38b53c11f70ae",
|
|
1307
1307
|
"affectsGlobalScope": false
|
|
1308
1308
|
},
|
|
1309
1309
|
"../src/bitgo/tss/ecdsa/index.ts": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo/sdk-core",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.15",
|
|
4
4
|
"description": "core library functions for BitGoJS",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@types/lodash": "^4.14.151"
|
|
68
68
|
},
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "d70db340b1c3873227af8adc08cabf90d6a54781"
|
|
70
70
|
}
|