@bitgo/sdk-lib-mpc 9.7.0 → 9.8.1

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 CHANGED
@@ -3,6 +3,20 @@
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
+ ## [9.8.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@9.8.0...@bitgo/sdk-lib-mpc@9.8.1) (2024-06-11)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **sdk-lib-mpc:** improve mpcv2 error handling ([00a57ad](https://github.com/BitGo/BitGoJS/commit/00a57add1f505075d58acb13e8e10465b26b699b))
11
+ - **sdk-lib-mpc:** replace @noble/secp256k1 with @noble/curves ([c89064d](https://github.com/BitGo/BitGoJS/commit/c89064de0ddbe097b5ccb6caba33680da75980d9))
12
+
13
+ # [9.8.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@9.7.0...@bitgo/sdk-lib-mpc@9.8.0) (2024-05-22)
14
+
15
+ ### Features
16
+
17
+ - **abstract-eth:** wrw recovery for dkls wallet ([bf374e8](https://github.com/BitGo/BitGoJS/commit/bf374e89522c9688619d9b20ed66d3873b55d75e))
18
+ - **sdk-core:** support smaller mpcv2 keycard ([63512d4](https://github.com/BitGo/BitGoJS/commit/63512d4279d012c0a151720cffb195b198d25e21))
19
+
6
20
  # [9.7.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@9.6.0...@bitgo/sdk-lib-mpc@9.7.0) (2024-05-08)
7
21
 
8
22
  ### Features
@@ -1 +1 @@
1
- {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../src/curves/secp256k1.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAOpC,qBAAa,cAAe,YAAW,SAAS;IAC9C,YAAY,IAAI,MAAM;IAItB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIvC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAKvC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMtC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAK3C,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAKhC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAMtE,KAAK,IAAI,MAAM;IAIf,WAAW,SAAkB;IAG7B,UAAU,SAAiB;CAC5B"}
1
+ {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../src/curves/secp256k1.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAQpC,qBAAa,cAAe,YAAW,SAAS;IAC9C,YAAY,IAAI,MAAM;IAItB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIvC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAKvC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMtC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAK3C,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAKhC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAMtE,KAAK,IAAI,MAAM;IAIf,WAAW,SAAkB;IAG7B,UAAU,SAAiB;CAC5B"}
@@ -1,32 +1,10 @@
1
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  Object.defineProperty(exports, "__esModule", { value: true });
26
3
  exports.Secp256k1Curve = void 0;
27
4
  const util_1 = require("../util");
28
- const secp = __importStar(require("@noble/secp256k1"));
29
- const order = secp.CURVE.n;
5
+ const secp256k1_1 = require("@noble/curves/secp256k1");
6
+ const modular_1 = require("@noble/curves/abstract/modular");
7
+ const order = secp256k1_1.secp256k1.CURVE.n;
30
8
  const privateKeySize = 32;
31
9
  const publicKeySize = 33;
32
10
  class Secp256k1Curve {
@@ -36,46 +14,48 @@ class Secp256k1Curve {
36
14
  this.pointBytes = publicKeySize;
37
15
  }
38
16
  scalarRandom() {
39
- return (0, util_1.bigIntFromU8ABE)(secp.utils.randomPrivateKey());
17
+ return (0, util_1.bigIntFromU8ABE)(secp256k1_1.secp256k1.utils.randomPrivateKey());
40
18
  }
41
19
  scalarAdd(x, y) {
42
- return (0, util_1.bigIntFromU8ABE)(secp.utils.privateAdd(x, (0, util_1.bigIntToBufferBE)(y, privateKeySize)));
20
+ return (0, modular_1.mod)(x + y, order);
43
21
  }
44
22
  scalarSub(x, y) {
45
- const negatedY = secp.utils.privateNegate(y);
46
- return (0, util_1.bigIntFromU8ABE)(secp.utils.privateAdd(x, negatedY));
23
+ const negatedY = order - y;
24
+ return (0, modular_1.mod)(x + negatedY, order);
47
25
  }
48
26
  scalarMult(x, y) {
49
- return secp.utils.mod(x * y, order);
27
+ return (0, modular_1.mod)(x * y, order);
50
28
  }
51
29
  scalarReduce(s) {
52
- return secp.utils.mod(s, order);
30
+ return (0, modular_1.mod)(s, order);
53
31
  }
54
32
  scalarNegate(s) {
55
- return (0, util_1.bigIntFromU8ABE)(secp.utils.privateNegate(s));
33
+ return order - s;
56
34
  }
57
35
  scalarInvert(s) {
58
- return secp.utils.invert(s, order);
36
+ return (0, modular_1.invert)(s, order);
59
37
  }
60
38
  pointAdd(a, b) {
61
- const pointA = secp.Point.fromHex((0, util_1.bigIntToBufferBE)(a, privateKeySize));
62
- const pointB = secp.Point.fromHex((0, util_1.bigIntToBufferBE)(b, privateKeySize));
39
+ const pointA = secp256k1_1.secp256k1.ProjectivePoint.fromHex((0, util_1.bigIntToBufferBE)(a, privateKeySize));
40
+ const pointB = secp256k1_1.secp256k1.ProjectivePoint.fromHex((0, util_1.bigIntToBufferBE)(b, privateKeySize));
63
41
  return (0, util_1.bigIntFromU8ABE)(pointA.add(pointB).toRawBytes(true));
64
42
  }
65
43
  pointMultiply(p, s) {
66
- const pointA = secp.Point.fromHex((0, util_1.bigIntToBufferBE)(p, privateKeySize));
44
+ const pointA = secp256k1_1.secp256k1.ProjectivePoint.fromHex((0, util_1.bigIntToBufferBE)(p, privateKeySize));
67
45
  return (0, util_1.bigIntFromU8ABE)(pointA.multiply(s).toRawBytes(true));
68
46
  }
69
47
  basePointMult(n) {
70
48
  const point = (0, util_1.bigIntToBufferBE)(n, privateKeySize);
71
- return (0, util_1.bigIntFromU8ABE)(secp.getPublicKey(point, true));
49
+ return (0, util_1.bigIntFromU8ABE)(secp256k1_1.secp256k1.getPublicKey(point, true));
72
50
  }
73
51
  verify(message, signature, publicKey) {
74
- return Buffer.from(secp.recoverPublicKey(message, signature.subarray(1), signature[0], true)).equals((0, util_1.bigIntToBufferBE)(publicKey, publicKeySize));
52
+ const sig = secp256k1_1.secp256k1.Signature.fromCompact(Buffer.from(signature.subarray(1))).addRecoveryBit(signature[0]);
53
+ const pubFromSig = sig.recoverPublicKey(message).toRawBytes(true);
54
+ return Buffer.from(pubFromSig).equals((0, util_1.bigIntToBufferBE)(publicKey, publicKeySize));
75
55
  }
76
56
  order() {
77
57
  return order;
78
58
  }
79
59
  }
80
60
  exports.Secp256k1Curve = Secp256k1Curve;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcDI1NmsxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1cnZlcy9zZWNwMjU2azEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQ0FBNEQ7QUFFNUQsdURBQXlDO0FBRXpDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFFekIsTUFBYSxjQUFjO0lBQTNCO1FBd0RFLGdCQUFXLEdBQUcsY0FBYyxDQUFDO1FBRTdCLGdDQUFnQztRQUNoQyxlQUFVLEdBQUcsYUFBYSxDQUFDO0lBQzdCLENBQUM7SUEzREMsWUFBWTtRQUNWLE9BQU8sSUFBQSxzQkFBZSxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDNUIsT0FBTyxJQUFBLHNCQUFlLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUEsdUJBQWdCLEVBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsU0FBUyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBQSxzQkFBZSxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxJQUFBLHNCQUFlLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFBLHVCQUFnQixFQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUEsdUJBQWdCLEVBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFBLHNCQUFlLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUEsdUJBQWdCLEVBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFBLHNCQUFlLEVBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQVM7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBQSx1QkFBZ0IsRUFBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFBLHNCQUFlLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQWUsRUFBRSxTQUFpQixFQUFFLFNBQWlCO1FBQzFELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUNsRyxJQUFBLHVCQUFnQixFQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FDM0MsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBTUY7QUE1REQsd0NBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmlnSW50RnJvbVU4QUJFLCBiaWdJbnRUb0J1ZmZlckJFIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBCYXNlQ3VydmUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCAqIGFzIHNlY3AgZnJvbSAnQG5vYmxlL3NlY3AyNTZrMSc7XG5cbmNvbnN0IG9yZGVyID0gc2VjcC5DVVJWRS5uO1xuY29uc3QgcHJpdmF0ZUtleVNpemUgPSAzMjtcbmNvbnN0IHB1YmxpY0tleVNpemUgPSAzMztcblxuZXhwb3J0IGNsYXNzIFNlY3AyNTZrMUN1cnZlIGltcGxlbWVudHMgQmFzZUN1cnZlIHtcbiAgc2NhbGFyUmFuZG9tKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShzZWNwLnV0aWxzLnJhbmRvbVByaXZhdGVLZXkoKSk7XG4gIH1cblxuICBzY2FsYXJBZGQoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tVThBQkUoc2VjcC51dGlscy5wcml2YXRlQWRkKHgsIGJpZ0ludFRvQnVmZmVyQkUoeSwgcHJpdmF0ZUtleVNpemUpKSk7XG4gIH1cblxuICBzY2FsYXJTdWIoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IG5lZ2F0ZWRZID0gc2VjcC51dGlscy5wcml2YXRlTmVnYXRlKHkpO1xuICAgIHJldHVybiBiaWdJbnRGcm9tVThBQkUoc2VjcC51dGlscy5wcml2YXRlQWRkKHgsIG5lZ2F0ZWRZKSk7XG4gIH1cblxuICBzY2FsYXJNdWx0KHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gc2VjcC51dGlscy5tb2QoeCAqIHksIG9yZGVyKTtcbiAgfVxuXG4gIHNjYWxhclJlZHVjZShzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBzZWNwLnV0aWxzLm1vZChzLCBvcmRlcik7XG4gIH1cblxuICBzY2FsYXJOZWdhdGUoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHNlY3AudXRpbHMucHJpdmF0ZU5lZ2F0ZShzKSk7XG4gIH1cblxuICBzY2FsYXJJbnZlcnQoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gc2VjcC51dGlscy5pbnZlcnQocywgb3JkZXIpO1xuICB9XG5cbiAgcG9pbnRBZGQoYTogYmlnaW50LCBiOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IHBvaW50QSA9IHNlY3AuUG9pbnQuZnJvbUhleChiaWdJbnRUb0J1ZmZlckJFKGEsIHByaXZhdGVLZXlTaXplKSk7XG4gICAgY29uc3QgcG9pbnRCID0gc2VjcC5Qb2ludC5mcm9tSGV4KGJpZ0ludFRvQnVmZmVyQkUoYiwgcHJpdmF0ZUtleVNpemUpKTtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHBvaW50QS5hZGQocG9pbnRCKS50b1Jhd0J5dGVzKHRydWUpKTtcbiAgfVxuXG4gIHBvaW50TXVsdGlwbHkocDogYmlnaW50LCBzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IHBvaW50QSA9IHNlY3AuUG9pbnQuZnJvbUhleChiaWdJbnRUb0J1ZmZlckJFKHAsIHByaXZhdGVLZXlTaXplKSk7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShwb2ludEEubXVsdGlwbHkocykudG9SYXdCeXRlcyh0cnVlKSk7XG4gIH1cblxuICBiYXNlUG9pbnRNdWx0KG46IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgY29uc3QgcG9pbnQgPSBiaWdJbnRUb0J1ZmZlckJFKG4sIHByaXZhdGVLZXlTaXplKTtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHNlY3AuZ2V0UHVibGljS2V5KHBvaW50LCB0cnVlKSk7XG4gIH1cblxuICB2ZXJpZnkobWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlciwgcHVibGljS2V5OiBiaWdpbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc2VjcC5yZWNvdmVyUHVibGljS2V5KG1lc3NhZ2UsIHNpZ25hdHVyZS5zdWJhcnJheSgxKSwgc2lnbmF0dXJlWzBdLCB0cnVlKSkuZXF1YWxzKFxuICAgICAgYmlnSW50VG9CdWZmZXJCRShwdWJsaWNLZXksIHB1YmxpY0tleVNpemUpXG4gICAgKTtcbiAgfVxuXG4gIG9yZGVyKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIG9yZGVyO1xuICB9XG5cbiAgc2NhbGFyQnl0ZXMgPSBwcml2YXRlS2V5U2l6ZTtcblxuICAvLyBBbHdheXMgdXNlIGNvbXByZXNzZWQgcG9pbnRzLlxuICBwb2ludEJ5dGVzID0gcHVibGljS2V5U2l6ZTtcbn1cbiJdfQ==
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcDI1NmsxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1cnZlcy9zZWNwMjU2azEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0NBQTREO0FBRTVELHVEQUE0RDtBQUM1RCw0REFBNkQ7QUFFN0QsTUFBTSxLQUFLLEdBQUcscUJBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFFekIsTUFBYSxjQUFjO0lBQTNCO1FBd0RFLGdCQUFXLEdBQUcsY0FBYyxDQUFDO1FBRTdCLGdDQUFnQztRQUNoQyxlQUFVLEdBQUcsYUFBYSxDQUFDO0lBQzdCLENBQUM7SUEzREMsWUFBWTtRQUNWLE9BQU8sSUFBQSxzQkFBZSxFQUFDLHFCQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsU0FBUyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzVCLE9BQU8sSUFBQSxhQUFHLEVBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsU0FBUyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzVCLE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDM0IsT0FBTyxJQUFBLGFBQUcsRUFBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDN0IsT0FBTyxJQUFBLGFBQUcsRUFBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLElBQUEsYUFBRyxFQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLElBQUEsZ0JBQU0sRUFBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUMzQixNQUFNLE1BQU0sR0FBRyxxQkFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBQSx1QkFBZ0IsRUFBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLE1BQU0sR0FBRyxxQkFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBQSx1QkFBZ0IsRUFBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNqRixPQUFPLElBQUEsc0JBQWUsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxhQUFhLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDaEMsTUFBTSxNQUFNLEdBQUcscUJBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUEsdUJBQWdCLEVBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDakYsT0FBTyxJQUFBLHNCQUFlLEVBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQVM7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBQSx1QkFBZ0IsRUFBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFBLHNCQUFlLEVBQUMscUJBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFlLEVBQUUsU0FBaUIsRUFBRSxTQUFpQjtRQUMxRCxNQUFNLEdBQUcsR0FBRyxxQkFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEcsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUEsdUJBQWdCLEVBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FNRjtBQTVERCx3Q0E0REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiaWdJbnRGcm9tVThBQkUsIGJpZ0ludFRvQnVmZmVyQkUgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEJhc2VDdXJ2ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgc2VjcDI1NmsxIGFzIHNlY3AgfSBmcm9tICdAbm9ibGUvY3VydmVzL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBtb2QsIGludmVydCB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvYWJzdHJhY3QvbW9kdWxhcic7XG5cbmNvbnN0IG9yZGVyID0gc2VjcC5DVVJWRS5uO1xuY29uc3QgcHJpdmF0ZUtleVNpemUgPSAzMjtcbmNvbnN0IHB1YmxpY0tleVNpemUgPSAzMztcblxuZXhwb3J0IGNsYXNzIFNlY3AyNTZrMUN1cnZlIGltcGxlbWVudHMgQmFzZUN1cnZlIHtcbiAgc2NhbGFyUmFuZG9tKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShzZWNwLnV0aWxzLnJhbmRvbVByaXZhdGVLZXkoKSk7XG4gIH1cblxuICBzY2FsYXJBZGQoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBtb2QoeCArIHksIG9yZGVyKTtcbiAgfVxuXG4gIHNjYWxhclN1Yih4OiBiaWdpbnQsIHk6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgY29uc3QgbmVnYXRlZFkgPSBvcmRlciAtIHk7XG4gICAgcmV0dXJuIG1vZCh4ICsgbmVnYXRlZFksIG9yZGVyKTtcbiAgfVxuXG4gIHNjYWxhck11bHQoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBtb2QoeCAqIHksIG9yZGVyKTtcbiAgfVxuXG4gIHNjYWxhclJlZHVjZShzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBtb2Qocywgb3JkZXIpO1xuICB9XG5cbiAgc2NhbGFyTmVnYXRlKHM6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIG9yZGVyIC0gcztcbiAgfVxuXG4gIHNjYWxhckludmVydChzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBpbnZlcnQocywgb3JkZXIpO1xuICB9XG5cbiAgcG9pbnRBZGQoYTogYmlnaW50LCBiOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IHBvaW50QSA9IHNlY3AuUHJvamVjdGl2ZVBvaW50LmZyb21IZXgoYmlnSW50VG9CdWZmZXJCRShhLCBwcml2YXRlS2V5U2l6ZSkpO1xuICAgIGNvbnN0IHBvaW50QiA9IHNlY3AuUHJvamVjdGl2ZVBvaW50LmZyb21IZXgoYmlnSW50VG9CdWZmZXJCRShiLCBwcml2YXRlS2V5U2l6ZSkpO1xuICAgIHJldHVybiBiaWdJbnRGcm9tVThBQkUocG9pbnRBLmFkZChwb2ludEIpLnRvUmF3Qnl0ZXModHJ1ZSkpO1xuICB9XG5cbiAgcG9pbnRNdWx0aXBseShwOiBiaWdpbnQsIHM6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgY29uc3QgcG9pbnRBID0gc2VjcC5Qcm9qZWN0aXZlUG9pbnQuZnJvbUhleChiaWdJbnRUb0J1ZmZlckJFKHAsIHByaXZhdGVLZXlTaXplKSk7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShwb2ludEEubXVsdGlwbHkocykudG9SYXdCeXRlcyh0cnVlKSk7XG4gIH1cblxuICBiYXNlUG9pbnRNdWx0KG46IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgY29uc3QgcG9pbnQgPSBiaWdJbnRUb0J1ZmZlckJFKG4sIHByaXZhdGVLZXlTaXplKTtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHNlY3AuZ2V0UHVibGljS2V5KHBvaW50LCB0cnVlKSk7XG4gIH1cblxuICB2ZXJpZnkobWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlciwgcHVibGljS2V5OiBiaWdpbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzaWcgPSBzZWNwLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChCdWZmZXIuZnJvbShzaWduYXR1cmUuc3ViYXJyYXkoMSkpKS5hZGRSZWNvdmVyeUJpdChzaWduYXR1cmVbMF0pO1xuICAgIGNvbnN0IHB1YkZyb21TaWcgPSBzaWcucmVjb3ZlclB1YmxpY0tleShtZXNzYWdlKS50b1Jhd0J5dGVzKHRydWUpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShwdWJGcm9tU2lnKS5lcXVhbHMoYmlnSW50VG9CdWZmZXJCRShwdWJsaWNLZXksIHB1YmxpY0tleVNpemUpKTtcbiAgfVxuXG4gIG9yZGVyKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIG9yZGVyO1xuICB9XG5cbiAgc2NhbGFyQnl0ZXMgPSBwcml2YXRlS2V5U2l6ZTtcblxuICAvLyBBbHdheXMgdXNlIGNvbXByZXNzZWQgcG9pbnRzLlxuICBwb2ludEJ5dGVzID0gcHVibGljS2V5U2l6ZTtcbn1cbiJdfQ==
@@ -19,6 +19,7 @@ export declare class Dkg {
19
19
  private _deserializeState;
20
20
  initDkg(): Promise<DeserializedBroadcastMessage>;
21
21
  getKeyShare(): Buffer;
22
+ getReducedKeyShare(): Buffer;
22
23
  handleIncomingMessages(messagesForIthRound: DeserializedMessages): DeserializedMessages;
23
24
  }
24
25
  //# sourceMappingURL=dkg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dkg.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/dkg.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAW,MAAM,wCAAwC,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAKrG,qBAAa,GAAG;IACd,SAAS,CAAC,UAAU,EAAE,aAAa,GAAG,SAAS,CAAC;IAChD,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC;IACtC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,mBAAmB,EAAE,UAAU,GAAG,SAAS,CAAC;IACtD,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;IACtD,SAAS,CAAC,0BAA0B,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3D,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;gBAErC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY;IAQ/E,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,2BAA2B;IA2CnC,OAAO,CAAC,iBAAiB;IA2BnB,OAAO,IAAI,OAAO,CAAC,4BAA4B,CAAC;IA6BtD,WAAW,IAAI,MAAM;IAOrB,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;CAmFxF"}
1
+ {"version":3,"file":"dkg.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/dkg.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAW,MAAM,wCAAwC,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,QAAQ,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AAKtH,qBAAa,GAAG;IACd,SAAS,CAAC,UAAU,EAAE,aAAa,GAAG,SAAS,CAAC;IAChD,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC;IACtC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,mBAAmB,EAAE,UAAU,GAAG,SAAS,CAAC;IACtD,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;IACtD,SAAS,CAAC,0BAA0B,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3D,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;gBAErC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY;IAQ/E,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,2BAA2B;IA2CnC,OAAO,CAAC,iBAAiB;IA2BnB,OAAO,IAAI,OAAO,CAAC,4BAA4B,CAAC;IA6BtD,WAAW,IAAI,MAAM;IAOrB,kBAAkB,IAAI,MAAM;IAgB5B,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;CAgFxF"}
@@ -84,15 +84,15 @@ class Dkg {
84
84
  break;
85
85
  default:
86
86
  this.dkgState = types_1.DkgState.InvalidState;
87
- throw `Invalid State: ${round}`;
87
+ throw Error(`Invalid State: ${round}`);
88
88
  }
89
89
  }
90
90
  async initDkg() {
91
91
  if (this.t > this.n || this.partyIdx >= this.n) {
92
- throw 'Invalid parameters for DKG';
92
+ throw Error('Invalid parameters for DKG');
93
93
  }
94
94
  if (this.dkgState != types_1.DkgState.Uninitialized) {
95
- throw 'DKG session already initialized';
95
+ throw Error('DKG session already initialized');
96
96
  }
97
97
  if (typeof window !== 'undefined') {
98
98
  const initDkls = require('@silencelaboratories/dkls-wasm-ll-web');
@@ -114,7 +114,7 @@ class Dkg {
114
114
  };
115
115
  }
116
116
  catch (e) {
117
- throw `Error while creating the first message from party ${this.partyIdx}: ${e}`;
117
+ throw Error(`Error while creating the first message from party ${this.partyIdx}: ${e}`);
118
118
  }
119
119
  }
120
120
  getKeyShare() {
@@ -123,6 +123,21 @@ class Dkg {
123
123
  }
124
124
  return this.keyShareBuff;
125
125
  }
126
+ getReducedKeyShare() {
127
+ if (!this.keyShareBuff) {
128
+ throw Error('Can not get key share, DKG is not complete yet.');
129
+ }
130
+ const decodedKeyshare = (0, cbor_x_1.decode)(this.keyShareBuff);
131
+ const reducedKeyShare = {
132
+ bigSList: decodedKeyshare.big_s_list,
133
+ xList: decodedKeyshare.x_i_list,
134
+ rootChainCode: decodedKeyshare.root_chain_code,
135
+ prv: decodedKeyshare.s_i,
136
+ pub: decodedKeyshare.public_key,
137
+ };
138
+ const encodedKeyShare = (0, cbor_x_1.encode)(reducedKeyShare);
139
+ return encodedKeyShare;
140
+ }
126
141
  handleIncomingMessages(messagesForIthRound) {
127
142
  let nextRoundMessages = [];
128
143
  let nextRoundDeserializedMessages = { broadcastMessages: [], p2pMessages: [] };
@@ -153,9 +168,6 @@ class Dkg {
153
168
  }
154
169
  if (this.dkgState === types_1.DkgState.Round4) {
155
170
  this.dkgKeyShare = this.dkgSession.keyshare();
156
- if (this.dklsKeyShareRetrofitObject) {
157
- this.dkgKeyShare.finishKeyRotation(this.dklsKeyShareRetrofitObject);
158
- }
159
171
  this.keyShareBuff = Buffer.from(this.dkgKeyShare.toBytes());
160
172
  this.dkgKeyShare.free();
161
173
  this.dkgState = types_1.DkgState.Complete;
@@ -192,7 +204,7 @@ class Dkg {
192
204
  };
193
205
  }
194
206
  catch (e) {
195
- throw `Error while creating messages from party ${this.partyIdx}, round ${this.dkgState}: ${e}`;
207
+ throw Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dkgState}: ${e}`);
196
208
  }
197
209
  finally {
198
210
  nextRoundMessages.forEach((m) => m.free());
@@ -206,4 +218,4 @@ class Dkg {
206
218
  }
207
219
  }
208
220
  exports.Dkg = Dkg;
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGtnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lY2RzYS1ka2xzL2RrZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4RUFBMEY7QUFDMUYsbUNBQXFHO0FBQ3JHLG1DQUF3QztBQUN4QyxxQ0FBOEM7QUFDOUMseUNBQThDO0FBRTlDLE1BQWEsR0FBRztJQWFkLFlBQVksQ0FBUyxFQUFFLENBQVMsRUFBRSxRQUFnQixFQUFFLFlBQTJCO1FBSnJFLGFBQVEsR0FBYSxnQkFBUSxDQUFDLGFBQWEsQ0FBQztRQUtwRCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLGlDQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JHLE1BQU0sS0FBSyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7YUFDckY7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxJQUFJ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Q0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztxQkFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1QsTUFBTSxlQUFlLEdBQUc7d0JBQ3RCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTzt3QkFDbEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPO3FCQUNoQixDQUFDO29CQUNGLE9BQU8sZUFBZSxDQUFDO2dCQUN6QixDQUFDLENBQUM7YUFDTCxDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sNENBQTRDLElBQUksQ0FBQyxRQUFRLFdBQVcsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUNqRztnQkFBUztZQUNSLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0MsNENBQTRDO1lBQzVDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQzthQUM3QjtTQUNGO1FBQ0QsT0FBTyw2QkFBNkIsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUF4TkQsa0JBd05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5Z2VuU2Vzc2lvbiwgS2V5c2hhcmUsIE1lc3NhZ2UgfSBmcm9tICdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtbm9kZSc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlLCBEZXNlcmlhbGl6ZWRNZXNzYWdlcywgRGtnU3RhdGUsIFJldHJvZml0RGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZGVjb2RlLCBlbmNvZGUgfSBmcm9tICdjYm9yLXgnO1xuaW1wb3J0IHsgYmlnSW50VG9CdWZmZXJCRSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgU2VjcDI1NmsxQ3VydmUgfSBmcm9tICcuLi8uLi9jdXJ2ZXMnO1xuXG5leHBvcnQgY2xhc3MgRGtnIHtcbiAgcHJvdGVjdGVkIGRrZ1Nlc3Npb246IEtleWdlblNlc3Npb24gfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBka2dTZXNzaW9uQnl0ZXM6IFVpbnQ4QXJyYXk7XG4gIHByb3RlY3RlZCBka2dLZXlTaGFyZTogS2V5c2hhcmU7XG4gIHByb3RlY3RlZCBrZXlTaGFyZUJ1ZmY6IEJ1ZmZlcjtcbiAgcHJvdGVjdGVkIG46IG51bWJlcjtcbiAgcHJvdGVjdGVkIHQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGNoYWluQ29kZUNvbW1pdG1lbnQ6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBwYXJ0eUlkeDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZGtnU3RhdGU6IERrZ1N0YXRlID0gRGtnU3RhdGUuVW5pbml0aWFsaXplZDtcbiAgcHJvdGVjdGVkIGRrbHNLZXlTaGFyZVJldHJvZml0T2JqZWN0OiBLZXlzaGFyZSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHJldHJvZml0RGF0YTogUmV0cm9maXREYXRhIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG46IG51bWJlciwgdDogbnVtYmVyLCBwYXJ0eUlkeDogbnVtYmVyLCByZXRyb2ZpdERhdGE/OiBSZXRyb2ZpdERhdGEpIHtcbiAgICB0aGlzLm4gPSBuO1xuICAgIHRoaXMudCA9IHQ7XG4gICAgdGhpcy5wYXJ0eUlkeCA9IHBhcnR5SWR4O1xuICAgIHRoaXMuY2hhaW5Db2RlQ29tbWl0bWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJldHJvZml0RGF0YSA9IHJldHJvZml0RGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVTZXNzaW9uKCkge1xuICAgIGlmICghdGhpcy5ka2dTZXNzaW9uKSB7XG4gICAgICB0aGlzLmRrZ1Nlc3Npb24gPSBLZXlnZW5TZXNzaW9uLmZyb21CeXRlcyh0aGlzLmRrZ1Nlc3Npb25CeXRlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlREtMc1JldHJvZml0S2V5U2hhcmUoKSB7XG4gICAgaWYgKHRoaXMucmV0cm9maXREYXRhKSB7XG4gICAgICBpZiAoIXRoaXMucmV0cm9maXREYXRhLnhTaGFyZS55IHx8ICF0aGlzLnJldHJvZml0RGF0YS54U2hhcmUuY2hhaW5jb2RlIHx8ICF0aGlzLnJldHJvZml0RGF0YS54U2hhcmUueCkge1xuICAgICAgICB0aHJvdyBFcnJvcigneFNoYXJlIG11c3QgaGF2ZSBhIHB1YmxpYyBrZXksIHByaXZhdGUgc2hhcmUgdmFsdWUsIGFuZCBhIGNoYWluY29kZS4nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJldHJvZml0RGF0YS5iaWdTaUxpc3QubGVuZ3RoICE9PSB0aGlzLm4gLSAxKSB7XG4gICAgICAgIHRocm93IEVycm9yKFwiYmlnU2lMaXN0IHNob3VsZCBjb250YWluIHRoZSBvdGhlciBwYXJ0aWVzJyBTaSdzXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmlnU0xpc3Q6IEFycmF5PEFycmF5PG51bWJlcj4+ID0gW107XG4gICAgICBjb25zdCB4aUxpc3Q6IEFycmF5PEFycmF5PG51bWJlcj4+ID0gW107XG4gICAgICBsZXQgaiA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubjsgaSsrKSB7XG4gICAgICAgIGlmIChpID09PSB0aGlzLnBhcnR5SWR4KSB7XG4gICAgICAgICAgY29uc3Qgc2VjcDI1NmsxID0gbmV3IFNlY3AyNTZrMUN1cnZlKCk7XG4gICAgICAgICAgYmlnU0xpc3QucHVzaChcbiAgICAgICAgICAgIEFycmF5LmZyb20oYmlnSW50VG9CdWZmZXJCRShzZWNwMjU2azEuYmFzZVBvaW50TXVsdChCaWdJbnQoJzB4JyArIHRoaXMucmV0cm9maXREYXRhLnhTaGFyZS54KSkpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmlnU0xpc3QucHVzaChBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKHRoaXMucmV0cm9maXREYXRhLmJpZ1NpTGlzdFtqXSwgJ2hleCcpKSk7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgICAgIHhpTGlzdC5wdXNoKEFycmF5LmZyb20oYmlnSW50VG9CdWZmZXJCRShCaWdJbnQoaSArIDEpLCAzMikpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRrbHNLZXlTaGFyZSA9IHtcbiAgICAgICAgdG90YWxfcGFydGllczogdGhpcy5uLFxuICAgICAgICB0aHJlc2hvbGQ6IHRoaXMudCxcbiAgICAgICAgcmFua19saXN0OiBuZXcgQXJyYXkodGhpcy5uKS5maWxsKDApLFxuICAgICAgICBwYXJ0eV9pZDogdGhpcy5wYXJ0eUlkeCxcbiAgICAgICAgcHVibGljX2tleTogQXJyYXkuZnJvbShCdWZmZXIuZnJvbSh0aGlzLnJldHJvZml0RGF0YS54U2hhcmUueSwgJ2hleCcpKSxcbiAgICAgICAgcm9vdF9jaGFpbl9jb2RlOiBBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKHRoaXMucmV0cm9maXREYXRhLnhTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSksXG4gICAgICAgIGZpbmFsX3Nlc3Npb25faWQ6IEFycmF5KDMyKS5maWxsKDApLFxuICAgICAgICBzZWVkX290X3JlY2VpdmVyczogbmV3IEFycmF5KHRoaXMubiAtIDEpLmZpbGwoQXJyYXkoMzI4MzIpLmZpbGwoMCkpLFxuICAgICAgICBzZWVkX290X3NlbmRlcnM6IG5ldyBBcnJheSh0aGlzLm4gLSAxKS5maWxsKEFycmF5KDMyNzY4KS5maWxsKDApKSxcbiAgICAgICAgc2VudF9zZWVkX2xpc3Q6IFtBcnJheSgzMikuZmlsbCgwKV0sXG4gICAgICAgIHJlY19zZWVkX2xpc3Q6IFtBcnJheSgzMikuZmlsbCgwKV0sXG4gICAgICAgIHNfaTogQXJyYXkuZnJvbShCdWZmZXIuZnJvbSh0aGlzLnJldHJvZml0RGF0YS54U2hhcmUueCwgJ2hleCcpKSxcbiAgICAgICAgYmlnX3NfbGlzdDogYmlnU0xpc3QsXG4gICAgICAgIHhfaV9saXN0OiB0aGlzLnJldHJvZml0RGF0YS54aUxpc3QgPyB0aGlzLnJldHJvZml0RGF0YS54aUxpc3QgOiB4aUxpc3QsXG4gICAgICB9O1xuICAgICAgdGhpcy5ka2xzS2V5U2hhcmVSZXRyb2ZpdE9iamVjdCA9IEtleXNoYXJlLmZyb21CeXRlcyhlbmNvZGUoZGtsc0tleVNoYXJlKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVzZXJpYWxpemVTdGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuZGtnU2Vzc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Nlc3Npb24gbm90IGludGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgY29uc3Qgcm91bmQgPSBkZWNvZGUodGhpcy5ka2dTZXNzaW9uLnRvQnl0ZXMoKSkucm91bmQ7XG4gICAgc3dpdGNoIChyb3VuZCkge1xuICAgICAgY2FzZSAnV2FpdE1zZzEnOlxuICAgICAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuUm91bmQxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1dhaXRNc2cyJzpcbiAgICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLlJvdW5kMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdXYWl0TXNnMyc6XG4gICAgICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5Sb3VuZDM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnV2FpdE1zZzQnOlxuICAgICAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuUm91bmQ0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VuZGVkJzpcbiAgICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5JbnZhbGlkU3RhdGU7XG4gICAgICAgIHRocm93IGBJbnZhbGlkIFN0YXRlOiAke3JvdW5kfWA7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdERrZygpOiBQcm9taXNlPERlc2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2U+IHtcbiAgICBpZiAodGhpcy50ID4gdGhpcy5uIHx8IHRoaXMucGFydHlJZHggPj0gdGhpcy5uKSB7XG4gICAgICB0aHJvdyAnSW52YWxpZCBwYXJhbWV0ZXJzIGZvciBES0cnO1xuICAgIH1cbiAgICBpZiAodGhpcy5ka2dTdGF0ZSAhPSBEa2dTdGF0ZS5VbmluaXRpYWxpemVkKSB7XG4gICAgICB0aHJvdyAnREtHIHNlc3Npb24gYWxyZWFkeSBpbml0aWFsaXplZCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgaW5pdERrbHMgPSByZXF1aXJlKCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtd2ViJyk7XG4gICAgICBhd2FpdCBpbml0RGtscy5kZWZhdWx0KCk7XG4gICAgfVxuICAgIHRoaXMuX2NyZWF0ZURLTHNSZXRyb2ZpdEtleVNoYXJlKCk7XG4gICAgaWYgKHRoaXMuZGtsc0tleVNoYXJlUmV0cm9maXRPYmplY3QpIHtcbiAgICAgIHRoaXMuZGtnU2Vzc2lvbiA9IEtleWdlblNlc3Npb24uaW5pdEtleVJvdGF0aW9uKHRoaXMuZGtsc0tleVNoYXJlUmV0cm9maXRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRrZ1Nlc3Npb24gPSBuZXcgS2V5Z2VuU2Vzc2lvbih0aGlzLm4sIHRoaXMudCwgdGhpcy5wYXJ0eUlkeCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5ka2dTZXNzaW9uLmNyZWF0ZUZpcnN0TWVzc2FnZSgpLnBheWxvYWQ7XG4gICAgICB0aGlzLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICBmcm9tOiB0aGlzLnBhcnR5SWR4LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGZpcnN0IG1lc3NhZ2UgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9OiAke2V9YDtcbiAgICB9XG4gIH1cblxuICBnZXRLZXlTaGFyZSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5rZXlTaGFyZUJ1ZmYpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IGdldCBrZXkgc2hhcmUsIERLRyBpcyBub3QgY29tcGxldGUgeWV0LicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5rZXlTaGFyZUJ1ZmY7XG4gIH1cblxuICBoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2VzRm9ySXRoUm91bmQ6IERlc2VyaWFsaXplZE1lc3NhZ2VzKTogRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICAgIGxldCBuZXh0Um91bmRNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gICAgbGV0IG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IHsgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLCBwMnBNZXNzYWdlczogW10gfTtcbiAgICB0aGlzLl9yZXN0b3JlU2Vzc2lvbigpO1xuICAgIGlmICghdGhpcy5ka2dTZXNzaW9uKSB7XG4gICAgICB0aHJvdyBFcnJvcignU2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5Sb3VuZDMpIHtcbiAgICAgICAgY29uc3QgY29tbWl0bWVudHNVbnNvcnRlZCA9IG1lc3NhZ2VzRm9ySXRoUm91bmQucDJwTWVzc2FnZXNcbiAgICAgICAgICAubWFwKChtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBmcm9tOiBtLmZyb20sIGNvbW1pdG1lbnQ6IG0uY29tbWl0bWVudCB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNvbmNhdChbeyBmcm9tOiB0aGlzLnBhcnR5SWR4LCBjb21taXRtZW50OiB0aGlzLmNoYWluQ29kZUNvbW1pdG1lbnQgfV0pO1xuICAgICAgICBjb25zdCBjb21taXRtZW50c1NvcnRlZCA9IGNvbW1pdG1lbnRzVW5zb3J0ZWRcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEuZnJvbSAtIGIuZnJvbTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5tYXAoKGMpID0+IGMuY29tbWl0bWVudCk7XG4gICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gdGhpcy5ka2dTZXNzaW9uLmhhbmRsZU1lc3NhZ2VzKFxuICAgICAgICAgIG1lc3NhZ2VzRm9ySXRoUm91bmQuYnJvYWRjYXN0TWVzc2FnZXNcbiAgICAgICAgICAgIC5tYXAoKG0pID0+IG5ldyBNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCB1bmRlZmluZWQpKVxuICAgICAgICAgICAgLmNvbmNhdChtZXNzYWdlc0Zvckl0aFJvdW5kLnAycE1lc3NhZ2VzLm1hcCgobSkgPT4gbmV3IE1lc3NhZ2UobS5wYXlsb2FkLCBtLmZyb20sIG0udG8pKSksXG4gICAgICAgICAgY29tbWl0bWVudHNTb3J0ZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gdGhpcy5ka2dTZXNzaW9uLmhhbmRsZU1lc3NhZ2VzKFxuICAgICAgICAgIG1lc3NhZ2VzRm9ySXRoUm91bmQuYnJvYWRjYXN0TWVzc2FnZXNcbiAgICAgICAgICAgIC5tYXAoKG0pID0+IG5ldyBNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCB1bmRlZmluZWQpKVxuICAgICAgICAgICAgLmNvbmNhdChtZXNzYWdlc0Zvckl0aFJvdW5kLnAycE1lc3NhZ2VzLm1hcCgobSkgPT4gbmV3IE1lc3NhZ2UobS5wYXlsb2FkLCBtLmZyb20sIG0udG8pKSksXG4gICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuUm91bmQ0KSB7XG4gICAgICAgIHRoaXMuZGtnS2V5U2hhcmUgPSB0aGlzLmRrZ1Nlc3Npb24ua2V5c2hhcmUoKTtcbiAgICAgICAgaWYgKHRoaXMuZGtsc0tleVNoYXJlUmV0cm9maXRPYmplY3QpIHtcbiAgICAgICAgICB0aGlzLmRrZ0tleVNoYXJlLmZpbmlzaEtleVJvdGF0aW9uKHRoaXMuZGtsc0tleVNoYXJlUmV0cm9maXRPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMua2V5U2hhcmVCdWZmID0gQnVmZmVyLmZyb20odGhpcy5ka2dLZXlTaGFyZS50b0J5dGVzKCkpO1xuICAgICAgICB0aGlzLmRrZ0tleVNoYXJlLmZyZWUoKTtcbiAgICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgICByZXR1cm4geyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIHJvdW5kIGRhdGEuXG4gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5Sb3VuZDIpIHtcbiAgICAgICAgdGhpcy5jaGFpbkNvZGVDb21taXRtZW50ID0gdGhpcy5ka2dTZXNzaW9uLmNhbGN1bGF0ZUNoYWluQ29kZUNvbW1pdG1lbnQoKTtcbiAgICAgIH1cbiAgICAgIG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzID0ge1xuICAgICAgICBwMnBNZXNzYWdlczogbmV4dFJvdW5kTWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKChtKSA9PiBtLnRvX2lkICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgobSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcDJwUmV0dXJuID0ge1xuICAgICAgICAgICAgICBwYXlsb2FkOiBtLnBheWxvYWQsXG4gICAgICAgICAgICAgIGZyb206IG0uZnJvbV9pZCxcbiAgICAgICAgICAgICAgdG86IG0udG9faWQhLFxuICAgICAgICAgICAgICBjb21taXRtZW50OiB0aGlzLmNoYWluQ29kZUNvbW1pdG1lbnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAycFJldHVybjtcbiAgICAgICAgICB9KSxcbiAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IG5leHRSb3VuZE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcigobSkgPT4gbS50b19pZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5tYXAoKG0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJyb2FkY2FzdFJldHVybiA9IHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogbS5wYXlsb2FkLFxuICAgICAgICAgICAgICBmcm9tOiBtLmZyb21faWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGJyb2FkY2FzdFJldHVybjtcbiAgICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgYEVycm9yIHdoaWxlIGNyZWF0aW5nIG1lc3NhZ2VzIGZyb20gcGFydHkgJHt0aGlzLnBhcnR5SWR4fSwgcm91bmQgJHt0aGlzLmRrZ1N0YXRlfTogJHtlfWA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG5leHRSb3VuZE1lc3NhZ2VzLmZvckVhY2goKG0pID0+IG0uZnJlZSgpKTtcbiAgICAgIC8vIFNlc3Npb24gaXMgZnJlZWQgd2hlbiBrZXlzaGFyZSBpcyBjYWxsZWQuXG4gICAgICBpZiAodGhpcy5ka2dTdGF0ZSAhPT0gRGtnU3RhdGUuQ29tcGxldGUpIHtcbiAgICAgICAgdGhpcy5ka2dTZXNzaW9uQnl0ZXMgPSB0aGlzLmRrZ1Nlc3Npb24udG9CeXRlcygpO1xuICAgICAgICB0aGlzLmRrZ1Nlc3Npb24gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0Um91bmREZXNlcmlhbGl6ZWRNZXNzYWdlcztcbiAgfVxufVxuIl19
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGtnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lY2RzYS1ka2xzL2RrZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4RUFBMEY7QUFDMUYsbUNBQXNIO0FBQ3RILG1DQUF3QztBQUN4QyxxQ0FBOEM7QUFDOUMseUNBQThDO0FBRTlDLE1BQWEsR0FBRztJQWFkLFlBQVksQ0FBUyxFQUFFLENBQVMsRUFBRSxRQUFnQixFQUFFLFlBQTJCO1FBSnJFLGFBQVEsR0FBYSxnQkFBUSxDQUFDLGFBQWEsQ0FBQztRQUtwRCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLGlDQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JHLE1BQU0sS0FBSyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7YUFDckY7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxJQUFJ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LEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7YUFDN0I7U0FDRjtRQUNELE9BQU8sNkJBQTZCLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBck9ELGtCQXFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleWdlblNlc3Npb24sIEtleXNoYXJlLCBNZXNzYWdlIH0gZnJvbSAnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLW5vZGUnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSwgRGVzZXJpYWxpemVkTWVzc2FnZXMsIERrZ1N0YXRlLCBSZWR1Y2VkS2V5U2hhcmUsIFJldHJvZml0RGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZGVjb2RlLCBlbmNvZGUgfSBmcm9tICdjYm9yLXgnO1xuaW1wb3J0IHsgYmlnSW50VG9CdWZmZXJCRSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgU2VjcDI1NmsxQ3VydmUgfSBmcm9tICcuLi8uLi9jdXJ2ZXMnO1xuXG5leHBvcnQgY2xhc3MgRGtnIHtcbiAgcHJvdGVjdGVkIGRrZ1Nlc3Npb246IEtleWdlblNlc3Npb24gfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBka2dTZXNzaW9uQnl0ZXM6IFVpbnQ4QXJyYXk7XG4gIHByb3RlY3RlZCBka2dLZXlTaGFyZTogS2V5c2hhcmU7XG4gIHByb3RlY3RlZCBrZXlTaGFyZUJ1ZmY6IEJ1ZmZlcjtcbiAgcHJvdGVjdGVkIG46IG51bWJlcjtcbiAgcHJvdGVjdGVkIHQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGNoYWluQ29kZUNvbW1pdG1lbnQ6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBwYXJ0eUlkeDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZGtnU3RhdGU6IERrZ1N0YXRlID0gRGtnU3RhdGUuVW5pbml0aWFsaXplZDtcbiAgcHJvdGVjdGVkIGRrbHNLZXlTaGFyZVJldHJvZml0T2JqZWN0OiBLZXlzaGFyZSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHJldHJvZml0RGF0YTogUmV0cm9maXREYXRhIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG46IG51bWJlciwgdDogbnVtYmVyLCBwYXJ0eUlkeDogbnVtYmVyLCByZXRyb2ZpdERhdGE/OiBSZXRyb2ZpdERhdGEpIHtcbiAgICB0aGlzLm4gPSBuO1xuICAgIHRoaXMudCA9IHQ7XG4gICAgdGhpcy5wYXJ0eUlkeCA9IHBhcnR5SWR4O1xuICAgIHRoaXMuY2hhaW5Db2RlQ29tbWl0bWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJldHJvZml0RGF0YSA9IHJldHJvZml0RGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVTZXNzaW9uKCkge1xuICAgIGlmICghdGhpcy5ka2dTZXNzaW9uKSB7XG4gICAgICB0aGlzLmRrZ1Nlc3Npb24gPSBLZXlnZW5TZXNzaW9uLmZyb21CeXRlcyh0aGlzLmRrZ1Nlc3Npb25CeXRlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlREtMc1JldHJvZml0S2V5U2hhcmUoKSB7XG4gICAgaWYgKHRoaXMucmV0cm9maXREYXRhKSB7XG4gICAgICBpZiAoIXRoaXMucmV0cm9maXREYXRhLnhTaGFyZS55IHx8ICF0aGlzLnJldHJvZml0RGF0YS54U2hhcmUuY2hhaW5jb2RlIHx8ICF0aGlzLnJldHJvZml0RGF0YS54U2hhcmUueCkge1xuICAgICAgICB0aHJvdyBFcnJvcigneFNoYXJlIG11c3QgaGF2ZSBhIHB1YmxpYyBrZXksIHByaXZhdGUgc2hhcmUgdmFsdWUsIGFuZCBhIGNoYWluY29kZS4nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJldHJvZml0RGF0YS5iaWdTaUxpc3QubGVuZ3RoICE9PSB0aGlzLm4gLSAxKSB7XG4gICAgICAgIHRocm93IEVycm9yKFwiYmlnU2lMaXN0IHNob3VsZCBjb250YWluIHRoZSBvdGhlciBwYXJ0aWVzJyBTaSdzXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmlnU0xpc3Q6IEFycmF5PEFycmF5PG51bWJlcj4+ID0gW107XG4gICAgICBjb25zdCB4aUxpc3Q6IEFycmF5PEFycmF5PG51bWJlcj4+ID0gW107XG4gICAgICBsZXQgaiA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubjsgaSsrKSB7XG4gICAgICAgIGlmIChpID09PSB0aGlzLnBhcnR5SWR4KSB7XG4gICAgICAgICAgY29uc3Qgc2VjcDI1NmsxID0gbmV3IFNlY3AyNTZrMUN1cnZlKCk7XG4gICAgICAgICAgYmlnU0xpc3QucHVzaChcbiAgICAgICAgICAgIEFycmF5LmZyb20oYmlnSW50VG9CdWZmZXJCRShzZWNwMjU2azEuYmFzZVBvaW50TXVsdChCaWdJbnQoJzB4JyArIHRoaXMucmV0cm9maXREYXRhLnhTaGFyZS54KSkpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmlnU0xpc3QucHVzaChBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKHRoaXMucmV0cm9maXREYXRhLmJpZ1NpTGlzdFtqXSwgJ2hleCcpKSk7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgICAgIHhpTGlzdC5wdXNoKEFycmF5LmZyb20oYmlnSW50VG9CdWZmZXJCRShCaWdJbnQoaSArIDEpLCAzMikpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRrbHNLZXlTaGFyZSA9IHtcbiAgICAgICAgdG90YWxfcGFydGllczogdGhpcy5uLFxuICAgICAgICB0aHJlc2hvbGQ6IHRoaXMudCxcbiAgICAgICAgcmFua19saXN0OiBuZXcgQXJyYXkodGhpcy5uKS5maWxsKDApLFxuICAgICAgICBwYXJ0eV9pZDogdGhpcy5wYXJ0eUlkeCxcbiAgICAgICAgcHVibGljX2tleTogQXJyYXkuZnJvbShCdWZmZXIuZnJvbSh0aGlzLnJldHJvZml0RGF0YS54U2hhcmUueSwgJ2hleCcpKSxcbiAgICAgICAgcm9vdF9jaGFpbl9jb2RlOiBBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKHRoaXMucmV0cm9maXREYXRhLnhTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSksXG4gICAgICAgIGZpbmFsX3Nlc3Npb25faWQ6IEFycmF5KDMyKS5maWxsKDApLFxuICAgICAgICBzZWVkX290X3JlY2VpdmVyczogbmV3IEFycmF5KHRoaXMubiAtIDEpLmZpbGwoQXJyYXkoMzI4MzIpLmZpbGwoMCkpLFxuICAgICAgICBzZWVkX290X3NlbmRlcnM6IG5ldyBBcnJheSh0aGlzLm4gLSAxKS5maWxsKEFycmF5KDMyNzY4KS5maWxsKDApKSxcbiAgICAgICAgc2VudF9zZWVkX2xpc3Q6IFtBcnJheSgzMikuZmlsbCgwKV0sXG4gICAgICAgIHJlY19zZWVkX2xpc3Q6IFtBcnJheSgzMikuZmlsbCgwKV0sXG4gICAgICAgIHNfaTogQXJyYXkuZnJvbShCdWZmZXIuZnJvbSh0aGlzLnJldHJvZml0RGF0YS54U2hhcmUueCwgJ2hleCcpKSxcbiAgICAgICAgYmlnX3NfbGlzdDogYmlnU0xpc3QsXG4gICAgICAgIHhfaV9saXN0OiB0aGlzLnJldHJvZml0RGF0YS54aUxpc3QgPyB0aGlzLnJldHJvZml0RGF0YS54aUxpc3QgOiB4aUxpc3QsXG4gICAgICB9O1xuICAgICAgdGhpcy5ka2xzS2V5U2hhcmVSZXRyb2ZpdE9iamVjdCA9IEtleXNoYXJlLmZyb21CeXRlcyhlbmNvZGUoZGtsc0tleVNoYXJlKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVzZXJpYWxpemVTdGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuZGtnU2Vzc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Nlc3Npb24gbm90IGludGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgY29uc3Qgcm91bmQgPSBkZWNvZGUodGhpcy5ka2dTZXNzaW9uLnRvQnl0ZXMoKSkucm91bmQ7XG4gICAgc3dpdGNoIChyb3VuZCkge1xuICAgICAgY2FzZSAnV2FpdE1zZzEnOlxuICAgICAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuUm91bmQxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1dhaXRNc2cyJzpcbiAgICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLlJvdW5kMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdXYWl0TXNnMyc6XG4gICAgICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5Sb3VuZDM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnV2FpdE1zZzQnOlxuICAgICAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuUm91bmQ0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VuZGVkJzpcbiAgICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5JbnZhbGlkU3RhdGU7XG4gICAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIFN0YXRlOiAke3JvdW5kfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXREa2coKTogUHJvbWlzZTxEZXNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlPiB7XG4gICAgaWYgKHRoaXMudCA+IHRoaXMubiB8fCB0aGlzLnBhcnR5SWR4ID49IHRoaXMubikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgcGFyYW1ldGVycyBmb3IgREtHJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRrZ1N0YXRlICE9IERrZ1N0YXRlLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBhbHJlYWR5IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgaW5pdERrbHMgPSByZXF1aXJlKCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtd2ViJyk7XG4gICAgICBhd2FpdCBpbml0RGtscy5kZWZhdWx0KCk7XG4gICAgfVxuICAgIHRoaXMuX2NyZWF0ZURLTHNSZXRyb2ZpdEtleVNoYXJlKCk7XG4gICAgaWYgKHRoaXMuZGtsc0tleVNoYXJlUmV0cm9maXRPYmplY3QpIHtcbiAgICAgIHRoaXMuZGtnU2Vzc2lvbiA9IEtleWdlblNlc3Npb24uaW5pdEtleVJvdGF0aW9uKHRoaXMuZGtsc0tleVNoYXJlUmV0cm9maXRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRrZ1Nlc3Npb24gPSBuZXcgS2V5Z2VuU2Vzc2lvbih0aGlzLm4sIHRoaXMudCwgdGhpcy5wYXJ0eUlkeCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5ka2dTZXNzaW9uLmNyZWF0ZUZpcnN0TWVzc2FnZSgpLnBheWxvYWQ7XG4gICAgICB0aGlzLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICBmcm9tOiB0aGlzLnBhcnR5SWR4LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGZpcnN0IG1lc3NhZ2UgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9OiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0S2V5U2hhcmUoKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMua2V5U2hhcmVCdWZmKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCBnZXQga2V5IHNoYXJlLCBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMua2V5U2hhcmVCdWZmO1xuICB9XG5cbiAgZ2V0UmVkdWNlZEtleVNoYXJlKCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLmtleVNoYXJlQnVmZikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgZ2V0IGtleSBzaGFyZSwgREtHIGlzIG5vdCBjb21wbGV0ZSB5ZXQuJyk7XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZWRLZXlzaGFyZSA9IGRlY29kZSh0aGlzLmtleVNoYXJlQnVmZik7XG4gICAgY29uc3QgcmVkdWNlZEtleVNoYXJlOiBSZWR1Y2VkS2V5U2hhcmUgPSB7XG4gICAgICBiaWdTTGlzdDogZGVjb2RlZEtleXNoYXJlLmJpZ19zX2xpc3QsXG4gICAgICB4TGlzdDogZGVjb2RlZEtleXNoYXJlLnhfaV9saXN0LFxuICAgICAgcm9vdENoYWluQ29kZTogZGVjb2RlZEtleXNoYXJlLnJvb3RfY2hhaW5fY29kZSxcbiAgICAgIHBydjogZGVjb2RlZEtleXNoYXJlLnNfaSxcbiAgICAgIHB1YjogZGVjb2RlZEtleXNoYXJlLnB1YmxpY19rZXksXG4gICAgfTtcbiAgICBjb25zdCBlbmNvZGVkS2V5U2hhcmUgPSBlbmNvZGUocmVkdWNlZEtleVNoYXJlKTtcbiAgICByZXR1cm4gZW5jb2RlZEtleVNoYXJlO1xuICB9XG5cbiAgaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlc0Zvckl0aFJvdW5kOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyk6IERlc2VyaWFsaXplZE1lc3NhZ2VzIHtcbiAgICBsZXQgbmV4dFJvdW5kTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuICAgIGxldCBuZXh0Um91bmREZXNlcmlhbGl6ZWRNZXNzYWdlczogRGVzZXJpYWxpemVkTWVzc2FnZXMgPSB7IGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSwgcDJwTWVzc2FnZXM6IFtdIH07XG4gICAgdGhpcy5fcmVzdG9yZVNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMuZGtnU2Vzc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Nlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuUm91bmQzKSB7XG4gICAgICAgIGNvbnN0IGNvbW1pdG1lbnRzVW5zb3J0ZWQgPSBtZXNzYWdlc0Zvckl0aFJvdW5kLnAycE1lc3NhZ2VzXG4gICAgICAgICAgLm1hcCgobSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgZnJvbTogbS5mcm9tLCBjb21taXRtZW50OiBtLmNvbW1pdG1lbnQgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jb25jYXQoW3sgZnJvbTogdGhpcy5wYXJ0eUlkeCwgY29tbWl0bWVudDogdGhpcy5jaGFpbkNvZGVDb21taXRtZW50IH1dKTtcbiAgICAgICAgY29uc3QgY29tbWl0bWVudHNTb3J0ZWQgPSBjb21taXRtZW50c1Vuc29ydGVkXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhLmZyb20gLSBiLmZyb207XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChjKSA9PiBjLmNvbW1pdG1lbnQpO1xuICAgICAgICBuZXh0Um91bmRNZXNzYWdlcyA9IHRoaXMuZGtnU2Vzc2lvbi5oYW5kbGVNZXNzYWdlcyhcbiAgICAgICAgICBtZXNzYWdlc0Zvckl0aFJvdW5kLmJyb2FkY2FzdE1lc3NhZ2VzXG4gICAgICAgICAgICAubWFwKChtKSA9PiBuZXcgTWVzc2FnZShtLnBheWxvYWQsIG0uZnJvbSwgdW5kZWZpbmVkKSlcbiAgICAgICAgICAgIC5jb25jYXQobWVzc2FnZXNGb3JJdGhSb3VuZC5wMnBNZXNzYWdlcy5tYXAoKG0pID0+IG5ldyBNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCBtLnRvKSkpLFxuICAgICAgICAgIGNvbW1pdG1lbnRzU29ydGVkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0Um91bmRNZXNzYWdlcyA9IHRoaXMuZGtnU2Vzc2lvbi5oYW5kbGVNZXNzYWdlcyhcbiAgICAgICAgICBtZXNzYWdlc0Zvckl0aFJvdW5kLmJyb2FkY2FzdE1lc3NhZ2VzXG4gICAgICAgICAgICAubWFwKChtKSA9PiBuZXcgTWVzc2FnZShtLnBheWxvYWQsIG0uZnJvbSwgdW5kZWZpbmVkKSlcbiAgICAgICAgICAgIC5jb25jYXQobWVzc2FnZXNGb3JJdGhSb3VuZC5wMnBNZXNzYWdlcy5tYXAoKG0pID0+IG5ldyBNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCBtLnRvKSkpLFxuICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGtnU3RhdGUgPT09IERrZ1N0YXRlLlJvdW5kNCkge1xuICAgICAgICB0aGlzLmRrZ0tleVNoYXJlID0gdGhpcy5ka2dTZXNzaW9uLmtleXNoYXJlKCk7XG4gICAgICAgIHRoaXMua2V5U2hhcmVCdWZmID0gQnVmZmVyLmZyb20odGhpcy5ka2dLZXlTaGFyZS50b0J5dGVzKCkpO1xuICAgICAgICB0aGlzLmRrZ0tleVNoYXJlLmZyZWUoKTtcbiAgICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgICByZXR1cm4geyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIHJvdW5kIGRhdGEuXG4gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5Sb3VuZDIpIHtcbiAgICAgICAgdGhpcy5jaGFpbkNvZGVDb21taXRtZW50ID0gdGhpcy5ka2dTZXNzaW9uLmNhbGN1bGF0ZUNoYWluQ29kZUNvbW1pdG1lbnQoKTtcbiAgICAgIH1cbiAgICAgIG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzID0ge1xuICAgICAgICBwMnBNZXNzYWdlczogbmV4dFJvdW5kTWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKChtKSA9PiBtLnRvX2lkICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgobSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcDJwUmV0dXJuID0ge1xuICAgICAgICAgICAgICBwYXlsb2FkOiBtLnBheWxvYWQsXG4gICAgICAgICAgICAgIGZyb206IG0uZnJvbV9pZCxcbiAgICAgICAgICAgICAgdG86IG0udG9faWQhLFxuICAgICAgICAgICAgICBjb21taXRtZW50OiB0aGlzLmNoYWluQ29kZUNvbW1pdG1lbnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAycFJldHVybjtcbiAgICAgICAgICB9KSxcbiAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IG5leHRSb3VuZE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcigobSkgPT4gbS50b19pZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5tYXAoKG0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJyb2FkY2FzdFJldHVybiA9IHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogbS5wYXlsb2FkLFxuICAgICAgICAgICAgICBmcm9tOiBtLmZyb21faWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGJyb2FkY2FzdFJldHVybjtcbiAgICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIG1lc3NhZ2VzIGZyb20gcGFydHkgJHt0aGlzLnBhcnR5SWR4fSwgcm91bmQgJHt0aGlzLmRrZ1N0YXRlfTogJHtlfWApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuZXh0Um91bmRNZXNzYWdlcy5mb3JFYWNoKChtKSA9PiBtLmZyZWUoKSk7XG4gICAgICAvLyBTZXNzaW9uIGlzIGZyZWVkIHdoZW4ga2V5c2hhcmUgaXMgY2FsbGVkLlxuICAgICAgaWYgKHRoaXMuZGtnU3RhdGUgIT09IERrZ1N0YXRlLkNvbXBsZXRlKSB7XG4gICAgICAgIHRoaXMuZGtnU2Vzc2lvbkJ5dGVzID0gdGhpcy5ka2dTZXNzaW9uLnRvQnl0ZXMoKTtcbiAgICAgICAgdGhpcy5ka2dTZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXM7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"dsg.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/dsg.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGlH,qBAAa,GAAG;IACd,SAAS,CAAC,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9C,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC;IACtC,OAAO,CAAC,UAAU,CAAwC;IAC1D,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;gBAE1C,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAO3F,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,iBAAiB;IAwBnB,IAAI,IAAI,OAAO,CAAC,4BAA4B,CAAC;IAyBnD,IAAI,SAAS,IAAI,yBAAyB,CAKzC;IAED;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;;;;OAKG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;CA8ExF"}
1
+ {"version":3,"file":"dsg.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/dsg.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGlH,qBAAa,GAAG;IACd,SAAS,CAAC,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9C,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC;IACtC,OAAO,CAAC,UAAU,CAAwC;IAC1D,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;gBAE1C,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAO3F,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,iBAAiB;IAwBnB,IAAI,IAAI,OAAO,CAAC,4BAA4B,CAAC;IAyBnD,IAAI,SAAS,IAAI,yBAAyB,CAKzC;IAED;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;;;;OAKG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;CAmFxF"}
@@ -37,12 +37,12 @@ class Dsg {
37
37
  break;
38
38
  default:
39
39
  this.dsgState = types_1.DsgState.InvalidState;
40
- throw `Invalid State: ${round}`;
40
+ throw Error(`Invalid State: ${round}`);
41
41
  }
42
42
  }
43
43
  async init() {
44
44
  if (this.dsgState !== types_1.DsgState.Uninitialized) {
45
- throw 'DSG session already initialized';
45
+ throw Error('DSG session already initialized');
46
46
  }
47
47
  if (typeof window !== 'undefined') {
48
48
  const initDkls = require('@silencelaboratories/dkls-wasm-ll-web');
@@ -62,7 +62,7 @@ class Dsg {
62
62
  };
63
63
  }
64
64
  catch (e) {
65
- throw `Error while creating the first message from party ${this.partyIdx}: ${e}`;
65
+ throw Error(`Error while creating the first message from party ${this.partyIdx}: ${e}`);
66
66
  }
67
67
  }
68
68
  get signature() {
@@ -154,7 +154,10 @@ class Dsg {
154
154
  };
155
155
  }
156
156
  catch (e) {
157
- throw `Error while creating messages from party ${this.partyIdx}, round ${this.dsgState}: ${e}`;
157
+ if (e.message.startsWith('Abort the protocol and ban')) {
158
+ throw Error('Signing aborted. Please stop all transaction signing from this wallet and contact support@bitgo.com.');
159
+ }
160
+ throw Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dsgState}: ${e}`);
158
161
  }
159
162
  finally {
160
163
  nextRoundMessages.forEach((m) => m.free());
@@ -168,4 +171,4 @@ class Dsg {
168
171
  }
169
172
  }
170
173
  exports.Dsg = Dsg;
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lY2RzYS1ka2xzL2RzZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4RUFBd0Y7QUFDeEYsbUNBQWtIO0FBQ2xILG1DQUFnQztBQUVoQyxNQUFhLEdBQUc7SUFVZCxZQUFZLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxjQUFzQixFQUFFLFdBQW1CO1FBRmpGLGFBQVEsR0FBYSxnQkFBUSxDQUFDLGFBQWEsQ0FBQztRQUdwRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLCtCQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsTUFBTSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUN2QztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBTSxFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEQsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQkFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDaEMsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFRLENBQUMsTUFBTSxDQUFDO2dCQUNoQyxNQUFNO1lB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QUNoQixDQUFDO29CQUNGLE9BQU8sZUFBZSxDQUFDO2dCQUN6QixDQUFDLENBQUM7YUFDTCxDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sNENBQTRDLElBQUksQ0FBQyxRQUFRLFdBQVcsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUNqRztnQkFBUztZQUNSLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0MsMkNBQTJDO1lBQzNDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQzthQUM3QjtTQUNGO1FBQ0QsT0FBTyw2QkFBNkIsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUEvS0Qsa0JBK0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnblNlc3Npb24sIEtleXNoYXJlLCBNZXNzYWdlIH0gZnJvbSAnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLW5vZGUnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSwgRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSwgRGVzZXJpYWxpemVkTWVzc2FnZXMsIERzZ1N0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdjYm9yLXgnO1xuXG5leHBvcnQgY2xhc3MgRHNnIHtcbiAgcHJvdGVjdGVkIGRzZ1Nlc3Npb246IFNpZ25TZXNzaW9uIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgZHNnU2Vzc2lvbkJ5dGVzOiBVaW50OEFycmF5O1xuICBwcml2YXRlIF9zaWduYXR1cmU6IERlc2VyaWFsaXplZERrbHNTaWduYXR1cmUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBrZXlTaGFyZUJ5dGVzOiBCdWZmZXI7XG4gIHByb3RlY3RlZCBtZXNzYWdlSGFzaDogQnVmZmVyO1xuICBwcm90ZWN0ZWQgZGVyaXZhdGlvblBhdGg6IHN0cmluZztcbiAgcHJvdGVjdGVkIHBhcnR5SWR4OiBudW1iZXI7XG4gIHByb3RlY3RlZCBkc2dTdGF0ZTogRHNnU3RhdGUgPSBEc2dTdGF0ZS5VbmluaXRpYWxpemVkO1xuXG4gIGNvbnN0cnVjdG9yKGtleVNoYXJlOiBCdWZmZXIsIHBhcnR5SWR4OiBudW1iZXIsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcsIG1lc3NhZ2VIYXNoOiBCdWZmZXIpIHtcbiAgICB0aGlzLnBhcnR5SWR4ID0gcGFydHlJZHg7XG4gICAgdGhpcy5rZXlTaGFyZUJ5dGVzID0ga2V5U2hhcmU7XG4gICAgdGhpcy5kZXJpdmF0aW9uUGF0aCA9IGRlcml2YXRpb25QYXRoO1xuICAgIHRoaXMubWVzc2FnZUhhc2ggPSBtZXNzYWdlSGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVTZXNzaW9uKCkge1xuICAgIGlmICghdGhpcy5kc2dTZXNzaW9uKSB7XG4gICAgICB0aGlzLmRzZ1Nlc3Npb24gPSBTaWduU2Vzc2lvbi5mcm9tQnl0ZXModGhpcy5kc2dTZXNzaW9uQnl0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Rlc2VyaWFsaXplU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmRzZ1Nlc3Npb24pIHtcbiAgICAgIHRocm93IEVycm9yKCdTZXNzaW9uIG5vdCBpbnRpYWxpemVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHJvdW5kID0gZGVjb2RlKHRoaXMuZHNnU2Vzc2lvbi50b0J5dGVzKCkpLnJvdW5kO1xuICAgIHN3aXRjaCAocm91bmQpIHtcbiAgICAgIGNhc2UgJ1dhaXRNc2cxJzpcbiAgICAgICAgdGhpcy5kc2dTdGF0ZSA9IERzZ1N0YXRlLlJvdW5kMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdXYWl0TXNnMic6XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Sb3VuZDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnV2FpdE1zZzMnOlxuICAgICAgICB0aGlzLmRzZ1N0YXRlID0gRHNnU3RhdGUuUm91bmQzO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VuZGVkJzpcbiAgICAgICAgdGhpcy5kc2dTdGF0ZSA9IERzZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5JbnZhbGlkU3RhdGU7XG4gICAgICAgIHRocm93IGBJbnZhbGlkIFN0YXRlOiAke3JvdW5kfWA7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdCgpOiBQcm9taXNlPERlc2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2U+IHtcbiAgICBpZiAodGhpcy5kc2dTdGF0ZSAhPT0gRHNnU3RhdGUuVW5pbml0aWFsaXplZCkge1xuICAgICAgdGhyb3cgJ0RTRyBzZXNzaW9uIGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IGluaXREa2xzID0gcmVxdWlyZSgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXdlYicpO1xuICAgICAgYXdhaXQgaW5pdERrbHMuZGVmYXVsdCgpO1xuICAgIH1cbiAgICBjb25zdCBrZXlTaGFyZSA9IEtleXNoYXJlLmZyb21CeXRlcyh0aGlzLmtleVNoYXJlQnl0ZXMpO1xuICAgIGlmIChrZXlTaGFyZS5wYXJ0eUlkICE9PSB0aGlzLnBhcnR5SWR4KSB7XG4gICAgICB0aHJvdyBFcnJvcihgUGFydHkgaW5kZXg6ICR7dGhpcy5wYXJ0eUlkeH0gZG9lcyBub3QgbWF0Y2gga2V5IHNoYXJlIHBhcnR5SWQ6ICR7a2V5U2hhcmUucGFydHlJZH0gYCk7XG4gICAgfVxuICAgIHRoaXMuZHNnU2Vzc2lvbiA9IG5ldyBTaWduU2Vzc2lvbihrZXlTaGFyZSwgdGhpcy5kZXJpdmF0aW9uUGF0aCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmRzZ1Nlc3Npb24uY3JlYXRlRmlyc3RNZXNzYWdlKCkucGF5bG9hZDtcbiAgICAgIHRoaXMuX2Rlc2VyaWFsaXplU3RhdGUoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgIGZyb206IHRoaXMucGFydHlJZHgsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGBFcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgZmlyc3QgbWVzc2FnZSBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH06ICR7ZX1gO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaWduYXR1cmUoKTogRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSB7XG4gICAgaWYgKCF0aGlzLl9zaWduYXR1cmUpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJlcXVlc3Qgc2lnbmF0dXJlLiBTaWduYXR1cmUgbm90IHByb2R1Y2VkIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmRzIHRoZSBEU0cgc2Vzc2lvbiBieSBmcmVlaW5nIGFueSBoZWFwIGFsbG9jYXRpb25zIGZyb20gd2FzbS4gTm90ZSB0aGF0IHRoZSBzZXNzaW9uIGlzIGZyZWVkIGlmIGEgc2lnbmF0dXJlIGlzIHByb2R1Y2VkLlxuICAgKi9cbiAgZW5kU2Vzc2lvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaWduYXR1cmUpIHtcbiAgICAgIG5ldyBFcnJvcignU2Vzc2lvbiBhbHJlYWR5IGVuZGVkIGJlY2F1c2UgY29tYmluZWQgc2lnbmF0dXJlIHdhcyBwcm9kdWNlZC4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHNnU2Vzc2lvbikge1xuICAgICAgdGhpcy5kc2dTZXNzaW9uLmZyZWUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Nlc3NlcyBpbmNvbWluZyBtZXNzYWdlcyB0byB0aGlzIHBhcnR5IGluIHRoZSBES0xzIERTRyBwcm90b2NvbCBhbmRcbiAgICogcHJvZHVjZXMgbWVzc2FnZXMgZnJvbSB0aGlzIHBhcnR5IHRvIG90aGVyIHBhcnRpZXMgZm9yIHRoZSBuZXh0IHJvdW5kLlxuICAgKiBAcGFyYW0gbWVzc2FnZXNGb3JJdGhSb3VuZCAtIG1lc3NhZ2VzIHRvIHByb2Nlc3MgdGhlIGN1cnJlbnQgcm91bmRcbiAgICogQHJldHVybnMge0Rlc2VyaWFsaXplZE1lc3NhZ2VzfSAtIG1lc3NhZ2VzIHRvIHNlbmQgdG8gb3RoZXIgcGFydGllcyBmb3IgdGhlIG5leHQgcm91bmRcbiAgICovXG4gIGhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZXNGb3JJdGhSb3VuZDogRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gICAgbGV0IG5leHRSb3VuZE1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcbiAgICBsZXQgbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXM6IERlc2VyaWFsaXplZE1lc3NhZ2VzID0geyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbXSB9O1xuICAgIHRoaXMuX3Jlc3RvcmVTZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLmRzZ1Nlc3Npb24pIHtcbiAgICAgIHRocm93IEVycm9yKCdTZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IERzZ1N0YXRlLlJvdW5kNCkge1xuICAgICAgICB0aGlzLmRzZ1N0YXRlID0gRHNnU3RhdGUuQ29tcGxldGU7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVSZXN1bHQgPSB0aGlzLmRzZ1Nlc3Npb24uY29tYmluZShcbiAgICAgICAgICBtZXNzYWdlc0Zvckl0aFJvdW5kLmJyb2FkY2FzdE1lc3NhZ2VzLm1hcCgobSkgPT4gbmV3IE1lc3NhZ2UobS5wYXlsb2FkLCBtLmZyb20sIHVuZGVmaW5lZCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHtcbiAgICAgICAgICBSOiBjb21iaW5lUmVzdWx0WzBdLFxuICAgICAgICAgIFM6IGNvbWJpbmVSZXN1bHRbMV0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSwgcDJwTWVzc2FnZXM6IFtdIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0Um91bmRNZXNzYWdlcyA9IHRoaXMuZHNnU2Vzc2lvbi5oYW5kbGVNZXNzYWdlcyhcbiAgICAgICAgICBtZXNzYWdlc0Zvckl0aFJvdW5kLmJyb2FkY2FzdE1lc3NhZ2VzXG4gICAgICAgICAgICAubWFwKChtKSA9PiBuZXcgTWVzc2FnZShtLnBheWxvYWQsIG0uZnJvbSwgdW5kZWZpbmVkKSlcbiAgICAgICAgICAgIC5jb25jYXQobWVzc2FnZXNGb3JJdGhSb3VuZC5wMnBNZXNzYWdlcy5tYXAoKG0pID0+IG5ldyBNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCBtLnRvKSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gRHNnU3RhdGUuUm91bmQzKSB7XG4gICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gW3RoaXMuZHNnU2Vzc2lvbi5sYXN0TWVzc2FnZSh0aGlzLm1lc3NhZ2VIYXNoKV07XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Sb3VuZDQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogbmV4dFJvdW5kTWVzc2FnZXNbMF0ucGF5bG9hZCxcbiAgICAgICAgICAgICAgZnJvbTogbmV4dFJvdW5kTWVzc2FnZXNbMF0uZnJvbV9pZCxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlUjogZGVjb2RlKHRoaXMuZHNnU2Vzc2lvbi50b0J5dGVzKCkpLnJvdW5kLldhaXRNc2c0LnIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIHJvdW5kIGRhdGEuXG4gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzID0ge1xuICAgICAgICBwMnBNZXNzYWdlczogbmV4dFJvdW5kTWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKChtKSA9PiBtLnRvX2lkICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgobSkgPT4ge1xuICAgICAgICAgICAgaWYgKG0udG9faWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBQMlAgbWVzc2FnZSwgbWlzc2luZyB0b19pZC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAycFJldHVybiA9IHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogbS5wYXlsb2FkLFxuICAgICAgICAgICAgICBmcm9tOiBtLmZyb21faWQsXG4gICAgICAgICAgICAgIHRvOiBtLnRvX2lkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMnBSZXR1cm47XG4gICAgICAgICAgfSksXG4gICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBuZXh0Um91bmRNZXNzYWdlc1xuICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0udG9faWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAubWFwKChtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBicm9hZGNhc3RSZXR1cm4gPSB7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IG0ucGF5bG9hZCxcbiAgICAgICAgICAgICAgZnJvbTogbS5mcm9tX2lkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBicm9hZGNhc3RSZXR1cm47XG4gICAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGBFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHJvdW5kICR7dGhpcy5kc2dTdGF0ZX06ICR7ZX1gO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuZXh0Um91bmRNZXNzYWdlcy5mb3JFYWNoKChtKSA9PiBtLmZyZWUoKSk7XG4gICAgICAvLyBTZXNzaW9uIGlzIGZyZWVkIHdoZW4gY29tYmluZSBpcyBjYWxsZWQuXG4gICAgICBpZiAodGhpcy5kc2dTdGF0ZSAhPT0gRHNnU3RhdGUuQ29tcGxldGUpIHtcbiAgICAgICAgdGhpcy5kc2dTZXNzaW9uQnl0ZXMgPSB0aGlzLmRzZ1Nlc3Npb24udG9CeXRlcygpO1xuICAgICAgICB0aGlzLmRzZ1Nlc3Npb24gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0Um91bmREZXNlcmlhbGl6ZWRNZXNzYWdlcztcbiAgfVxufVxuIl19
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lY2RzYS1ka2xzL2RzZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4RUFBd0Y7QUFDeEYsbUNBQWtIO0FBQ2xILG1DQUFnQztBQUVoQyxNQUFhLEdBQUc7SUFVZCxZQUFZLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxjQUFzQixFQUFFLFdBQW1CO1FBRmpGLGFBQVEsR0FBYSxnQkFBUSxDQUFDLGFBQWEsQ0FBQztRQUdwRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLCtCQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsTUFBTSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUN2QztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBTSxFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEQsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQkFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDaEMsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFRLENBQUMsTUFBTSxDQUFDO2dCQUNoQyxNQUFNO1lB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LENBQUMsT0FBTzt3QkFDbEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPO3FCQUNoQixDQUFDO29CQUNGLE9BQU8sZUFBZSxDQUFDO2dCQUN6QixDQUFDLENBQUM7YUFDTCxDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUMsRUFBRTtnQkFDdEQsTUFBTSxLQUFLLENBQ1Qsc0dBQXNHLENBQ3ZHLENBQUM7YUFDSDtZQUNELE1BQU0sS0FBSyxDQUFDLDRDQUE0QyxJQUFJLENBQUMsUUFBUSxXQUFXLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN4RztnQkFBUztZQUNSLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0MsMkNBQTJDO1lBQzNDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQzthQUM3QjtTQUNGO1FBQ0QsT0FBTyw2QkFBNkIsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFwTEQsa0JBb0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnblNlc3Npb24sIEtleXNoYXJlLCBNZXNzYWdlIH0gZnJvbSAnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLW5vZGUnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSwgRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSwgRGVzZXJpYWxpemVkTWVzc2FnZXMsIERzZ1N0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdjYm9yLXgnO1xuXG5leHBvcnQgY2xhc3MgRHNnIHtcbiAgcHJvdGVjdGVkIGRzZ1Nlc3Npb246IFNpZ25TZXNzaW9uIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgZHNnU2Vzc2lvbkJ5dGVzOiBVaW50OEFycmF5O1xuICBwcml2YXRlIF9zaWduYXR1cmU6IERlc2VyaWFsaXplZERrbHNTaWduYXR1cmUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBrZXlTaGFyZUJ5dGVzOiBCdWZmZXI7XG4gIHByb3RlY3RlZCBtZXNzYWdlSGFzaDogQnVmZmVyO1xuICBwcm90ZWN0ZWQgZGVyaXZhdGlvblBhdGg6IHN0cmluZztcbiAgcHJvdGVjdGVkIHBhcnR5SWR4OiBudW1iZXI7XG4gIHByb3RlY3RlZCBkc2dTdGF0ZTogRHNnU3RhdGUgPSBEc2dTdGF0ZS5VbmluaXRpYWxpemVkO1xuXG4gIGNvbnN0cnVjdG9yKGtleVNoYXJlOiBCdWZmZXIsIHBhcnR5SWR4OiBudW1iZXIsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcsIG1lc3NhZ2VIYXNoOiBCdWZmZXIpIHtcbiAgICB0aGlzLnBhcnR5SWR4ID0gcGFydHlJZHg7XG4gICAgdGhpcy5rZXlTaGFyZUJ5dGVzID0ga2V5U2hhcmU7XG4gICAgdGhpcy5kZXJpdmF0aW9uUGF0aCA9IGRlcml2YXRpb25QYXRoO1xuICAgIHRoaXMubWVzc2FnZUhhc2ggPSBtZXNzYWdlSGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVTZXNzaW9uKCkge1xuICAgIGlmICghdGhpcy5kc2dTZXNzaW9uKSB7XG4gICAgICB0aGlzLmRzZ1Nlc3Npb24gPSBTaWduU2Vzc2lvbi5mcm9tQnl0ZXModGhpcy5kc2dTZXNzaW9uQnl0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Rlc2VyaWFsaXplU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmRzZ1Nlc3Npb24pIHtcbiAgICAgIHRocm93IEVycm9yKCdTZXNzaW9uIG5vdCBpbnRpYWxpemVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHJvdW5kID0gZGVjb2RlKHRoaXMuZHNnU2Vzc2lvbi50b0J5dGVzKCkpLnJvdW5kO1xuICAgIHN3aXRjaCAocm91bmQpIHtcbiAgICAgIGNhc2UgJ1dhaXRNc2cxJzpcbiAgICAgICAgdGhpcy5kc2dTdGF0ZSA9IERzZ1N0YXRlLlJvdW5kMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdXYWl0TXNnMic6XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Sb3VuZDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnV2FpdE1zZzMnOlxuICAgICAgICB0aGlzLmRzZ1N0YXRlID0gRHNnU3RhdGUuUm91bmQzO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VuZGVkJzpcbiAgICAgICAgdGhpcy5kc2dTdGF0ZSA9IERzZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5JbnZhbGlkU3RhdGU7XG4gICAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIFN0YXRlOiAke3JvdW5kfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXQoKTogUHJvbWlzZTxEZXNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlPiB7XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgIT09IERzZ1N0YXRlLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBhbHJlYWR5IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgaW5pdERrbHMgPSByZXF1aXJlKCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtd2ViJyk7XG4gICAgICBhd2FpdCBpbml0RGtscy5kZWZhdWx0KCk7XG4gICAgfVxuICAgIGNvbnN0IGtleVNoYXJlID0gS2V5c2hhcmUuZnJvbUJ5dGVzKHRoaXMua2V5U2hhcmVCeXRlcyk7XG4gICAgaWYgKGtleVNoYXJlLnBhcnR5SWQgIT09IHRoaXMucGFydHlJZHgpIHtcbiAgICAgIHRocm93IEVycm9yKGBQYXJ0eSBpbmRleDogJHt0aGlzLnBhcnR5SWR4fSBkb2VzIG5vdCBtYXRjaCBrZXkgc2hhcmUgcGFydHlJZDogJHtrZXlTaGFyZS5wYXJ0eUlkfSBgKTtcbiAgICB9XG4gICAgdGhpcy5kc2dTZXNzaW9uID0gbmV3IFNpZ25TZXNzaW9uKGtleVNoYXJlLCB0aGlzLmRlcml2YXRpb25QYXRoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuZHNnU2Vzc2lvbi5jcmVhdGVGaXJzdE1lc3NhZ2UoKS5wYXlsb2FkO1xuICAgICAgdGhpcy5fZGVzZXJpYWxpemVTdGF0ZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgZnJvbTogdGhpcy5wYXJ0eUlkeCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBmaXJzdCBtZXNzYWdlIGZyb20gcGFydHkgJHt0aGlzLnBhcnR5SWR4fTogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaWduYXR1cmUoKTogRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSB7XG4gICAgaWYgKCF0aGlzLl9zaWduYXR1cmUpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJlcXVlc3Qgc2lnbmF0dXJlLiBTaWduYXR1cmUgbm90IHByb2R1Y2VkIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmRzIHRoZSBEU0cgc2Vzc2lvbiBieSBmcmVlaW5nIGFueSBoZWFwIGFsbG9jYXRpb25zIGZyb20gd2FzbS4gTm90ZSB0aGF0IHRoZSBzZXNzaW9uIGlzIGZyZWVkIGlmIGEgc2lnbmF0dXJlIGlzIHByb2R1Y2VkLlxuICAgKi9cbiAgZW5kU2Vzc2lvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaWduYXR1cmUpIHtcbiAgICAgIG5ldyBFcnJvcignU2Vzc2lvbiBhbHJlYWR5IGVuZGVkIGJlY2F1c2UgY29tYmluZWQgc2lnbmF0dXJlIHdhcyBwcm9kdWNlZC4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHNnU2Vzc2lvbikge1xuICAgICAgdGhpcy5kc2dTZXNzaW9uLmZyZWUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Nlc3NlcyBpbmNvbWluZyBtZXNzYWdlcyB0byB0aGlzIHBhcnR5IGluIHRoZSBES0xzIERTRyBwcm90b2NvbCBhbmRcbiAgICogcHJvZHVjZXMgbWVzc2FnZXMgZnJvbSB0aGlzIHBhcnR5IHRvIG90aGVyIHBhcnRpZXMgZm9yIHRoZSBuZXh0IHJvdW5kLlxuICAgKiBAcGFyYW0gbWVzc2FnZXNGb3JJdGhSb3VuZCAtIG1lc3NhZ2VzIHRvIHByb2Nlc3MgdGhlIGN1cnJlbnQgcm91bmRcbiAgICogQHJldHVybnMge0Rlc2VyaWFsaXplZE1lc3NhZ2VzfSAtIG1lc3NhZ2VzIHRvIHNlbmQgdG8gb3RoZXIgcGFydGllcyBmb3IgdGhlIG5leHQgcm91bmRcbiAgICovXG4gIGhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZXNGb3JJdGhSb3VuZDogRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gICAgbGV0IG5leHRSb3VuZE1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcbiAgICBsZXQgbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXM6IERlc2VyaWFsaXplZE1lc3NhZ2VzID0geyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbXSB9O1xuICAgIHRoaXMuX3Jlc3RvcmVTZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLmRzZ1Nlc3Npb24pIHtcbiAgICAgIHRocm93IEVycm9yKCdTZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IERzZ1N0YXRlLlJvdW5kNCkge1xuICAgICAgICB0aGlzLmRzZ1N0YXRlID0gRHNnU3RhdGUuQ29tcGxldGU7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVSZXN1bHQgPSB0aGlzLmRzZ1Nlc3Npb24uY29tYmluZShcbiAgICAgICAgICBtZXNzYWdlc0Zvckl0aFJvdW5kLmJyb2FkY2FzdE1lc3NhZ2VzLm1hcCgobSkgPT4gbmV3IE1lc3NhZ2UobS5wYXlsb2FkLCBtLmZyb20sIHVuZGVmaW5lZCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHtcbiAgICAgICAgICBSOiBjb21iaW5lUmVzdWx0WzBdLFxuICAgICAgICAgIFM6IGNvbWJpbmVSZXN1bHRbMV0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSwgcDJwTWVzc2FnZXM6IFtdIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0Um91bmRNZXNzYWdlcyA9IHRoaXMuZHNnU2Vzc2lvbi5oYW5kbGVNZXNzYWdlcyhcbiAgICAgICAgICBtZXNzYWdlc0Zvckl0aFJvdW5kLmJyb2FkY2FzdE1lc3NhZ2VzXG4gICAgICAgICAgICAubWFwKChtKSA9PiBuZXcgTWVzc2FnZShtLnBheWxvYWQsIG0uZnJvbSwgdW5kZWZpbmVkKSlcbiAgICAgICAgICAgIC5jb25jYXQobWVzc2FnZXNGb3JJdGhSb3VuZC5wMnBNZXNzYWdlcy5tYXAoKG0pID0+IG5ldyBNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCBtLnRvKSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gRHNnU3RhdGUuUm91bmQzKSB7XG4gICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gW3RoaXMuZHNnU2Vzc2lvbi5sYXN0TWVzc2FnZSh0aGlzLm1lc3NhZ2VIYXNoKV07XG4gICAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Sb3VuZDQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogbmV4dFJvdW5kTWVzc2FnZXNbMF0ucGF5bG9hZCxcbiAgICAgICAgICAgICAgZnJvbTogbmV4dFJvdW5kTWVzc2FnZXNbMF0uZnJvbV9pZCxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlUjogZGVjb2RlKHRoaXMuZHNnU2Vzc2lvbi50b0J5dGVzKCkpLnJvdW5kLldhaXRNc2c0LnIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIHJvdW5kIGRhdGEuXG4gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzID0ge1xuICAgICAgICBwMnBNZXNzYWdlczogbmV4dFJvdW5kTWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKChtKSA9PiBtLnRvX2lkICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgobSkgPT4ge1xuICAgICAgICAgICAgaWYgKG0udG9faWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBQMlAgbWVzc2FnZSwgbWlzc2luZyB0b19pZC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAycFJldHVybiA9IHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogbS5wYXlsb2FkLFxuICAgICAgICAgICAgICBmcm9tOiBtLmZyb21faWQsXG4gICAgICAgICAgICAgIHRvOiBtLnRvX2lkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMnBSZXR1cm47XG4gICAgICAgICAgfSksXG4gICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBuZXh0Um91bmRNZXNzYWdlc1xuICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0udG9faWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAubWFwKChtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBicm9hZGNhc3RSZXR1cm4gPSB7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IG0ucGF5bG9hZCxcbiAgICAgICAgICAgICAgZnJvbTogbS5mcm9tX2lkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBicm9hZGNhc3RSZXR1cm47XG4gICAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnQWJvcnQgdGhlIHByb3RvY29sIGFuZCBiYW4nKSkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnU2lnbmluZyBhYm9ydGVkLiBQbGVhc2Ugc3RvcCBhbGwgdHJhbnNhY3Rpb24gc2lnbmluZyBmcm9tIHRoaXMgd2FsbGV0IGFuZCBjb250YWN0IHN1cHBvcnRAYml0Z28uY29tLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHJvdW5kICR7dGhpcy5kc2dTdGF0ZX06ICR7ZX1gKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbmV4dFJvdW5kTWVzc2FnZXMuZm9yRWFjaCgobSkgPT4gbS5mcmVlKCkpO1xuICAgICAgLy8gU2Vzc2lvbiBpcyBmcmVlZCB3aGVuIGNvbWJpbmUgaXMgY2FsbGVkLlxuICAgICAgaWYgKHRoaXMuZHNnU3RhdGUgIT09IERzZ1N0YXRlLkNvbXBsZXRlKSB7XG4gICAgICAgIHRoaXMuZHNnU2Vzc2lvbkJ5dGVzID0gdGhpcy5kc2dTZXNzaW9uLnRvQnl0ZXMoKTtcbiAgICAgICAgdGhpcy5kc2dTZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXM7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ import * as t from 'io-ts';
2
3
  import { XShare } from '../ecdsa/types';
3
4
  interface BroadcastMessage<T> {
4
5
  payload: T;
@@ -48,8 +49,16 @@ export declare type DklsSignature<T> = {
48
49
  export declare type RetrofitData = {
49
50
  bigSiList: string[];
50
51
  xShare: Partial<XShare>;
51
- xiList?: string[];
52
+ xiList?: number[][];
52
53
  };
54
+ export declare const ReducedKeyShareType: t.TypeC<{
55
+ bigSList: t.ArrayC<t.ArrayC<t.NumberC>>;
56
+ xList: t.ArrayC<t.ArrayC<t.NumberC>>;
57
+ rootChainCode: t.ArrayC<t.NumberC>;
58
+ prv: t.ArrayC<t.NumberC>;
59
+ pub: t.ArrayC<t.NumberC>;
60
+ }>;
61
+ export declare type ReducedKeyShare = t.TypeOf<typeof ReducedKeyShareType>;
53
62
  export declare type SerializedBroadcastMessage = BroadcastMessage<string>;
54
63
  export declare type DeserializedBroadcastMessage = BroadcastMessage<Uint8Array>;
55
64
  export declare type SerializedP2PMessage = P2PMessage<string, string>;
@@ -103,8 +112,9 @@ export declare function serializeBroadcastMessage(message: DeserializedBroadcast
103
112
  /**
104
113
  * Gets commonkeyChain from DKLS keyShare
105
114
  * @param {Buffer} keyShare - DKLS keyShare
106
- * @returns {string} commonKeychain
115
+ * @returns {string} commonKeychain in hex format
107
116
  */
108
117
  export declare function getCommonKeychain(keyShare: Buffer): string;
118
+ export declare function getDecodedReducedKeyShare(reducedKeyShare: Buffer | Uint8Array): ReducedKeyShare;
109
119
  export {};
110
120
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/types.ts"],"names":[],"mappings":"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"}