@midnight-ntwrk/wallet-sdk-hd 1.0.0 → 3.0.0-beta.6

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.
@@ -41,4 +41,3 @@ export declare class RoleKey {
41
41
  deriveKeyAt(index: number): DerivationResult;
42
42
  }
43
43
  export {};
44
- //# sourceMappingURL=HDWallet.d.ts.map
@@ -1,8 +1,5 @@
1
1
  import { HDKey } from '@scure/bip32';
2
- import * as bip39 from '@scure/bip39';
3
- import { wordlist } from '@scure/bip39/wordlists/english';
4
-
5
- const Roles = {
2
+ export const Roles = {
6
3
  NightExternal: 0,
7
4
  NightInternal: 1,
8
5
  Dust: 2,
@@ -11,7 +8,7 @@ const Roles = {
11
8
  };
12
9
  const PURPOSE = 44;
13
10
  const COIN_TYPE = 2400;
14
- class HDWallet {
11
+ export class HDWallet {
15
12
  rootKey;
16
13
  constructor(key) {
17
14
  this.rootKey = key;
@@ -30,26 +27,26 @@ class HDWallet {
30
27
  return new AccountKey(this.rootKey, account);
31
28
  }
32
29
  }
33
- class AccountKey {
30
+ export class AccountKey {
34
31
  rootKey;
35
32
  account;
36
33
  constructor(rootKey, account) {
37
- this.rootKey = rootKey;
38
34
  this.account = account;
35
+ this.rootKey = rootKey;
39
36
  }
40
37
  // After account, select a role.
41
38
  selectRole(role) {
42
39
  return new RoleKey(this.rootKey, this.account, role);
43
40
  }
44
41
  }
45
- class RoleKey {
42
+ export class RoleKey {
46
43
  rootKey;
47
44
  account;
48
45
  role;
49
46
  constructor(rootKey, account, role) {
50
- this.rootKey = rootKey;
51
- this.account = account;
52
47
  this.role = role;
48
+ this.account = account;
49
+ this.rootKey = rootKey;
53
50
  }
54
51
  // Finally, derive the key at the given index.
55
52
  deriveKeyAt(index) {
@@ -58,16 +55,3 @@ class RoleKey {
58
55
  return derivedKey.privateKey ? { type: 'keyDerived', key: derivedKey.privateKey } : { type: 'keyOutOfBounds' };
59
56
  }
60
57
  }
61
-
62
- const mnemonicToWords = (mnemonic) => mnemonic.split(' ');
63
- /** A wrapper around the bip39 package function, with default strength applied to produce 24 words */
64
- const generateMnemonicWords = (strength = 256) => mnemonicToWords(bip39.generateMnemonic(wordlist, strength));
65
- const joinMnemonicWords = (mnenomic) => mnenomic.join(' ');
66
- const generateRandomSeed = (strength = 256) => {
67
- return crypto.getRandomValues(new Uint8Array(Math.ceil(strength / 8)));
68
- };
69
- /** A wrapper around the bip39 package function */
70
- const validateMnemonic = (mnemonic) => bip39.validateMnemonic(mnemonic, wordlist);
71
-
72
- export { AccountKey, HDWallet, RoleKey, Roles, generateMnemonicWords, generateRandomSeed, joinMnemonicWords, mnemonicToWords, validateMnemonic };
73
- //# sourceMappingURL=index.mjs.map
@@ -5,4 +5,3 @@ export declare const joinMnemonicWords: (mnenomic: string[]) => string;
5
5
  export declare const generateRandomSeed: (strength?: number) => Uint8Array;
6
6
  /** A wrapper around the bip39 package function */
7
7
  export declare const validateMnemonic: (mnemonic: string) => boolean;
8
- //# sourceMappingURL=MnemonicUtils.d.ts.map
@@ -0,0 +1,11 @@
1
+ import * as bip39 from '@scure/bip39';
2
+ import { wordlist as english } from '@scure/bip39/wordlists/english';
3
+ export const mnemonicToWords = (mnemonic) => mnemonic.split(' ');
4
+ /** A wrapper around the bip39 package function, with default strength applied to produce 24 words */
5
+ export const generateMnemonicWords = (strength = 256) => mnemonicToWords(bip39.generateMnemonic(english, strength));
6
+ export const joinMnemonicWords = (mnenomic) => mnenomic.join(' ');
7
+ export const generateRandomSeed = (strength = 256) => {
8
+ return crypto.getRandomValues(new Uint8Array(Math.ceil(strength / 8)));
9
+ };
10
+ /** A wrapper around the bip39 package function */
11
+ export const validateMnemonic = (mnemonic) => bip39.validateMnemonic(mnemonic, english);
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export * from './HDWallet';
2
- export * from './MnemonicUtils';
3
- //# sourceMappingURL=index.d.ts.map
1
+ export * from './HDWallet.js';
2
+ export * from './MnemonicUtils.js';
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './HDWallet.js';
2
+ export * from './MnemonicUtils.js';
package/package.json CHANGED
@@ -1,27 +1,26 @@
1
1
  {
2
2
  "name": "@midnight-ntwrk/wallet-sdk-hd",
3
- "version": "1.0.0",
3
+ "version": "3.0.0-beta.6",
4
4
  "type": "module",
5
- "main": "./dist/index.cjs",
6
- "module": "./dist/index.mjs",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "author": "IOHK",
9
9
  "license": "Apache-2.0",
10
10
  "publishConfig": {
11
11
  "registry": "https://npm.pkg.github.com/"
12
12
  },
13
- "repository": {
14
- "type": "git",
15
- "url": "https://github.com/midnight-ntwrk/artifacts.git"
16
- },
17
13
  "files": [
18
14
  "dist/"
19
15
  ],
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/midnight-ntwrk/artifacts.git"
19
+ },
20
20
  "exports": {
21
21
  ".": {
22
- "import": "./dist/index.mjs",
23
- "require": "./dist/index.cjs",
24
- "types": "./dist/index.d.ts"
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
25
24
  }
26
25
  },
27
26
  "dependencies": {
@@ -31,12 +30,21 @@
31
30
  },
32
31
  "devDependencies": {
33
32
  "@ethereumjs/wallet": "^3.0.0-alpha.1",
34
- "fast-check": "^3.23.2"
33
+ "eslint": "^9.37.0",
34
+ "fast-check": "^4.2.0",
35
+ "publint": "~0.3.14",
36
+ "rimraf": "^6.0.1",
37
+ "typescript": "^5.9.3",
38
+ "vitest": "^3.2.4"
35
39
  },
36
40
  "scripts": {
37
41
  "typecheck": "tsc -b ./tsconfig.json --noEmit",
38
- "test": "NODE_OPTIONS='--experimental-vm-modules' jest",
39
- "lint": "eslint",
40
- "dist": "rollup -c ./rollup.config.mjs"
42
+ "test": "vitest run",
43
+ "lint": "eslint --max-warnings 0",
44
+ "format": "prettier --write \"**/*.{ts,js,json,yaml,yml}\"",
45
+ "dist": "tsc -b ./tsconfig.build.json",
46
+ "dist:publish": "tsc -b ./tsconfig.publish.json",
47
+ "clean": "rimraf --glob dist 'tsconfig.*.tsbuildinfo' && date +%s > .clean-timestamp",
48
+ "publint": "publint --strict"
41
49
  }
42
- }
50
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"HDWallet.d.ts","sourceRoot":"","sources":["../src/HDWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE7B,eAAO,MAAM,KAAK;;;;;;CAMR,CAAC;AAEX,MAAM,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;AAEzC,KAAK,gBAAgB,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAC7F,KAAK,cAAc,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAKrG,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAEhC,OAAO;IAIP,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc;IAU1C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;CAGlD;AAED,qBAAa,UAAU;IAEnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;gBADP,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,MAAM;IAIlB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;CAGvC;AAED,qBAAa,OAAO;IAEhB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;gBAFJ,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI;IAIb,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB;CAKpD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MnemonicUtils.d.ts","sourceRoot":"","sources":["../src/MnemonicUtils.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EAA8C,CAAC;AAEzG,qGAAqG;AACrG,eAAO,MAAM,qBAAqB,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,EACL,CAAC;AAE7D,eAAO,MAAM,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,MAAmD,CAAC;AAE5G,eAAO,MAAM,kBAAkB,GAAI,iBAAc,KAAG,UAEnD,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,OAAoD,CAAC"}
package/dist/index.cjs DELETED
@@ -1,102 +0,0 @@
1
- 'use strict';
2
-
3
- var bip32 = require('@scure/bip32');
4
- var bip39 = require('@scure/bip39');
5
- var english = require('@scure/bip39/wordlists/english');
6
-
7
- function _interopNamespaceDefault(e) {
8
- var n = Object.create(null);
9
- if (e) {
10
- Object.keys(e).forEach(function (k) {
11
- if (k !== 'default') {
12
- var d = Object.getOwnPropertyDescriptor(e, k);
13
- Object.defineProperty(n, k, d.get ? d : {
14
- enumerable: true,
15
- get: function () { return e[k]; }
16
- });
17
- }
18
- });
19
- }
20
- n.default = e;
21
- return Object.freeze(n);
22
- }
23
-
24
- var bip39__namespace = /*#__PURE__*/_interopNamespaceDefault(bip39);
25
-
26
- const Roles = {
27
- NightExternal: 0,
28
- NightInternal: 1,
29
- Dust: 2,
30
- Zswap: 3,
31
- Metadata: 4,
32
- };
33
- const PURPOSE = 44;
34
- const COIN_TYPE = 2400;
35
- class HDWallet {
36
- rootKey;
37
- constructor(key) {
38
- this.rootKey = key;
39
- }
40
- static fromSeed(seed) {
41
- try {
42
- const rootKey = bip32.HDKey.fromMasterSeed(seed);
43
- return { type: 'seedOk', hdWallet: new HDWallet(rootKey) };
44
- }
45
- catch (e) {
46
- return { type: 'seedError', error: e };
47
- }
48
- }
49
- // Begin by selecting an account.
50
- selectAccount(account) {
51
- return new AccountKey(this.rootKey, account);
52
- }
53
- }
54
- class AccountKey {
55
- rootKey;
56
- account;
57
- constructor(rootKey, account) {
58
- this.rootKey = rootKey;
59
- this.account = account;
60
- }
61
- // After account, select a role.
62
- selectRole(role) {
63
- return new RoleKey(this.rootKey, this.account, role);
64
- }
65
- }
66
- class RoleKey {
67
- rootKey;
68
- account;
69
- role;
70
- constructor(rootKey, account, role) {
71
- this.rootKey = rootKey;
72
- this.account = account;
73
- this.role = role;
74
- }
75
- // Finally, derive the key at the given index.
76
- deriveKeyAt(index) {
77
- const path = `m/${PURPOSE}'/${COIN_TYPE}'/${this.account}'/${this.role}/${index}`;
78
- const derivedKey = this.rootKey.derive(path);
79
- return derivedKey.privateKey ? { type: 'keyDerived', key: derivedKey.privateKey } : { type: 'keyOutOfBounds' };
80
- }
81
- }
82
-
83
- const mnemonicToWords = (mnemonic) => mnemonic.split(' ');
84
- /** A wrapper around the bip39 package function, with default strength applied to produce 24 words */
85
- const generateMnemonicWords = (strength = 256) => mnemonicToWords(bip39__namespace.generateMnemonic(english.wordlist, strength));
86
- const joinMnemonicWords = (mnenomic) => mnenomic.join(' ');
87
- const generateRandomSeed = (strength = 256) => {
88
- return crypto.getRandomValues(new Uint8Array(Math.ceil(strength / 8)));
89
- };
90
- /** A wrapper around the bip39 package function */
91
- const validateMnemonic = (mnemonic) => bip39__namespace.validateMnemonic(mnemonic, english.wordlist);
92
-
93
- exports.AccountKey = AccountKey;
94
- exports.HDWallet = HDWallet;
95
- exports.RoleKey = RoleKey;
96
- exports.Roles = Roles;
97
- exports.generateMnemonicWords = generateMnemonicWords;
98
- exports.generateRandomSeed = generateRandomSeed;
99
- exports.joinMnemonicWords = joinMnemonicWords;
100
- exports.mnemonicToWords = mnemonicToWords;
101
- exports.validateMnemonic = validateMnemonic;
102
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/HDWallet.ts","../src/MnemonicUtils.ts"],"sourcesContent":[null,null],"names":["HDKey","bip39","english"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIa,MAAA,KAAK,GAAG;AACnB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,QAAQ,EAAE,CAAC;;AAQb,MAAM,OAAO,GAAG,EAAE;AAClB,MAAM,SAAS,GAAG,IAAI;MAET,QAAQ,CAAA;AACF,IAAA,OAAO;AAExB,IAAA,WAAA,CAAoB,GAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;;IAGpB,OAAO,QAAQ,CAAC,IAAgB,EAAA;AAC9B,QAAA,IAAI;YACF,MAAM,OAAO,GAAGA,WAAK,CAAC,cAAc,CAAC,IAAI,CAAC;AAC1C,YAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;;QAC1D,OAAO,CAAU,EAAE;YACnB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE;;;;AAKnC,IAAA,aAAa,CAAC,OAAe,EAAA;QAClC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;;AAE/C;MAEY,UAAU,CAAA;AAEX,IAAA,OAAA;AACA,IAAA,OAAA;IAFV,WACU,CAAA,OAAc,EACd,OAAe,EAAA;QADf,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAO,CAAA,OAAA,GAAP,OAAO;;;AAIV,IAAA,UAAU,CAAC,IAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;;AAEvD;MAEY,OAAO,CAAA;AAER,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,IAAA;AAHV,IAAA,WAAA,CACU,OAAc,EACd,OAAe,EACf,IAAU,EAAA;QAFV,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAI,CAAA,IAAA,GAAJ,IAAI;;;AAIP,IAAA,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,EAAA,EAAK,SAAS,CAAK,EAAA,EAAA,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,CAAI,CAAA,EAAA,KAAK,EAAE;QACjF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5C,OAAO,UAAU,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE;;AAEjH;;AChEM,MAAM,eAAe,GAAmC,CAAC,QAAgB,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG;AAEvG;MACa,qBAAqB,GAAoC,CAAC,QAAQ,GAAG,GAAG,KACnF,eAAe,CAACC,gBAAK,CAAC,gBAAgB,CAACC,gBAAO,EAAE,QAAQ,CAAC;AAEpD,MAAM,iBAAiB,GAAmC,CAAC,QAAkB,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG;MAE7F,kBAAkB,GAAG,CAAC,QAAQ,GAAG,GAAG,KAAgB;AAC/D,IAAA,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE;AAEA;AACa,MAAA,gBAAgB,GAAG,CAAC,QAAgB,KAAcD,gBAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAEC,gBAAO;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/HDWallet.ts","../src/MnemonicUtils.ts"],"sourcesContent":[null,null],"names":["english"],"mappings":";;;;AAIa,MAAA,KAAK,GAAG;AACnB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,QAAQ,EAAE,CAAC;;AAQb,MAAM,OAAO,GAAG,EAAE;AAClB,MAAM,SAAS,GAAG,IAAI;MAET,QAAQ,CAAA;AACF,IAAA,OAAO;AAExB,IAAA,WAAA,CAAoB,GAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;;IAGpB,OAAO,QAAQ,CAAC,IAAgB,EAAA;AAC9B,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;AAC1C,YAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;;QAC1D,OAAO,CAAU,EAAE;YACnB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE;;;;AAKnC,IAAA,aAAa,CAAC,OAAe,EAAA;QAClC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;;AAE/C;MAEY,UAAU,CAAA;AAEX,IAAA,OAAA;AACA,IAAA,OAAA;IAFV,WACU,CAAA,OAAc,EACd,OAAe,EAAA;QADf,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAO,CAAA,OAAA,GAAP,OAAO;;;AAIV,IAAA,UAAU,CAAC,IAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;;AAEvD;MAEY,OAAO,CAAA;AAER,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,IAAA;AAHV,IAAA,WAAA,CACU,OAAc,EACd,OAAe,EACf,IAAU,EAAA;QAFV,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAI,CAAA,IAAA,GAAJ,IAAI;;;AAIP,IAAA,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,EAAA,EAAK,SAAS,CAAK,EAAA,EAAA,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,CAAI,CAAA,EAAA,KAAK,EAAE;QACjF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5C,OAAO,UAAU,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE;;AAEjH;;AChEM,MAAM,eAAe,GAAmC,CAAC,QAAgB,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG;AAEvG;MACa,qBAAqB,GAAoC,CAAC,QAAQ,GAAG,GAAG,KACnF,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAACA,QAAO,EAAE,QAAQ,CAAC;AAEpD,MAAM,iBAAiB,GAAmC,CAAC,QAAkB,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG;MAE7F,kBAAkB,GAAG,CAAC,QAAQ,GAAG,GAAG,KAAgB;AAC/D,IAAA,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE;AAEA;AACa,MAAA,gBAAgB,GAAG,CAAC,QAAgB,KAAc,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAEA,QAAO;;;;"}