forgex-cli 1.0.58 → 1.0.61
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/README.md +375 -368
- package/dist/bin/forgex.d.ts +5 -5
- package/dist/bin/forgex.js +14 -14
- package/dist/bin/forgex.js.map +1 -1
- package/dist/src/adapters/codex-adapter.d.ts +90 -90
- package/dist/src/adapters/codex-adapter.d.ts.map +1 -1
- package/dist/src/adapters/codex-adapter.js +76 -76
- package/dist/src/adapters/codex-adapter.js.map +1 -1
- package/dist/src/adapters/connection.d.ts +6 -6
- package/dist/src/adapters/connection.js +8 -8
- package/dist/src/adapters/connection.js.map +1 -1
- package/dist/src/adapters/ipfs.d.ts +3 -3
- package/dist/src/adapters/ipfs.js +3 -3
- package/dist/src/adapters/jito-adapter.d.ts +85 -85
- package/dist/src/adapters/jito-adapter.d.ts.map +1 -1
- package/dist/src/adapters/jito-adapter.js +111 -111
- package/dist/src/adapters/jito-adapter.js.map +1 -1
- package/dist/src/adapters/rpc-adapter.d.ts +53 -53
- package/dist/src/adapters/rpc-adapter.d.ts.map +1 -1
- package/dist/src/adapters/rpc-adapter.js +69 -69
- package/dist/src/adapters/rpc-adapter.js.map +1 -1
- package/dist/src/adapters/sdk-adapter.d.ts +21 -21
- package/dist/src/adapters/sdk-adapter.d.ts.map +1 -1
- package/dist/src/adapters/sdk-adapter.js +79 -79
- package/dist/src/adapters/sdk-adapter.js.map +1 -1
- package/dist/src/commands/config/index.d.ts +1 -1
- package/dist/src/commands/config/index.js +15 -15
- package/dist/src/commands/config/index.js.map +1 -1
- package/dist/src/commands/query/index.d.ts +2 -2
- package/dist/src/commands/query/index.js +82 -82
- package/dist/src/commands/query/index.js.map +1 -1
- package/dist/src/commands/token/index.d.ts +8 -8
- package/dist/src/commands/token/index.js +73 -73
- package/dist/src/commands/token/index.js.map +1 -1
- package/dist/src/commands/tools/index.d.ts +9 -9
- package/dist/src/commands/tools/index.js +137 -137
- package/dist/src/commands/tools/index.js.map +1 -1
- package/dist/src/commands/trade/index.d.ts +2 -2
- package/dist/src/commands/trade/index.js +82 -82
- package/dist/src/commands/trade/index.js.map +1 -1
- package/dist/src/commands/transfer/index.d.ts +8 -8
- package/dist/src/commands/transfer/index.js +106 -106
- package/dist/src/commands/transfer/index.js.map +1 -1
- package/dist/src/commands/wallet/index.d.ts +1 -1
- package/dist/src/commands/wallet/index.js +175 -175
- package/dist/src/commands/wallet/index.js.map +1 -1
- package/dist/src/config.d.ts +26 -26
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +28 -28
- package/dist/src/config.js.map +1 -1
- package/dist/src/const/index.js +1 -1
- package/dist/src/const/index.js.map +1 -1
- package/dist/src/data-source.d.ts +81 -81
- package/dist/src/data-source.d.ts.map +1 -1
- package/dist/src/data-source.js +149 -149
- package/dist/src/data-source.js.map +1 -1
- package/dist/src/data-store/index.d.ts +22 -22
- package/dist/src/data-store/index.d.ts.map +1 -1
- package/dist/src/data-store/index.js +46 -46
- package/dist/src/data-store/index.js.map +1 -1
- package/dist/src/data-store/types.d.ts +3 -3
- package/dist/src/data-store/types.js +3 -3
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js +10 -10
- package/dist/src/index.js.map +1 -1
- package/dist/src/output.d.ts +18 -18
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +34 -34
- package/dist/src/output.js.map +1 -1
- package/dist/src/shims/store.d.ts +3 -2
- package/dist/src/shims/store.d.ts.map +1 -1
- package/dist/src/shims/store.js +6 -5
- package/dist/src/shims/store.js.map +1 -1
- package/dist/src/sol-sdk/batch/create.d.ts +4 -1
- package/dist/src/sol-sdk/batch/create.d.ts.map +1 -1
- package/dist/src/sol-sdk/batch/create.js +44 -44
- package/dist/src/sol-sdk/batch/create.js.map +1 -1
- package/dist/src/sol-sdk/batch/index.js +135 -135
- package/dist/src/sol-sdk/batch/index.js.map +1 -1
- package/dist/src/sol-sdk/calc.d.ts +63 -63
- package/dist/src/sol-sdk/calc.d.ts.map +1 -1
- package/dist/src/sol-sdk/calc.js +120 -120
- package/dist/src/sol-sdk/calc.js.map +1 -1
- package/dist/src/sol-sdk/jito/index.js +12 -12
- package/dist/src/sol-sdk/jito/index.js.map +1 -1
- package/dist/src/sol-sdk/launchlab/instructions/create.js +10 -10
- package/dist/src/sol-sdk/launchlab/instructions/create.js.map +1 -1
- package/dist/src/sol-sdk/meteora/index.d.ts +5 -5
- package/dist/src/sol-sdk/meteora/index.js +11 -11
- package/dist/src/sol-sdk/meteora/index.js.map +1 -1
- package/dist/src/sol-sdk/meteora/instructions/buy.js +8 -8
- package/dist/src/sol-sdk/meteora/instructions/buy.js.map +1 -1
- package/dist/src/sol-sdk/meteora/instructions/sell.js +6 -6
- package/dist/src/sol-sdk/meteora/instructions/sell.js.map +1 -1
- package/dist/src/sol-sdk/pump/index.js +3 -3
- package/dist/src/sol-sdk/pump/index.js.map +1 -1
- package/dist/src/sol-sdk/pump/instructions/buy.d.ts +12 -12
- package/dist/src/sol-sdk/pump/instructions/buy.d.ts.map +1 -1
- package/dist/src/sol-sdk/pump/instructions/buy.js +26 -26
- package/dist/src/sol-sdk/pump/instructions/buy.js.map +1 -1
- package/dist/src/sol-sdk/pump/instructions/createAndBuy.d.ts +13 -13
- package/dist/src/sol-sdk/pump/instructions/createAndBuy.js +17 -17
- package/dist/src/sol-sdk/pump/instructions/createAndBuy.js.map +1 -1
- package/dist/src/sol-sdk/pump/instructions/sell.d.ts +2 -2
- package/dist/src/sol-sdk/pump/instructions/sell.d.ts.map +1 -1
- package/dist/src/sol-sdk/pump/instructions/sell.js +7 -7
- package/dist/src/sol-sdk/pump/instructions/sell.js.map +1 -1
- package/dist/src/sol-sdk/pumpswap/index.d.ts +4 -4
- package/dist/src/sol-sdk/pumpswap/index.js +5 -5
- package/dist/src/sol-sdk/pumpswap/index.js.map +1 -1
- package/dist/src/sol-sdk/pumpswap/instructions/buy.d.ts +8 -8
- package/dist/src/sol-sdk/pumpswap/instructions/buy.js +19 -19
- package/dist/src/sol-sdk/pumpswap/instructions/buy.js.map +1 -1
- package/dist/src/sol-sdk/pumpswap/instructions/migrate.js +2 -2
- package/dist/src/sol-sdk/pumpswap/instructions/migrate.js.map +1 -1
- package/dist/src/sol-sdk/pumpswap/instructions/sell.js +4 -4
- package/dist/src/sol-sdk/pumpswap/instructions/sell.js.map +1 -1
- package/dist/src/sol-sdk/pumpswap/rpc/index.js +1 -1
- package/dist/src/sol-sdk/pumpswap/rpc/index.js.map +1 -1
- package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js +3 -3
- package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js.map +1 -1
- package/dist/src/sol-sdk/raydium/instructions/sell.d.ts +40 -8520
- package/dist/src/sol-sdk/raydium/instructions/sell.d.ts.map +1 -1
- package/dist/src/sol-sdk/raydium/instructions/sell.js +6 -6
- package/dist/src/sol-sdk/raydium/instructions/sell.js.map +1 -1
- package/dist/src/sol-sdk/raydium/rpc/index.d.ts +4 -4
- package/dist/src/sol-sdk/rpc/index.d.ts +14 -14
- package/dist/src/sol-sdk/rpc/index.d.ts.map +1 -1
- package/dist/src/sol-sdk/rpc/index.js +17 -17
- package/dist/src/sol-sdk/rpc/index.js.map +1 -1
- package/dist/src/sol-sdk/transfer/index.js +5 -5
- package/dist/src/sol-sdk/transfer/index.js.map +1 -1
- package/dist/src/sol-sdk/turnover/index.d.ts +3 -3
- package/dist/src/sol-sdk/turnover/index.js +56 -56
- package/dist/src/sol-sdk/turnover/index.js.map +1 -1
- package/dist/src/telemetry.d.ts +8 -8
- package/dist/src/telemetry.d.ts.map +1 -1
- package/dist/src/telemetry.js +28 -27
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/tx-tracker/detail-adapter.d.ts +53 -53
- package/dist/src/tx-tracker/detail-adapter.d.ts.map +1 -1
- package/dist/src/tx-tracker/detail-adapter.js +68 -68
- package/dist/src/tx-tracker/detail-adapter.js.map +1 -1
- package/dist/src/tx-tracker/index.d.ts +67 -67
- package/dist/src/tx-tracker/index.d.ts.map +1 -1
- package/dist/src/tx-tracker/index.js +103 -103
- package/dist/src/tx-tracker/index.js.map +1 -1
- package/dist/src/types/index.d.ts +10 -10
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/websocket.js +1 -1
- package/dist/src/types/websocket.js.map +1 -1
- package/dist/src/utils/index.js +20 -20
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/wallet-store.d.ts +51 -51
- package/dist/src/wallet-store.d.ts.map +1 -1
- package/dist/src/wallet-store.js +104 -104
- package/dist/src/wallet-store.js.map +1 -1
- package/package.json +1 -1
package/dist/src/wallet-store.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ForgeX CLI
|
|
2
|
+
* ForgeX CLI Wallet Store
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Locally encrypted wallet group storage, replacing the frontend IndexedDB persistence.
|
|
5
|
+
* Uses AES encryption for private keys (encryption at rest), supports KDF v3 format import/export.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* - WalletStoreData.encrypted
|
|
11
|
-
* -
|
|
7
|
+
* Encryption scheme:
|
|
8
|
+
* - Each WalletInfo.privateKey field is stored encrypted with CryptoJS AES
|
|
9
|
+
* - Master password via FORGEX_PASSWORD env var or inquirer interactive prompt
|
|
10
|
+
* - WalletStoreData.encrypted flag distinguishes encrypted format from legacy plaintext
|
|
11
|
+
* - Legacy format auto-migrates to encrypted format
|
|
12
12
|
*/
|
|
13
13
|
import fs from 'fs';
|
|
14
14
|
import path from 'path';
|
|
@@ -17,27 +17,27 @@ import { Keypair } from '@solana/web3.js';
|
|
|
17
17
|
import bs58 from 'bs58';
|
|
18
18
|
import { WALLETS_DIR, ensureConfigDir } from './config.js';
|
|
19
19
|
// ============================================================
|
|
20
|
-
//
|
|
20
|
+
// Constants
|
|
21
21
|
// ============================================================
|
|
22
22
|
const STORE_FILE = 'wallet-store.json';
|
|
23
23
|
const ENCRYPTED_STORE_FILE = 'wallet-store.enc';
|
|
24
|
-
/**
|
|
24
|
+
/** Known plaintext marker for password verification */
|
|
25
25
|
const PASSWORD_CHECK_PLAINTEXT = 'FORGEX_PASSWORD_OK';
|
|
26
26
|
// ============================================================
|
|
27
|
-
// Master Password
|
|
27
|
+
// Master Password Management
|
|
28
28
|
// ============================================================
|
|
29
|
-
/**
|
|
29
|
+
/** Runtime in-memory master password (valid for process lifetime) */
|
|
30
30
|
let _masterPassword = null;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
32
|
+
* Set master password (called from CLI entry point)
|
|
33
|
+
* Password is saved in memory, only valid for current process lifetime.
|
|
34
34
|
*/
|
|
35
35
|
export function setMasterPassword(password) {
|
|
36
36
|
_masterPassword = password;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
39
|
+
* Get current master password
|
|
40
|
+
* Priority: in-memory password > FORGEX_PASSWORD env var
|
|
41
41
|
*/
|
|
42
42
|
export function getMasterPassword() {
|
|
43
43
|
if (_masterPassword)
|
|
@@ -50,84 +50,84 @@ export function getMasterPassword() {
|
|
|
50
50
|
return null;
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
53
|
+
* Ensure master password is set.
|
|
54
|
+
* If not set, tries env var; if still not available, prompts via inquirer interactive input.
|
|
55
|
+
* This function is async because it may need to wait for user input.
|
|
56
56
|
*/
|
|
57
57
|
export async function ensureMasterPassword() {
|
|
58
58
|
const existing = getMasterPassword();
|
|
59
59
|
if (existing)
|
|
60
60
|
return existing;
|
|
61
|
-
//
|
|
61
|
+
// Dynamically import inquirer to avoid loading when not needed
|
|
62
62
|
const { password: passwordPrompt } = await import('@inquirer/prompts');
|
|
63
63
|
const pwd = await passwordPrompt({
|
|
64
|
-
message: '
|
|
64
|
+
message: 'Enter wallet encryption password (master password):',
|
|
65
65
|
mask: '*',
|
|
66
66
|
});
|
|
67
67
|
if (!pwd || pwd.trim().length === 0) {
|
|
68
|
-
throw new Error('
|
|
68
|
+
throw new Error('Password cannot be empty');
|
|
69
69
|
}
|
|
70
70
|
_masterPassword = pwd;
|
|
71
71
|
return pwd;
|
|
72
72
|
}
|
|
73
73
|
// ============================================================
|
|
74
|
-
//
|
|
74
|
+
// Private Key Encryption/Decryption
|
|
75
75
|
// ============================================================
|
|
76
|
-
/**
|
|
76
|
+
/** Encrypt a private key with master password */
|
|
77
77
|
function encryptPrivateKey(plainPrivateKey, password) {
|
|
78
78
|
return CryptoJS.AES.encrypt(plainPrivateKey, password).toString();
|
|
79
79
|
}
|
|
80
|
-
/**
|
|
80
|
+
/** Decrypt a private key with master password */
|
|
81
81
|
function decryptPrivateKey(encryptedPrivateKey, password) {
|
|
82
82
|
const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);
|
|
83
83
|
const result = bytes.toString(CryptoJS.enc.Utf8);
|
|
84
84
|
if (!result) {
|
|
85
|
-
throw new Error('
|
|
85
|
+
throw new Error('Private key decryption failed: wrong password or corrupted data');
|
|
86
86
|
}
|
|
87
87
|
return result;
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
|
-
*
|
|
90
|
+
* Decrypt a single WalletInfo private key (for SDK and command use)
|
|
91
91
|
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
92
|
+
* If storage is unencrypted (legacy format), returns original privateKey directly.
|
|
93
|
+
* If encrypted, decrypts with master password and returns Base58 plaintext private key.
|
|
94
94
|
*/
|
|
95
95
|
export function getDecryptedPrivateKey(walletInfo) {
|
|
96
96
|
const password = getMasterPassword();
|
|
97
|
-
//
|
|
97
|
+
// If no password set, assume unencrypted format, return directly
|
|
98
98
|
if (!password) {
|
|
99
99
|
return walletInfo.privateKey;
|
|
100
100
|
}
|
|
101
|
-
//
|
|
101
|
+
// Try to decrypt
|
|
102
102
|
try {
|
|
103
103
|
const decrypted = decryptPrivateKey(walletInfo.privateKey, password);
|
|
104
|
-
//
|
|
104
|
+
// Verify decrypted result is a valid Base58 private key
|
|
105
105
|
bs58.decode(decrypted);
|
|
106
106
|
return decrypted;
|
|
107
107
|
}
|
|
108
108
|
catch {
|
|
109
|
-
//
|
|
109
|
+
// If decryption fails, may be unencrypted plaintext private key (backward compatible)
|
|
110
110
|
try {
|
|
111
111
|
bs58.decode(walletInfo.privateKey);
|
|
112
112
|
return walletInfo.privateKey;
|
|
113
113
|
}
|
|
114
114
|
catch {
|
|
115
|
-
throw new Error(
|
|
115
|
+
throw new Error(`Private key decryption failed: wrong password or corrupted key data (wallet: ${walletInfo.walletAddress})`);
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
/**
|
|
120
|
-
*
|
|
120
|
+
* Async version of decryption function, auto-ensures password is set
|
|
121
121
|
*/
|
|
122
122
|
export async function getDecryptedPrivateKeyAsync(walletInfo) {
|
|
123
123
|
await ensureMasterPassword();
|
|
124
124
|
return getDecryptedPrivateKey(walletInfo);
|
|
125
125
|
}
|
|
126
|
-
/**
|
|
126
|
+
/** Generate password checksum */
|
|
127
127
|
function generatePasswordCheck(password) {
|
|
128
128
|
return CryptoJS.AES.encrypt(PASSWORD_CHECK_PLAINTEXT, password).toString();
|
|
129
129
|
}
|
|
130
|
-
/**
|
|
130
|
+
/** Verify if password is correct */
|
|
131
131
|
function verifyPassword(password, checkValue) {
|
|
132
132
|
try {
|
|
133
133
|
const bytes = CryptoJS.AES.decrypt(checkValue, password);
|
|
@@ -139,7 +139,7 @@ function verifyPassword(password, checkValue) {
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
// ============================================================
|
|
142
|
-
//
|
|
142
|
+
// Utility Functions
|
|
143
143
|
// ============================================================
|
|
144
144
|
function getStorePath() {
|
|
145
145
|
ensureConfigDir();
|
|
@@ -150,9 +150,9 @@ function getEncryptedStorePath() {
|
|
|
150
150
|
return path.join(WALLETS_DIR, ENCRYPTED_STORE_FILE);
|
|
151
151
|
}
|
|
152
152
|
// ============================================================
|
|
153
|
-
//
|
|
153
|
+
// Storage Operations
|
|
154
154
|
// ============================================================
|
|
155
|
-
/**
|
|
155
|
+
/** Load wallet store data (raw format, does not decrypt private keys) */
|
|
156
156
|
export function loadWalletStore() {
|
|
157
157
|
const storePath = getStorePath();
|
|
158
158
|
if (!fs.existsSync(storePath)) {
|
|
@@ -163,62 +163,62 @@ export function loadWalletStore() {
|
|
|
163
163
|
return JSON.parse(raw);
|
|
164
164
|
}
|
|
165
165
|
catch (err) {
|
|
166
|
-
//
|
|
166
|
+
// File corrupted: backup corrupted file and warn user
|
|
167
167
|
const bakPath = `${storePath}.bak`;
|
|
168
168
|
try {
|
|
169
169
|
fs.renameSync(storePath, bakPath);
|
|
170
|
-
console.warn(
|
|
170
|
+
console.warn(`Warning: wallet store file is corrupted, backed up to ${bakPath}. Will continue with empty data.`);
|
|
171
171
|
}
|
|
172
172
|
catch {
|
|
173
|
-
console.warn(
|
|
173
|
+
console.warn(`Warning: wallet store file is corrupted and backup failed. Will continue with empty data.`);
|
|
174
174
|
}
|
|
175
175
|
return { groups: {}, notes: {}, devWallets: {} };
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
|
-
/**
|
|
178
|
+
/** Save wallet store data */
|
|
179
179
|
export function saveWalletStore(data) {
|
|
180
180
|
ensureConfigDir();
|
|
181
181
|
const storePath = getStorePath();
|
|
182
182
|
fs.writeFileSync(storePath, JSON.stringify(data, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
183
183
|
}
|
|
184
184
|
// ============================================================
|
|
185
|
-
//
|
|
185
|
+
// Encryption Migration
|
|
186
186
|
// ============================================================
|
|
187
187
|
/**
|
|
188
|
-
*
|
|
188
|
+
* Detect if storage is legacy format (unencrypted), prompt and execute migration if so.
|
|
189
189
|
*
|
|
190
|
-
*
|
|
191
|
-
* 1.
|
|
192
|
-
* 2.
|
|
193
|
-
* 3.
|
|
194
|
-
* 4.
|
|
195
|
-
* 5.
|
|
190
|
+
* This function should be called at CLI entry. Migration process:
|
|
191
|
+
* 1. Read plaintext storage
|
|
192
|
+
* 2. Ensure user has set master password
|
|
193
|
+
* 3. Encrypt all privateKey fields
|
|
194
|
+
* 4. Add encrypted flag and password checksum
|
|
195
|
+
* 5. Save encrypted storage
|
|
196
196
|
*/
|
|
197
197
|
export async function migrateToEncryptedStore() {
|
|
198
198
|
const store = loadWalletStore();
|
|
199
|
-
//
|
|
199
|
+
// Skip if no data or already encrypted
|
|
200
200
|
if (Object.keys(store.groups).length === 0)
|
|
201
201
|
return;
|
|
202
202
|
if (store.encrypted === true)
|
|
203
203
|
return;
|
|
204
|
-
//
|
|
204
|
+
// Check if there are private keys to encrypt
|
|
205
205
|
const hasPrivateKeys = Object.values(store.groups).some(g => g.wallets.some(w => w.privateKey && w.privateKey.length > 0));
|
|
206
206
|
if (!hasPrivateKeys)
|
|
207
207
|
return;
|
|
208
|
-
console.warn('
|
|
208
|
+
console.warn('Detected wallet store using legacy format (plaintext private keys), migration to encrypted format required.');
|
|
209
209
|
const password = await ensureMasterPassword();
|
|
210
|
-
//
|
|
210
|
+
// Backup original file
|
|
211
211
|
const storePath = getStorePath();
|
|
212
212
|
const bakPath = `${storePath}.pre-encryption.bak`;
|
|
213
213
|
try {
|
|
214
214
|
fs.copyFileSync(storePath, bakPath);
|
|
215
215
|
fs.chmodSync(bakPath, 0o600);
|
|
216
|
-
console.warn(
|
|
216
|
+
console.warn(`Original file backed up to ${bakPath}`);
|
|
217
217
|
}
|
|
218
218
|
catch {
|
|
219
|
-
console.warn('
|
|
219
|
+
console.warn('Warning: unable to create backup file, continuing migration...');
|
|
220
220
|
}
|
|
221
|
-
//
|
|
221
|
+
// Encrypt all private keys
|
|
222
222
|
for (const group of Object.values(store.groups)) {
|
|
223
223
|
for (const wallet of group.wallets) {
|
|
224
224
|
if (wallet.privateKey) {
|
|
@@ -229,56 +229,56 @@ export async function migrateToEncryptedStore() {
|
|
|
229
229
|
store.encrypted = true;
|
|
230
230
|
store.passwordCheck = generatePasswordCheck(password);
|
|
231
231
|
saveWalletStore(store);
|
|
232
|
-
console.warn('
|
|
232
|
+
console.warn('Wallet store successfully migrated to encrypted format.');
|
|
233
233
|
}
|
|
234
234
|
/**
|
|
235
|
-
*
|
|
236
|
-
*
|
|
235
|
+
* Verify if current master password matches the stored password checksum.
|
|
236
|
+
* Returns true if storage is unencrypted.
|
|
237
237
|
*/
|
|
238
238
|
export function validateMasterPassword() {
|
|
239
239
|
const store = loadWalletStore();
|
|
240
240
|
if (!store.encrypted)
|
|
241
241
|
return true;
|
|
242
242
|
if (!store.passwordCheck)
|
|
243
|
-
return true; //
|
|
243
|
+
return true; // Skip when no checksum
|
|
244
244
|
const password = getMasterPassword();
|
|
245
245
|
if (!password)
|
|
246
246
|
return false;
|
|
247
247
|
return verifyPassword(password, store.passwordCheck);
|
|
248
248
|
}
|
|
249
249
|
/**
|
|
250
|
-
*
|
|
250
|
+
* Ensure password is set and correct. Called by CLI entry before commands requiring private keys.
|
|
251
251
|
*/
|
|
252
252
|
export async function ensurePasswordAndValidate() {
|
|
253
253
|
const store = loadWalletStore();
|
|
254
254
|
if (!store.encrypted)
|
|
255
|
-
return; //
|
|
255
|
+
return; // Unencrypted storage does not need password
|
|
256
256
|
const password = await ensureMasterPassword();
|
|
257
257
|
if (store.passwordCheck && !verifyPassword(password, store.passwordCheck)) {
|
|
258
|
-
_masterPassword = null; //
|
|
259
|
-
throw new Error('
|
|
258
|
+
_masterPassword = null; // Clear incorrect password
|
|
259
|
+
throw new Error('Wrong password: unable to decrypt wallet store. Please check your password.');
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
// ============================================================
|
|
263
|
-
//
|
|
263
|
+
// Wallet Group Operations
|
|
264
264
|
// ============================================================
|
|
265
|
-
/**
|
|
265
|
+
/** Get all wallet groups */
|
|
266
266
|
export function getAllGroups() {
|
|
267
267
|
const store = loadWalletStore();
|
|
268
268
|
return Object.values(store.groups);
|
|
269
269
|
}
|
|
270
|
-
/**
|
|
270
|
+
/** Get a single wallet group */
|
|
271
271
|
export function getGroup(groupId) {
|
|
272
272
|
const store = loadWalletStore();
|
|
273
273
|
return store.groups[groupId];
|
|
274
274
|
}
|
|
275
|
-
/**
|
|
275
|
+
/** Save wallet group (create or update) */
|
|
276
276
|
export function saveGroup(group) {
|
|
277
277
|
const store = loadWalletStore();
|
|
278
278
|
store.groups[group.groupId] = group;
|
|
279
279
|
saveWalletStore(store);
|
|
280
280
|
}
|
|
281
|
-
/**
|
|
281
|
+
/** Delete wallet group */
|
|
282
282
|
export function removeGroup(groupId) {
|
|
283
283
|
const store = loadWalletStore();
|
|
284
284
|
if (!store.groups[groupId])
|
|
@@ -287,20 +287,20 @@ export function removeGroup(groupId) {
|
|
|
287
287
|
saveWalletStore(store);
|
|
288
288
|
return true;
|
|
289
289
|
}
|
|
290
|
-
/**
|
|
290
|
+
/** Add wallets to group (private keys auto-encrypted based on storage state) */
|
|
291
291
|
export function addWalletsToGroup(groupId, wallets) {
|
|
292
292
|
const store = loadWalletStore();
|
|
293
293
|
const group = store.groups[groupId];
|
|
294
294
|
if (!group)
|
|
295
295
|
return false;
|
|
296
|
-
//
|
|
296
|
+
// Deduplication check
|
|
297
297
|
const existingAddresses = new Set(group.wallets.map(w => w.walletAddress));
|
|
298
298
|
const newWallets = wallets.filter(w => !existingAddresses.has(w.walletAddress));
|
|
299
|
-
//
|
|
299
|
+
// If storage is encrypted, encrypt new wallet private keys
|
|
300
300
|
if (store.encrypted) {
|
|
301
301
|
const password = getMasterPassword();
|
|
302
302
|
if (!password) {
|
|
303
|
-
throw new Error('
|
|
303
|
+
throw new Error('Storage is encrypted but no password set, call ensureMasterPassword() first');
|
|
304
304
|
}
|
|
305
305
|
for (const w of newWallets) {
|
|
306
306
|
w.privateKey = encryptPrivateKey(w.privateKey, password);
|
|
@@ -310,7 +310,7 @@ export function addWalletsToGroup(groupId, wallets) {
|
|
|
310
310
|
saveWalletStore(store);
|
|
311
311
|
return true;
|
|
312
312
|
}
|
|
313
|
-
/**
|
|
313
|
+
/** Remove wallet from group */
|
|
314
314
|
export function removeWalletsFromGroup(groupId, addresses) {
|
|
315
315
|
const store = loadWalletStore();
|
|
316
316
|
const group = store.groups[groupId];
|
|
@@ -322,9 +322,9 @@ export function removeWalletsFromGroup(groupId, addresses) {
|
|
|
322
322
|
return true;
|
|
323
323
|
}
|
|
324
324
|
// ============================================================
|
|
325
|
-
//
|
|
325
|
+
// Wallet Generation
|
|
326
326
|
// ============================================================
|
|
327
|
-
/**
|
|
327
|
+
/** Generate new wallets (returns plaintext private keys, encryption handled by addWalletsToGroup) */
|
|
328
328
|
export function generateWallets(count) {
|
|
329
329
|
const wallets = [];
|
|
330
330
|
for (let i = 0; i < count; i++) {
|
|
@@ -337,7 +337,7 @@ export function generateWallets(count) {
|
|
|
337
337
|
}
|
|
338
338
|
return wallets;
|
|
339
339
|
}
|
|
340
|
-
/**
|
|
340
|
+
/** Restore wallet info from private key */
|
|
341
341
|
export function walletFromPrivateKey(privateKey, note = '') {
|
|
342
342
|
const keypair = Keypair.fromSecretKey(bs58.decode(privateKey));
|
|
343
343
|
return {
|
|
@@ -347,12 +347,12 @@ export function walletFromPrivateKey(privateKey, note = '') {
|
|
|
347
347
|
};
|
|
348
348
|
}
|
|
349
349
|
// ============================================================
|
|
350
|
-
//
|
|
350
|
+
// Encryption / Export (decrypt on export, encrypt on import)
|
|
351
351
|
// ============================================================
|
|
352
|
-
/**
|
|
352
|
+
/** Encrypted export of wallet store (whole-file encryption, for backup) */
|
|
353
353
|
export function encryptWalletStore(password) {
|
|
354
354
|
const store = loadWalletStore();
|
|
355
|
-
//
|
|
355
|
+
// If storage is encrypted, decrypt private keys first then encrypt whole
|
|
356
356
|
if (store.encrypted) {
|
|
357
357
|
const masterPwd = getMasterPassword();
|
|
358
358
|
if (masterPwd) {
|
|
@@ -363,21 +363,21 @@ export function encryptWalletStore(password) {
|
|
|
363
363
|
wallet.privateKey = decryptPrivateKey(wallet.privateKey, masterPwd);
|
|
364
364
|
}
|
|
365
365
|
catch {
|
|
366
|
-
//
|
|
366
|
+
// If decryption fails, keep as-is
|
|
367
367
|
}
|
|
368
368
|
}
|
|
369
369
|
}
|
|
370
370
|
}
|
|
371
371
|
}
|
|
372
372
|
}
|
|
373
|
-
//
|
|
373
|
+
// Remove encrypted flag (export is whole-file encryption of plaintext data)
|
|
374
374
|
const exportData = { ...store };
|
|
375
375
|
delete exportData.encrypted;
|
|
376
376
|
delete exportData.passwordCheck;
|
|
377
377
|
const json = JSON.stringify(exportData);
|
|
378
378
|
return CryptoJS.AES.encrypt(json, password).toString();
|
|
379
379
|
}
|
|
380
|
-
/**
|
|
380
|
+
/** Decrypt and import wallet store */
|
|
381
381
|
export function decryptWalletStore(encrypted, password) {
|
|
382
382
|
try {
|
|
383
383
|
const bytes = CryptoJS.AES.decrypt(encrypted, password);
|
|
@@ -390,7 +390,7 @@ export function decryptWalletStore(encrypted, password) {
|
|
|
390
390
|
return null;
|
|
391
391
|
}
|
|
392
392
|
}
|
|
393
|
-
/**
|
|
393
|
+
/** Export wallet group as CSV (auto-decrypts private keys) */
|
|
394
394
|
export function exportGroupToCsv(groupId) {
|
|
395
395
|
const group = getGroup(groupId);
|
|
396
396
|
if (!group)
|
|
@@ -401,24 +401,24 @@ export function exportGroupToCsv(groupId) {
|
|
|
401
401
|
for (const w of group.wallets) {
|
|
402
402
|
const note = w.note.replace(/,/g, '\\,').replace(/\n/g, '\\n');
|
|
403
403
|
let pk = w.privateKey;
|
|
404
|
-
//
|
|
404
|
+
// If storage is encrypted, decrypt private keys for export
|
|
405
405
|
if (store.encrypted && password) {
|
|
406
406
|
try {
|
|
407
407
|
pk = decryptPrivateKey(pk, password);
|
|
408
408
|
}
|
|
409
409
|
catch {
|
|
410
|
-
//
|
|
410
|
+
// Keep as-is on decryption failure
|
|
411
411
|
}
|
|
412
412
|
}
|
|
413
413
|
lines.push(`${w.walletAddress},${pk},${note}`);
|
|
414
414
|
}
|
|
415
415
|
return lines.join('\n');
|
|
416
416
|
}
|
|
417
|
-
/**
|
|
417
|
+
/** Import wallets from CSV */
|
|
418
418
|
export function importWalletsFromCsv(csvContent) {
|
|
419
419
|
const lines = csvContent.trim().split('\n');
|
|
420
420
|
const wallets = [];
|
|
421
|
-
//
|
|
421
|
+
// Skip header
|
|
422
422
|
const startIndex = lines[0]?.toLowerCase().includes('walletaddress') ? 1 : 0;
|
|
423
423
|
for (let i = startIndex; i < lines.length; i++) {
|
|
424
424
|
const line = lines[i].trim();
|
|
@@ -430,12 +430,12 @@ export function importWalletsFromCsv(csvContent) {
|
|
|
430
430
|
const address = parts[0].trim();
|
|
431
431
|
const privateKey = parts[1].trim();
|
|
432
432
|
const note = (parts[2] || '').trim().replace(/\\,/g, ',').replace(/\\n/g, '\n');
|
|
433
|
-
//
|
|
433
|
+
// Validate private key
|
|
434
434
|
try {
|
|
435
435
|
const keypair = Keypair.fromSecretKey(bs58.decode(privateKey));
|
|
436
436
|
const derivedAddress = keypair.publicKey.toBase58();
|
|
437
437
|
if (address && derivedAddress !== address) {
|
|
438
|
-
console.warn(
|
|
438
|
+
console.warn(`Warning: address mismatch (line ${i + 1}): ${address} != ${derivedAddress}`);
|
|
439
439
|
}
|
|
440
440
|
wallets.push({
|
|
441
441
|
walletAddress: derivedAddress,
|
|
@@ -444,17 +444,17 @@ export function importWalletsFromCsv(csvContent) {
|
|
|
444
444
|
});
|
|
445
445
|
}
|
|
446
446
|
catch {
|
|
447
|
-
console.warn(
|
|
447
|
+
console.warn(`Skipping invalid private key (line ${i + 1})`);
|
|
448
448
|
}
|
|
449
449
|
}
|
|
450
450
|
return wallets;
|
|
451
451
|
}
|
|
452
|
-
/**
|
|
452
|
+
/** Export all wallet groups as JSON (compatible with frontend import format, auto-decrypts private keys) */
|
|
453
453
|
export function exportAllGroupsJson() {
|
|
454
454
|
const groups = getAllGroups();
|
|
455
455
|
const store = loadWalletStore();
|
|
456
456
|
const password = getMasterPassword();
|
|
457
|
-
//
|
|
457
|
+
// If storage is encrypted, decrypt private keys for export
|
|
458
458
|
if (store.encrypted && password) {
|
|
459
459
|
for (const group of groups) {
|
|
460
460
|
for (const wallet of group.wallets) {
|
|
@@ -463,7 +463,7 @@ export function exportAllGroupsJson() {
|
|
|
463
463
|
wallet.privateKey = decryptPrivateKey(wallet.privateKey, password);
|
|
464
464
|
}
|
|
465
465
|
catch {
|
|
466
|
-
//
|
|
466
|
+
// Keep as-is on decryption failure
|
|
467
467
|
}
|
|
468
468
|
}
|
|
469
469
|
}
|
|
@@ -471,15 +471,15 @@ export function exportAllGroupsJson() {
|
|
|
471
471
|
}
|
|
472
472
|
return JSON.stringify(groups, null, 2);
|
|
473
473
|
}
|
|
474
|
-
/**
|
|
474
|
+
/** Export encrypted wallet groups JSON */
|
|
475
475
|
export function exportEncryptedGroupsJson(password) {
|
|
476
476
|
const json = exportAllGroupsJson();
|
|
477
477
|
return CryptoJS.AES.encrypt(json, password).toString();
|
|
478
478
|
}
|
|
479
|
-
/**
|
|
479
|
+
/** Import wallet groups JSON */
|
|
480
480
|
export function importGroupsFromJson(jsonContent, password) {
|
|
481
481
|
let content = jsonContent;
|
|
482
|
-
//
|
|
482
|
+
// Try to decrypt
|
|
483
483
|
if (password) {
|
|
484
484
|
try {
|
|
485
485
|
const bytes = CryptoJS.AES.decrypt(content, password);
|
|
@@ -503,20 +503,20 @@ export function importGroupsFromJson(jsonContent, password) {
|
|
|
503
503
|
}
|
|
504
504
|
}
|
|
505
505
|
// ============================================================
|
|
506
|
-
//
|
|
506
|
+
// Note Management
|
|
507
507
|
// ============================================================
|
|
508
|
-
/**
|
|
508
|
+
/** Get wallet note */
|
|
509
509
|
export function getNote(address) {
|
|
510
510
|
const store = loadWalletStore();
|
|
511
511
|
return store.notes[address] || '';
|
|
512
512
|
}
|
|
513
|
-
/**
|
|
513
|
+
/** Set wallet note */
|
|
514
514
|
export function setNote(address, note) {
|
|
515
515
|
const store = loadWalletStore();
|
|
516
516
|
store.notes[address] = note;
|
|
517
517
|
saveWalletStore(store);
|
|
518
518
|
}
|
|
519
|
-
/**
|
|
519
|
+
/** Get all notes */
|
|
520
520
|
export function getAllNotes() {
|
|
521
521
|
const store = loadWalletStore();
|
|
522
522
|
return store.notes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-store.js","sourceRoot":"","sources":["../../src/wallet-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wallet-store.js","sourceRoot":"","sources":["../../src/wallet-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiC3D,+DAA+D;AAC/D,YAAY;AACZ,+DAA+D;AAE/D,MAAM,UAAU,GAAG,mBAAmB,CAAC;AACvC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEhD,uDAAuD;AACvD,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAEtD,+DAA+D;AAC/D,6BAA6B;AAC7B,+DAA+D;AAE/D,qEAAqE;AACrE,IAAI,eAAe,GAAkB,IAAI,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,eAAe,GAAG,QAAQ,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAChD,IAAI,WAAW,EAAE,CAAC;QAChB,eAAe,GAAG,WAAW,CAAC;QAC9B,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,+DAA+D;IAC/D,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;QAC/B,OAAO,EAAE,qDAAqD;QAC9D,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe,GAAG,GAAG,CAAC;IACtB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+DAA+D;AAC/D,oCAAoC;AACpC,+DAA+D;AAE/D,iDAAiD;AACjD,SAAS,iBAAiB,CAAC,eAAuB,EAAE,QAAgB;IAClE,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpE,CAAC;AAED,iDAAiD;AACjD,SAAS,iBAAiB,CAAC,mBAA2B,EAAE,QAAgB;IACtE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAsB;IAC3D,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,iEAAiE;IACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,UAAU,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED,iBAAiB;IACjB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrE,wDAAwD;QACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,sFAAsF;QACtF,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACnC,OAAO,UAAU,CAAC,UAAU,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,gFAAgF,UAAU,CAAC,aAAa,GAAG,CAC5G,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,UAAsB;IACtE,MAAM,oBAAoB,EAAE,CAAC;IAC7B,OAAO,sBAAsB,CAAC,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,iCAAiC;AACjC,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC7E,CAAC;AAED,oCAAoC;AACpC,SAAS,cAAc,CAAC,QAAgB,EAAE,UAAkB;IAC1D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,MAAM,KAAK,wBAAwB,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,oBAAoB;AACpB,+DAA+D;AAE/D,SAAS,YAAY;IACnB,eAAe,EAAE,CAAC;IAClB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,qBAAqB;IAC5B,eAAe,EAAE,CAAC;IAClB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AACtD,CAAC;AAED,+DAA+D;AAC/D,qBAAqB;AACrB,+DAA+D;AAE/D,yEAAyE;AACzE,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sDAAsD;QACtD,MAAM,OAAO,GAAG,GAAG,SAAS,MAAM,CAAC;QACnC,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CACV,yDAAyD,OAAO,kCAAkC,CACnG,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CACV,2FAA2F,CAC5F,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC;AACH,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,eAAe,CAAC,IAAqB;IACnD,eAAe,EAAE,CAAC;IAClB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,+DAA+D;AAC/D,uBAAuB;AACvB,+DAA+D;AAE/D;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,uCAAuC;IACvC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACnD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO;IAErC,6CAA6C;IAC7C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CACrD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAClE,CAAC;IACF,IAAI,CAAC,cAAc;QAAE,OAAO;IAE5B,OAAO,CAAC,IAAI,CAAC,6GAA6G,CAAC,CAAC;IAE5H,MAAM,QAAQ,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAE9C,uBAAuB;IACvB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,GAAG,SAAS,qBAAqB,CAAC;IAClD,IAAI,CAAC;QACH,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IACjF,CAAC;IAED,2BAA2B;IAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACtD,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvB,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC,CAAC,wBAAwB;IAE/D,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,OAAO,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,CAAC,6CAA6C;IAE3E,MAAM,QAAQ,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAE9C,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1E,eAAe,GAAG,IAAI,CAAC,CAAC,2BAA2B;QACnD,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D;AAE/D,4BAA4B;AAC5B,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,SAAS,CAAC,KAAgB;IACxC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IACpC,eAAe,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,OAAqB;IACtE,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,sBAAsB;IACtB,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAEhF,2DAA2D;IAC3D,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACjG,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,CAAC,CAAC,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IAClC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,SAAmB;IACzE,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACnC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IACzE,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+DAA+D;AAC/D,oBAAoB;AACpB,+DAA+D;AAE/D,qGAAqG;AACrG,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC;YACX,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC3C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YAC1C,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,IAAI,GAAG,EAAE;IAChE,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;QAC3C,UAAU;QACV,IAAI;KACL,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,6DAA6D;AAC7D,+DAA+D;AAE/D,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,yEAAyE;IACzE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACtC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;wBACtB,IAAI,CAAC;4BACH,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;wBACtE,CAAC;wBAAC,MAAM,CAAC;4BACP,kCAAkC;wBACpC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,MAAM,UAAU,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,SAAS,CAAC;IAC5B,OAAO,UAAU,CAAC,aAAa,CAAC;IAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzD,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,QAAgB;IACpE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAoB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC;QACtB,2DAA2D;QAC3D,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,mCAAmC;YACrC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,cAAc;IACd,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAE/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEhF,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/D,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACpD,IAAI,OAAO,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,GAAG,CAAC,MAAM,OAAO,OAAO,cAAc,EAAE,CAAC,CAAC;YAC7F,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,aAAa,EAAE,cAAc;gBAC7B,UAAU;gBACV,IAAI;aACL,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,2DAA2D;IAC3D,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBACrE,CAAC;oBAAC,MAAM,CAAC;wBACP,mCAAmC;oBACrC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACxD,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;IACnC,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzD,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,QAAiB;IAEjB,IAAI,OAAO,GAAG,WAAW,CAAC;IAE1B,iBAAiB;IACjB,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC;YAC5B,OAAO,GAAG,SAAS,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,kBAAkB;AAClB,+DAA+D;AAE/D,sBAAsB;AACtB,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,IAAY;IACnD,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,WAAW;IACzB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC"}
|