tollkit-wallet 0.1.0 → 0.2.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/README.md +45 -2
- package/THIRD_PARTY_NOTICES.md +4 -0
- package/dist/actions.d.ts +403 -1
- package/dist/actions.js +99 -0
- package/dist/actions.js.map +1 -1
- package/dist/ai-icons.d.ts +5 -0
- package/dist/ai-icons.js +3 -0
- package/dist/ai-icons.js.map +1 -0
- package/dist/ai.d.ts +77 -0
- package/dist/ai.js +227 -0
- package/dist/ai.js.map +1 -0
- package/dist/autopilot.d.ts +74 -0
- package/dist/autopilot.js +285 -0
- package/dist/autopilot.js.map +1 -0
- package/dist/cli.js +102 -3
- package/dist/cli.js.map +1 -1
- package/dist/connect.d.ts +29 -0
- package/dist/connect.js +227 -0
- package/dist/connect.js.map +1 -0
- package/dist/dashboard.d.ts +4 -0
- package/dist/dashboard.js +100 -2
- package/dist/dashboard.js.map +1 -1
- package/dist/elizaos.js +7 -0
- package/dist/elizaos.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +7 -2
- package/dist/mcp.js +14 -6
- package/dist/mcp.js.map +1 -1
- package/dist/paper.d.ts +53 -0
- package/dist/paper.js +78 -0
- package/dist/paper.js.map +1 -0
- package/dist/parse.d.ts +22 -0
- package/dist/parse.js +113 -0
- package/dist/parse.js.map +1 -0
- package/dist/paths.d.ts +4 -0
- package/dist/paths.js +4 -0
- package/dist/paths.js.map +1 -1
- package/dist/policy.d.ts +4 -0
- package/dist/policy.js +3 -0
- package/dist/policy.js.map +1 -1
- package/dist/rules.d.ts +115 -0
- package/dist/rules.js +185 -0
- package/dist/rules.js.map +1 -0
- package/dist/telegram.d.ts +2 -0
- package/dist/telegram.js +4 -0
- package/dist/telegram.js.map +1 -1
- package/dist/ui.js +183 -9
- package/dist/ui.js.map +1 -1
- package/dist/wallet.d.ts +10 -0
- package/dist/wallet.js +16 -0
- package/dist/wallet.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -56,7 +56,11 @@ The agent has no tool for this.
|
|
|
56
56
|
}
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Tools: `wallet_status`, `wallet_balances`, `swap_quote`, `swap`, `pay_fetch`, `seller_check`, `receipts`. There is no tool for changing limits, approvals or keys.
|
|
59
|
+
Tools: `wallet_status`, `wallet_balances`, `swap_quote`, `swap`, `pay_fetch`, `seller_check`, `receipts`, `market_prices`, `price_history`, `autopilot_propose`, `autopilot_rules`, `autopilot_cancel`, `paper_swap`, `paper_status`. There is no tool for changing limits, approvals or keys.
|
|
60
|
+
|
|
61
|
+
The easiest way: open the dashboard (`tollkit-wallet ui`), click **Connect your AI**, type your wallet password and click **Add** next to your app. It finds Claude desktop, Claude Code, Cursor, Codex and Gemini CLI on your computer and adds the wallet to their settings for you (keeping a backup of any file it changes); VS Code opens to confirm. Each app also has the steps to do it by hand.
|
|
62
|
+
|
|
63
|
+
The app needs to unlock the wallet on its own, so adding an app saves your password to `~/.tollkit-wallet/password`, readable only by your user account (or run `tollkit-wallet password-file` to do just that step). Anyone who can read that file and your wallet folder can spend within your limits, so keep both on this computer.
|
|
60
64
|
|
|
61
65
|
## Use with Coinbase AgentKit
|
|
62
66
|
|
|
@@ -69,7 +73,7 @@ const wallet = await TollkitWallet.open(process.env.TOLLKIT_WALLET_PASSWORD!);
|
|
|
69
73
|
const agentkit = await AgentKit.from({ walletProvider, actionProviders: [tollkitWalletActionProvider(wallet)] });
|
|
70
74
|
```
|
|
71
75
|
|
|
72
|
-
This adds `
|
|
76
|
+
This adds the same 14 tools as the MCP server, with a `tollkit_` prefix (`tollkit_swap`, `tollkit_pay_fetch`, `tollkit_autopilot_propose`, …). They use the Tollkit wallet's own keys and limits, whatever AgentKit wallet provider you use.
|
|
73
77
|
|
|
74
78
|
## Use with ElizaOS
|
|
75
79
|
|
|
@@ -101,3 +105,42 @@ const r = await w.pay("https://api.example.com/paid-endpoint");
|
|
|
101
105
|
Swap quotes come through api.tollkit.dev. It holds the 0x and Jupiter API keys and adds the fee, and it only ever sees public data and signed transactions.
|
|
102
106
|
|
|
103
107
|
If you lose the password, the funds can't be recovered.
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
## Autopilot (limit orders, stop-loss, take-profit, trailing stops, recurring buys)
|
|
111
|
+
|
|
112
|
+
Tell the wallet what to do in plain English, check the summary, and turn it on:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
tollkit-wallet rule add "buy $25 of SOL every Monday; sell half my ETH if it rises 10% and sell all ETH if it falls 8%"
|
|
116
|
+
tollkit-wallet rules # what's on, prices now, fills
|
|
117
|
+
tollkit-wallet rule pause <id> # or: rule on <id>, rule cancel <id>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Or use the **Autopilot** tab in the dashboard (`tollkit-wallet ui`). Rule types: limit buy, limit sell, take-profit, stop-loss, trailing stop, and recurring buys (hourly, daily, weekly or a set weekday, with an optional count and maximum price). A take-profit and a stop-loss on the same token are linked: when one fills, the other cancels.
|
|
121
|
+
|
|
122
|
+
- Every fill goes through the same limits, approvals and receipts as any swap, and pays the same 0.5% fee.
|
|
123
|
+
- Rules an agent suggests (`autopilot_propose`) wait for you to turn them on, unless you tick "Let agents turn on autopilot rules without asking me" in Limits (or `budget agent_rules=auto`).
|
|
124
|
+
- The autopilot runs while the wallet runs: keep the dashboard open, or run `tollkit-wallet autopilot` on a computer or small server that stays on. Only one copy runs rules at a time.
|
|
125
|
+
- Limit orders fill only at their price or better (within 1% for fees and spread). Stops always sell. When selling all of a chain's coin, a little is kept for network fees.
|
|
126
|
+
|
|
127
|
+
### Chat with your AI on the Autopilot tab
|
|
128
|
+
|
|
129
|
+
If Claude Code is installed and signed in on this computer, the Autopilot tab is a chat. Say what you want in your own words ("protect my ETH if it drops hard", "buy SOL on dips, $20 at a time"); Claude checks your balances, live prices and recent price history, explains its thinking, and suggests rules as cards you turn on with one tap. It runs on your own Claude plan.
|
|
130
|
+
|
|
131
|
+
For these chats Claude Code runs with its own tools switched off and only the wallet's advisor tools available (`tollkit-wallet mcp --advisor`: balances, limits, receipts, prices, price history, your rules, and suggesting rules). It can't trade, pay, withdraw or change limits, and its suggestions always wait for you, even if you let other agents turn rules on.
|
|
132
|
+
|
|
133
|
+
**Check-ins:** pick every 1, 4, 12 or 24 hours and Claude reviews your rules against the market and what you've told it, then suggests changes (for example raising a stop-loss after a rise). A suggested change replaces the old rule only when you turn it on. If Telegram is set up, check-in suggestions also arrive there with Approve and Deny. Check-ins run while the dashboard is open.
|
|
134
|
+
|
|
135
|
+
## Paper trading
|
|
136
|
+
|
|
137
|
+
Practise with pretend money at real live prices, fees included, under the same limits:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
tollkit-wallet paper reset 1000 # $1,000 pretend USDC on each chain
|
|
141
|
+
tollkit-wallet paper swap base 100 USDC ETH
|
|
142
|
+
tollkit-wallet autopilot --paper # run your rules on pretend money
|
|
143
|
+
tollkit-wallet paper # balances, fills, fees
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Agents get `paper_swap` and `paper_status`. Nothing is signed or sent.
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -11,3 +11,7 @@ Coin and chain logos in `src/coin-icons.ts` come from web3icons (`@web3icons/cor
|
|
|
11
11
|
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
12
12
|
|
|
13
13
|
The coin and network names and logos are trademarks of their owners and are used only to identify the assets and networks the wallet supports.
|
|
14
|
+
|
|
15
|
+
## Simple Icons
|
|
16
|
+
|
|
17
|
+
The Claude, Cursor, GitHub Copilot and Gemini logos in the dashboard's "Connect your AI" picker (`src/ai-icons.ts`) come from Simple Icons (https://simpleicons.org), whose data is released under CC0 1.0. The logos are trademarks of their owners and are shown only to say which apps work with the wallet.
|
package/dist/actions.d.ts
CHANGED
|
@@ -62,6 +62,172 @@ export declare const ReceiptArgs: z.ZodObject<{
|
|
|
62
62
|
limit?: number | undefined;
|
|
63
63
|
}>;
|
|
64
64
|
export declare const NoArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
65
|
+
export declare const ProposeArgs: z.ZodObject<{
|
|
66
|
+
text: z.ZodOptional<z.ZodString>;
|
|
67
|
+
rules: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
68
|
+
kind: z.ZodEnum<["limit_buy", "limit_sell", "stop_loss", "take_profit", "trailing_stop", "dca"]>;
|
|
69
|
+
chain: z.ZodEnum<["base", "ethereum", "solana"]>;
|
|
70
|
+
token: z.ZodString;
|
|
71
|
+
name: z.ZodOptional<z.ZodString>;
|
|
72
|
+
amount_usd: z.ZodOptional<z.ZodNumber>;
|
|
73
|
+
sell_percent: z.ZodOptional<z.ZodNumber>;
|
|
74
|
+
sell_amount: z.ZodOptional<z.ZodString>;
|
|
75
|
+
trigger_price: z.ZodOptional<z.ZodNumber>;
|
|
76
|
+
trail_pct: z.ZodOptional<z.ZodNumber>;
|
|
77
|
+
every: z.ZodOptional<z.ZodEnum<["hour", "day", "week"]>>;
|
|
78
|
+
weekday: z.ZodOptional<z.ZodNumber>;
|
|
79
|
+
times: z.ZodOptional<z.ZodNumber>;
|
|
80
|
+
max_price: z.ZodOptional<z.ZodNumber>;
|
|
81
|
+
group: z.ZodOptional<z.ZodString>;
|
|
82
|
+
expires_at: z.ZodOptional<z.ZodString>;
|
|
83
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
84
|
+
replaces: z.ZodOptional<z.ZodString>;
|
|
85
|
+
}, "strip", z.ZodTypeAny, {
|
|
86
|
+
chain: "base" | "ethereum" | "solana";
|
|
87
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
88
|
+
token: string;
|
|
89
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
90
|
+
reason?: string | undefined;
|
|
91
|
+
name?: string | undefined;
|
|
92
|
+
sell_amount?: string | undefined;
|
|
93
|
+
amount_usd?: number | undefined;
|
|
94
|
+
sell_percent?: number | undefined;
|
|
95
|
+
trigger_price?: number | undefined;
|
|
96
|
+
trail_pct?: number | undefined;
|
|
97
|
+
weekday?: number | undefined;
|
|
98
|
+
times?: number | undefined;
|
|
99
|
+
max_price?: number | undefined;
|
|
100
|
+
group?: string | undefined;
|
|
101
|
+
expires_at?: string | undefined;
|
|
102
|
+
replaces?: string | undefined;
|
|
103
|
+
}, {
|
|
104
|
+
chain: "base" | "ethereum" | "solana";
|
|
105
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
106
|
+
token: string;
|
|
107
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
108
|
+
reason?: string | undefined;
|
|
109
|
+
name?: string | undefined;
|
|
110
|
+
sell_amount?: string | undefined;
|
|
111
|
+
amount_usd?: number | undefined;
|
|
112
|
+
sell_percent?: number | undefined;
|
|
113
|
+
trigger_price?: number | undefined;
|
|
114
|
+
trail_pct?: number | undefined;
|
|
115
|
+
weekday?: number | undefined;
|
|
116
|
+
times?: number | undefined;
|
|
117
|
+
max_price?: number | undefined;
|
|
118
|
+
group?: string | undefined;
|
|
119
|
+
expires_at?: string | undefined;
|
|
120
|
+
replaces?: string | undefined;
|
|
121
|
+
}>, "many">>;
|
|
122
|
+
}, "strip", z.ZodTypeAny, {
|
|
123
|
+
rules?: {
|
|
124
|
+
chain: "base" | "ethereum" | "solana";
|
|
125
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
126
|
+
token: string;
|
|
127
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
128
|
+
reason?: string | undefined;
|
|
129
|
+
name?: string | undefined;
|
|
130
|
+
sell_amount?: string | undefined;
|
|
131
|
+
amount_usd?: number | undefined;
|
|
132
|
+
sell_percent?: number | undefined;
|
|
133
|
+
trigger_price?: number | undefined;
|
|
134
|
+
trail_pct?: number | undefined;
|
|
135
|
+
weekday?: number | undefined;
|
|
136
|
+
times?: number | undefined;
|
|
137
|
+
max_price?: number | undefined;
|
|
138
|
+
group?: string | undefined;
|
|
139
|
+
expires_at?: string | undefined;
|
|
140
|
+
replaces?: string | undefined;
|
|
141
|
+
}[] | undefined;
|
|
142
|
+
text?: string | undefined;
|
|
143
|
+
}, {
|
|
144
|
+
rules?: {
|
|
145
|
+
chain: "base" | "ethereum" | "solana";
|
|
146
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
147
|
+
token: string;
|
|
148
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
149
|
+
reason?: string | undefined;
|
|
150
|
+
name?: string | undefined;
|
|
151
|
+
sell_amount?: string | undefined;
|
|
152
|
+
amount_usd?: number | undefined;
|
|
153
|
+
sell_percent?: number | undefined;
|
|
154
|
+
trigger_price?: number | undefined;
|
|
155
|
+
trail_pct?: number | undefined;
|
|
156
|
+
weekday?: number | undefined;
|
|
157
|
+
times?: number | undefined;
|
|
158
|
+
max_price?: number | undefined;
|
|
159
|
+
group?: string | undefined;
|
|
160
|
+
expires_at?: string | undefined;
|
|
161
|
+
replaces?: string | undefined;
|
|
162
|
+
}[] | undefined;
|
|
163
|
+
text?: string | undefined;
|
|
164
|
+
}>;
|
|
165
|
+
export declare const RulesListArgs: z.ZodObject<{
|
|
166
|
+
status: z.ZodOptional<z.ZodEnum<["proposed", "active", "paused", "done", "cancelled", "expired", "error"]>>;
|
|
167
|
+
}, "strip", z.ZodTypeAny, {
|
|
168
|
+
status?: "done" | "error" | "proposed" | "active" | "paused" | "cancelled" | "expired" | undefined;
|
|
169
|
+
}, {
|
|
170
|
+
status?: "done" | "error" | "proposed" | "active" | "paused" | "cancelled" | "expired" | undefined;
|
|
171
|
+
}>;
|
|
172
|
+
export declare const RuleIdArgs: z.ZodObject<{
|
|
173
|
+
id: z.ZodString;
|
|
174
|
+
}, "strip", z.ZodTypeAny, {
|
|
175
|
+
id: string;
|
|
176
|
+
}, {
|
|
177
|
+
id: string;
|
|
178
|
+
}>;
|
|
179
|
+
export declare const HistoryArgs: z.ZodObject<{
|
|
180
|
+
token: z.ZodEnum<["ETH", "WETH", "SOL"]>;
|
|
181
|
+
interval: z.ZodOptional<z.ZodEnum<["15m", "1h", "6h", "1d"]>>;
|
|
182
|
+
points: z.ZodOptional<z.ZodNumber>;
|
|
183
|
+
}, "strip", z.ZodTypeAny, {
|
|
184
|
+
token: "ETH" | "WETH" | "SOL";
|
|
185
|
+
interval?: "15m" | "1h" | "6h" | "1d" | undefined;
|
|
186
|
+
points?: number | undefined;
|
|
187
|
+
}, {
|
|
188
|
+
token: "ETH" | "WETH" | "SOL";
|
|
189
|
+
interval?: "15m" | "1h" | "6h" | "1d" | undefined;
|
|
190
|
+
points?: number | undefined;
|
|
191
|
+
}>;
|
|
192
|
+
/** Coinbase Exchange public candles: [time, low, high, open, close, volume], newest first, at most 300, no key. */
|
|
193
|
+
export declare function priceHistory(a: z.infer<typeof HistoryArgs>, f?: typeof fetch): Promise<{
|
|
194
|
+
ok: boolean;
|
|
195
|
+
refused: {
|
|
196
|
+
code: string;
|
|
197
|
+
reason: string;
|
|
198
|
+
};
|
|
199
|
+
token?: undefined;
|
|
200
|
+
interval?: undefined;
|
|
201
|
+
source?: undefined;
|
|
202
|
+
from?: undefined;
|
|
203
|
+
to?: undefined;
|
|
204
|
+
open?: undefined;
|
|
205
|
+
last?: undefined;
|
|
206
|
+
change_pct?: undefined;
|
|
207
|
+
high?: undefined;
|
|
208
|
+
low?: undefined;
|
|
209
|
+
candles?: undefined;
|
|
210
|
+
} | {
|
|
211
|
+
ok: boolean;
|
|
212
|
+
token: "ETH" | "WETH" | "SOL";
|
|
213
|
+
interval: "15m" | "1h" | "6h" | "1d";
|
|
214
|
+
source: string;
|
|
215
|
+
from: string;
|
|
216
|
+
to: string;
|
|
217
|
+
open: number;
|
|
218
|
+
last: number;
|
|
219
|
+
change_pct: number;
|
|
220
|
+
high: number;
|
|
221
|
+
low: number;
|
|
222
|
+
candles: {
|
|
223
|
+
t: string;
|
|
224
|
+
open: number;
|
|
225
|
+
high: number;
|
|
226
|
+
low: number;
|
|
227
|
+
close: number;
|
|
228
|
+
}[];
|
|
229
|
+
refused?: undefined;
|
|
230
|
+
}>;
|
|
65
231
|
export interface WalletAction<S extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
66
232
|
name: string;
|
|
67
233
|
description: string;
|
|
@@ -138,4 +304,240 @@ export declare const ACTIONS: readonly [WalletAction<z.ZodObject<{}, "strip", z.
|
|
|
138
304
|
}, {
|
|
139
305
|
since?: string | undefined;
|
|
140
306
|
limit?: number | undefined;
|
|
141
|
-
}
|
|
307
|
+
}>>, WalletAction<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>, WalletAction<z.ZodObject<{
|
|
308
|
+
token: z.ZodEnum<["ETH", "WETH", "SOL"]>;
|
|
309
|
+
interval: z.ZodOptional<z.ZodEnum<["15m", "1h", "6h", "1d"]>>;
|
|
310
|
+
points: z.ZodOptional<z.ZodNumber>;
|
|
311
|
+
}, "strip", z.ZodTypeAny, {
|
|
312
|
+
token: "ETH" | "WETH" | "SOL";
|
|
313
|
+
interval?: "15m" | "1h" | "6h" | "1d" | undefined;
|
|
314
|
+
points?: number | undefined;
|
|
315
|
+
}, {
|
|
316
|
+
token: "ETH" | "WETH" | "SOL";
|
|
317
|
+
interval?: "15m" | "1h" | "6h" | "1d" | undefined;
|
|
318
|
+
points?: number | undefined;
|
|
319
|
+
}>>, WalletAction<z.ZodObject<{
|
|
320
|
+
text: z.ZodOptional<z.ZodString>;
|
|
321
|
+
rules: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
322
|
+
kind: z.ZodEnum<["limit_buy", "limit_sell", "stop_loss", "take_profit", "trailing_stop", "dca"]>;
|
|
323
|
+
chain: z.ZodEnum<["base", "ethereum", "solana"]>;
|
|
324
|
+
token: z.ZodString;
|
|
325
|
+
name: z.ZodOptional<z.ZodString>;
|
|
326
|
+
amount_usd: z.ZodOptional<z.ZodNumber>;
|
|
327
|
+
sell_percent: z.ZodOptional<z.ZodNumber>;
|
|
328
|
+
sell_amount: z.ZodOptional<z.ZodString>;
|
|
329
|
+
trigger_price: z.ZodOptional<z.ZodNumber>;
|
|
330
|
+
trail_pct: z.ZodOptional<z.ZodNumber>;
|
|
331
|
+
every: z.ZodOptional<z.ZodEnum<["hour", "day", "week"]>>;
|
|
332
|
+
weekday: z.ZodOptional<z.ZodNumber>;
|
|
333
|
+
times: z.ZodOptional<z.ZodNumber>;
|
|
334
|
+
max_price: z.ZodOptional<z.ZodNumber>;
|
|
335
|
+
group: z.ZodOptional<z.ZodString>;
|
|
336
|
+
expires_at: z.ZodOptional<z.ZodString>;
|
|
337
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
338
|
+
replaces: z.ZodOptional<z.ZodString>;
|
|
339
|
+
}, "strip", z.ZodTypeAny, {
|
|
340
|
+
chain: "base" | "ethereum" | "solana";
|
|
341
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
342
|
+
token: string;
|
|
343
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
344
|
+
reason?: string | undefined;
|
|
345
|
+
name?: string | undefined;
|
|
346
|
+
sell_amount?: string | undefined;
|
|
347
|
+
amount_usd?: number | undefined;
|
|
348
|
+
sell_percent?: number | undefined;
|
|
349
|
+
trigger_price?: number | undefined;
|
|
350
|
+
trail_pct?: number | undefined;
|
|
351
|
+
weekday?: number | undefined;
|
|
352
|
+
times?: number | undefined;
|
|
353
|
+
max_price?: number | undefined;
|
|
354
|
+
group?: string | undefined;
|
|
355
|
+
expires_at?: string | undefined;
|
|
356
|
+
replaces?: string | undefined;
|
|
357
|
+
}, {
|
|
358
|
+
chain: "base" | "ethereum" | "solana";
|
|
359
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
360
|
+
token: string;
|
|
361
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
362
|
+
reason?: string | undefined;
|
|
363
|
+
name?: string | undefined;
|
|
364
|
+
sell_amount?: string | undefined;
|
|
365
|
+
amount_usd?: number | undefined;
|
|
366
|
+
sell_percent?: number | undefined;
|
|
367
|
+
trigger_price?: number | undefined;
|
|
368
|
+
trail_pct?: number | undefined;
|
|
369
|
+
weekday?: number | undefined;
|
|
370
|
+
times?: number | undefined;
|
|
371
|
+
max_price?: number | undefined;
|
|
372
|
+
group?: string | undefined;
|
|
373
|
+
expires_at?: string | undefined;
|
|
374
|
+
replaces?: string | undefined;
|
|
375
|
+
}>, "many">>;
|
|
376
|
+
}, "strip", z.ZodTypeAny, {
|
|
377
|
+
rules?: {
|
|
378
|
+
chain: "base" | "ethereum" | "solana";
|
|
379
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
380
|
+
token: string;
|
|
381
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
382
|
+
reason?: string | undefined;
|
|
383
|
+
name?: string | undefined;
|
|
384
|
+
sell_amount?: string | undefined;
|
|
385
|
+
amount_usd?: number | undefined;
|
|
386
|
+
sell_percent?: number | undefined;
|
|
387
|
+
trigger_price?: number | undefined;
|
|
388
|
+
trail_pct?: number | undefined;
|
|
389
|
+
weekday?: number | undefined;
|
|
390
|
+
times?: number | undefined;
|
|
391
|
+
max_price?: number | undefined;
|
|
392
|
+
group?: string | undefined;
|
|
393
|
+
expires_at?: string | undefined;
|
|
394
|
+
replaces?: string | undefined;
|
|
395
|
+
}[] | undefined;
|
|
396
|
+
text?: string | undefined;
|
|
397
|
+
}, {
|
|
398
|
+
rules?: {
|
|
399
|
+
chain: "base" | "ethereum" | "solana";
|
|
400
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
401
|
+
token: string;
|
|
402
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
403
|
+
reason?: string | undefined;
|
|
404
|
+
name?: string | undefined;
|
|
405
|
+
sell_amount?: string | undefined;
|
|
406
|
+
amount_usd?: number | undefined;
|
|
407
|
+
sell_percent?: number | undefined;
|
|
408
|
+
trigger_price?: number | undefined;
|
|
409
|
+
trail_pct?: number | undefined;
|
|
410
|
+
weekday?: number | undefined;
|
|
411
|
+
times?: number | undefined;
|
|
412
|
+
max_price?: number | undefined;
|
|
413
|
+
group?: string | undefined;
|
|
414
|
+
expires_at?: string | undefined;
|
|
415
|
+
replaces?: string | undefined;
|
|
416
|
+
}[] | undefined;
|
|
417
|
+
text?: string | undefined;
|
|
418
|
+
}>>, WalletAction<z.ZodObject<{
|
|
419
|
+
status: z.ZodOptional<z.ZodEnum<["proposed", "active", "paused", "done", "cancelled", "expired", "error"]>>;
|
|
420
|
+
}, "strip", z.ZodTypeAny, {
|
|
421
|
+
status?: "done" | "error" | "proposed" | "active" | "paused" | "cancelled" | "expired" | undefined;
|
|
422
|
+
}, {
|
|
423
|
+
status?: "done" | "error" | "proposed" | "active" | "paused" | "cancelled" | "expired" | undefined;
|
|
424
|
+
}>>, WalletAction<z.ZodObject<{
|
|
425
|
+
id: z.ZodString;
|
|
426
|
+
}, "strip", z.ZodTypeAny, {
|
|
427
|
+
id: string;
|
|
428
|
+
}, {
|
|
429
|
+
id: string;
|
|
430
|
+
}>>, WalletAction<z.ZodObject<{
|
|
431
|
+
chain: z.ZodEnum<["base", "ethereum", "solana"]>;
|
|
432
|
+
sell: z.ZodString;
|
|
433
|
+
buy: z.ZodString;
|
|
434
|
+
amount: z.ZodString;
|
|
435
|
+
slippage_bps: z.ZodOptional<z.ZodNumber>;
|
|
436
|
+
}, "strip", z.ZodTypeAny, {
|
|
437
|
+
chain: "base" | "ethereum" | "solana";
|
|
438
|
+
amount: string;
|
|
439
|
+
sell: string;
|
|
440
|
+
buy: string;
|
|
441
|
+
slippage_bps?: number | undefined;
|
|
442
|
+
}, {
|
|
443
|
+
chain: "base" | "ethereum" | "solana";
|
|
444
|
+
amount: string;
|
|
445
|
+
sell: string;
|
|
446
|
+
buy: string;
|
|
447
|
+
slippage_bps?: number | undefined;
|
|
448
|
+
}>>, WalletAction<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>];
|
|
449
|
+
export declare function proposeRules(w: TollkitWallet, a: z.infer<typeof ProposeArgs>, o?: {
|
|
450
|
+
neverAuto?: boolean;
|
|
451
|
+
}): Promise<{
|
|
452
|
+
ok: boolean;
|
|
453
|
+
refused: {
|
|
454
|
+
code: string;
|
|
455
|
+
reason: string;
|
|
456
|
+
};
|
|
457
|
+
unparsed: string[];
|
|
458
|
+
rules?: undefined;
|
|
459
|
+
note?: undefined;
|
|
460
|
+
} | {
|
|
461
|
+
ok: boolean;
|
|
462
|
+
refused: {
|
|
463
|
+
code: string;
|
|
464
|
+
reason: string;
|
|
465
|
+
};
|
|
466
|
+
rules: {
|
|
467
|
+
id: string;
|
|
468
|
+
status: import("./rules.js").RuleStatus;
|
|
469
|
+
description: string;
|
|
470
|
+
created_by: "owner" | "agent";
|
|
471
|
+
last_price: number | undefined;
|
|
472
|
+
fills: number;
|
|
473
|
+
last_fill: import("./rules.js").Fill | undefined;
|
|
474
|
+
error: string | undefined;
|
|
475
|
+
rule: {
|
|
476
|
+
state: undefined;
|
|
477
|
+
id: string;
|
|
478
|
+
status: import("./rules.js").RuleStatus;
|
|
479
|
+
created_by: "owner" | "agent";
|
|
480
|
+
created_at: string;
|
|
481
|
+
activated_at?: string;
|
|
482
|
+
chain: "base" | "ethereum" | "solana";
|
|
483
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
484
|
+
token: string;
|
|
485
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
486
|
+
reason?: string | undefined;
|
|
487
|
+
name?: string | undefined;
|
|
488
|
+
sell_amount?: string | undefined;
|
|
489
|
+
amount_usd?: number | undefined;
|
|
490
|
+
sell_percent?: number | undefined;
|
|
491
|
+
trigger_price?: number | undefined;
|
|
492
|
+
trail_pct?: number | undefined;
|
|
493
|
+
weekday?: number | undefined;
|
|
494
|
+
times?: number | undefined;
|
|
495
|
+
max_price?: number | undefined;
|
|
496
|
+
group?: string | undefined;
|
|
497
|
+
expires_at?: string | undefined;
|
|
498
|
+
replaces?: string | undefined;
|
|
499
|
+
};
|
|
500
|
+
}[];
|
|
501
|
+
unparsed: string[];
|
|
502
|
+
note?: undefined;
|
|
503
|
+
} | {
|
|
504
|
+
ok: boolean;
|
|
505
|
+
rules: {
|
|
506
|
+
id: string;
|
|
507
|
+
status: import("./rules.js").RuleStatus;
|
|
508
|
+
description: string;
|
|
509
|
+
created_by: "owner" | "agent";
|
|
510
|
+
last_price: number | undefined;
|
|
511
|
+
fills: number;
|
|
512
|
+
last_fill: import("./rules.js").Fill | undefined;
|
|
513
|
+
error: string | undefined;
|
|
514
|
+
rule: {
|
|
515
|
+
state: undefined;
|
|
516
|
+
id: string;
|
|
517
|
+
status: import("./rules.js").RuleStatus;
|
|
518
|
+
created_by: "owner" | "agent";
|
|
519
|
+
created_at: string;
|
|
520
|
+
activated_at?: string;
|
|
521
|
+
chain: "base" | "ethereum" | "solana";
|
|
522
|
+
kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
|
|
523
|
+
token: string;
|
|
524
|
+
every?: "hour" | "day" | "week" | undefined;
|
|
525
|
+
reason?: string | undefined;
|
|
526
|
+
name?: string | undefined;
|
|
527
|
+
sell_amount?: string | undefined;
|
|
528
|
+
amount_usd?: number | undefined;
|
|
529
|
+
sell_percent?: number | undefined;
|
|
530
|
+
trigger_price?: number | undefined;
|
|
531
|
+
trail_pct?: number | undefined;
|
|
532
|
+
weekday?: number | undefined;
|
|
533
|
+
times?: number | undefined;
|
|
534
|
+
max_price?: number | undefined;
|
|
535
|
+
group?: string | undefined;
|
|
536
|
+
expires_at?: string | undefined;
|
|
537
|
+
replaces?: string | undefined;
|
|
538
|
+
};
|
|
539
|
+
}[];
|
|
540
|
+
unparsed: string[];
|
|
541
|
+
note: string;
|
|
542
|
+
refused?: undefined;
|
|
543
|
+
}>;
|
package/dist/actions.js
CHANGED
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import { resolveToken, toAtomic } from "./tokens.js";
|
|
9
9
|
import { checkSeller } from "./seller.js";
|
|
10
|
+
import { RuleInput, describeRule, ruleProblem } from "./rules.js";
|
|
11
|
+
import { parseStrategy } from "./parse.js";
|
|
12
|
+
import { PriceFeed } from "./prices.js";
|
|
10
13
|
const MAX_BODY = 50_000;
|
|
11
14
|
export const SwapArgs = z.object({
|
|
12
15
|
chain: z.enum(["base", "ethereum", "solana"]).describe("Chain to trade on"),
|
|
@@ -27,6 +30,36 @@ export const ReceiptArgs = z.object({
|
|
|
27
30
|
limit: z.number().int().min(1).max(500).optional(),
|
|
28
31
|
});
|
|
29
32
|
export const NoArgs = z.object({});
|
|
33
|
+
export const ProposeArgs = z.object({
|
|
34
|
+
text: z.string().max(2000).optional().describe("Plain-English strategy"),
|
|
35
|
+
rules: z.array(RuleInput).max(10).optional().describe("Exact rules instead of text"),
|
|
36
|
+
});
|
|
37
|
+
export const RulesListArgs = z.object({ status: z.enum(["proposed", "active", "paused", "done", "cancelled", "expired", "error"]).optional() });
|
|
38
|
+
export const RuleIdArgs = z.object({ id: z.string().min(4).max(40) });
|
|
39
|
+
export const HistoryArgs = z.object({
|
|
40
|
+
token: z.enum(["ETH", "WETH", "SOL"]).describe("ETH (also WETH) or SOL; prices from Coinbase Exchange"),
|
|
41
|
+
interval: z.enum(["15m", "1h", "6h", "1d"]).optional().describe("Candle size (default 1h)"),
|
|
42
|
+
points: z.number().int().min(5).max(200).optional().describe("How many candles, newest last (default 48)"),
|
|
43
|
+
});
|
|
44
|
+
const GRAN = { "15m": 900, "1h": 3600, "6h": 21600, "1d": 86400 };
|
|
45
|
+
/** Coinbase Exchange public candles: [time, low, high, open, close, volume], newest first, at most 300, no key. */
|
|
46
|
+
export async function priceHistory(a, f = fetch) {
|
|
47
|
+
const product = a.token === "SOL" ? "SOL-USD" : "ETH-USD", interval = a.interval ?? "1h";
|
|
48
|
+
const r = await f(`https://api.exchange.coinbase.com/products/${product}/candles?granularity=${GRAN[interval]}`, { headers: { accept: "application/json" }, signal: AbortSignal.timeout(10_000) });
|
|
49
|
+
if (!r.ok)
|
|
50
|
+
return { ok: false, refused: { code: "unavailable", reason: `Price history isn't available right now (HTTP ${r.status}).` } };
|
|
51
|
+
const rows = (await r.json()).sort((x, y) => x[0] - y[0]).slice(-(a.points ?? 48));
|
|
52
|
+
if (!rows.length)
|
|
53
|
+
return { ok: false, refused: { code: "unavailable", reason: "No price history returned." } };
|
|
54
|
+
const closes = rows.map((x) => x[4]), first = rows[0][3], last = closes.at(-1);
|
|
55
|
+
return {
|
|
56
|
+
ok: true, token: a.token, interval, source: "Coinbase Exchange",
|
|
57
|
+
from: new Date(rows[0][0] * 1000).toISOString(), to: new Date(rows.at(-1)[0] * 1000).toISOString(),
|
|
58
|
+
open: first, last, change_pct: +(((last - first) / first) * 100).toFixed(2),
|
|
59
|
+
high: Math.max(...rows.map((x) => x[2])), low: Math.min(...rows.map((x) => x[1])),
|
|
60
|
+
candles: rows.map(([t, low, high, open, close]) => ({ t: new Date(t * 1000).toISOString(), open, high, low, close })),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
30
63
|
async function swapRequest(w, a) {
|
|
31
64
|
const chain = a.chain;
|
|
32
65
|
const [sell, buy] = await Promise.all([resolveToken(chain, a.sell), resolveToken(chain, a.buy)]);
|
|
@@ -76,5 +109,71 @@ export const ACTIONS = [
|
|
|
76
109
|
def({ name: "receipts", spends: false, schema: ReceiptArgs,
|
|
77
110
|
description: "Recent trades, payments and withdrawals with amounts, fees and transaction hashes.",
|
|
78
111
|
run: async (w, a) => w.receipts(a.since).slice(-(a.limit ?? 50)) }),
|
|
112
|
+
def({ name: "market_prices", spends: false, schema: NoArgs,
|
|
113
|
+
description: "Live USD prices and 24-hour change for ETH, SOL and USDT (Coinbase Exchange; USDC is $1).",
|
|
114
|
+
run: async () => { const f = new PriceFeed(); await f.refresh(); return f.snapshot(); } }),
|
|
115
|
+
def({ name: "price_history", spends: false, schema: HistoryArgs,
|
|
116
|
+
description: "Recent price candles for ETH or SOL (open, high, low, close) with the period's change, high and low. Use it to judge trends and to set sensible trigger prices.",
|
|
117
|
+
run: async (_w, a) => priceHistory(a) }),
|
|
118
|
+
def({ name: "autopilot_propose", spends: false, schema: ProposeArgs,
|
|
119
|
+
description: "Set up autopilot rules: limit buy/sell, stop-loss, take-profit, trailing stop, recurring buy (DCA). Give plain English in `text` (e.g. \"buy $25 of SOL every Monday; sell half my ETH if it rises 10% and all if it falls 8%\") or exact `rules`. Give each rule a short plain `reason`; to change an existing rule, propose its replacement with `replaces: <id>`. Unless the owner allows auto, rules wait for the owner to turn them on in the dashboard; fills follow the owner's limits.",
|
|
120
|
+
run: async (w, a) => proposeRules(w, a) }),
|
|
121
|
+
def({ name: "autopilot_rules", spends: false, schema: RulesListArgs,
|
|
122
|
+
description: "The autopilot's rules with a plain description of each, status, last price seen, fills and any error.",
|
|
123
|
+
run: async (w, a) => w.rules().list().filter((r) => !a.status || r.status === a.status).map(showRule) }),
|
|
124
|
+
def({ name: "autopilot_cancel", spends: false, schema: RuleIdArgs,
|
|
125
|
+
description: "Cancel an autopilot rule so it never trades.",
|
|
126
|
+
run: async (w, a) => { try {
|
|
127
|
+
return showRule(await w.rules().setStatus(a.id, "cancelled"));
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
return bad(e);
|
|
131
|
+
} } }),
|
|
132
|
+
def({ name: "paper_swap", spends: false, schema: SwapArgs,
|
|
133
|
+
description: "Practice a swap with pretend money at the real live quote (fees included). Same limits as real trades; nothing is signed or sent.",
|
|
134
|
+
run: async (w, a) => { try {
|
|
135
|
+
const { req, sell, buy } = await swapRequest(w, a);
|
|
136
|
+
return { ...(await w.paper().swap(req)), sell, buy, paper: true };
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
return bad(e);
|
|
140
|
+
} } }),
|
|
141
|
+
def({ name: "paper_status", spends: false, schema: NoArgs,
|
|
142
|
+
description: "Paper-trading balances, number of practice fills and fees they would have cost.",
|
|
143
|
+
run: async (w) => w.paper().summary() }),
|
|
79
144
|
];
|
|
145
|
+
function showRule(r) {
|
|
146
|
+
const last = r.state.fills.at(-1);
|
|
147
|
+
return { id: r.id, status: r.status, description: describeRule(r), created_by: r.created_by, last_price: r.state.last_price, fills: r.state.fills.filter((f) => f.ok).length, last_fill: last, error: r.state.last_error, rule: { ...r, state: undefined } };
|
|
148
|
+
}
|
|
149
|
+
export async function proposeRules(w, a, o = {}) {
|
|
150
|
+
let drafts = [...(a.rules ?? [])], unparsed = [];
|
|
151
|
+
if (a.text) {
|
|
152
|
+
const feed = new PriceFeed();
|
|
153
|
+
await feed.refresh();
|
|
154
|
+
const pr = parseStrategy(a.text, (t) => feed.snapshot().prices[t.toUpperCase()]?.usd);
|
|
155
|
+
drafts = drafts.concat(pr.rules);
|
|
156
|
+
unparsed = pr.unparsed;
|
|
157
|
+
}
|
|
158
|
+
if (!drafts.length)
|
|
159
|
+
return { ok: false, refused: { code: "nothing_understood", reason: "No rules were understood. Try e.g. \"buy $25 of SOL every Monday\" or pass `rules`." }, unparsed };
|
|
160
|
+
for (const d of drafts) {
|
|
161
|
+
const why = ruleProblem(d);
|
|
162
|
+
if (why)
|
|
163
|
+
return { ok: false, refused: { code: "bad_rule", reason: `${describeRule(d)}: ${why}` }, unparsed };
|
|
164
|
+
}
|
|
165
|
+
const store = w.rules(), auto = !o.neverAuto && w.policy.agent_rules === "auto", made = [];
|
|
166
|
+
for (const d of drafts) {
|
|
167
|
+
try {
|
|
168
|
+
made.push(showRule(await store.add(d, "agent", auto)));
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
return { ok: false, refused: { code: "bad_rule", reason: `${describeRule(d)}: ${e.message}` }, rules: made, unparsed };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
ok: true, rules: made, unparsed,
|
|
176
|
+
note: auto ? "These rules are on. The autopilot runs while the wallet's dashboard or `tollkit-wallet autopilot` is running." : "These rules are waiting for the owner to turn them on in the dashboard (Autopilot tab) or with `tollkit-wallet rule on <id>`.",
|
|
177
|
+
};
|
|
178
|
+
}
|
|
80
179
|
//# sourceMappingURL=actions.js.map
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC3E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;IACxG,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACzE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;IAC5F,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;CAC9I,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACnD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACrE,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC7F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACxE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CACrF,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAChJ,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IACvG,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC3F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;CAC3G,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAW,CAAC;AAC3E,mHAAmH;AACnH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,CAA8B,EAAE,IAAkB,KAAK;IACxF,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC;IACzF,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,8CAA8C,OAAO,wBAAwB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnM,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,iDAAiD,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;IACzI,MAAM,IAAI,GAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IACrG,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,4BAA4B,EAAE,EAAE,CAAC;IAC/G,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;IACnF,OAAO;QACL,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB;QAC/D,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;QACtG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QACnF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;KACvH,CAAC;AACJ,CAAC;AAUD,KAAK,UAAU,WAAW,CAAC,CAAgB,EAAE,CAA2B;IACtE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAc,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAClN,CAAC;AACD,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAG,CAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAE5G,MAAM,GAAG,GAAG,CAAyB,CAAkB,EAAE,EAAE,CAAC,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;QACxD,WAAW,EAAE,yGAAyG;QACtH,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACjC,GAAG,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;QAC1D,WAAW,EAAE,kEAAkE;QAC/E,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;IACnC,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ;QACvD,WAAW,EAAE,4HAA4H;QACzI,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;YAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrK,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ;QAChD,WAAW,EAAE,oKAAoK;QACjL,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;YAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpK,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;QACpD,WAAW,EAAE,gNAAgN;QAC7N,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAClB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClH,IAAI,IAAwB,CAAC;YAC7B,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAAC,IAAI,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,iBAAiB,CAAC,CAAC,MAAM,GAAG,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAC7J,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;QACnN,CAAC,EAAE,CAAC;IACN,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU;QAC3D,WAAW,EAAE,0IAA0I;QACvJ,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7D,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW;QACxD,WAAW,EAAE,oFAAoF;QACjG,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACrE,GAAG,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;QACxD,WAAW,EAAE,2FAA2F;QACxG,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,GAAG,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW;QAC7D,WAAW,EAAE,iKAAiK;QAC9K,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,GAAG,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW;QACjE,WAAW,EAAE,geAAge;QAC7e,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC5C,GAAG,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa;QACjE,WAAW,EAAE,uGAAuG;QACpH,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1G,GAAG,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU;QAC/D,WAAW,EAAE,8CAA8C;QAC3D,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;YAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjI,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ;QACvD,WAAW,EAAE,mIAAmI;QAChJ,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;YAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzL,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;QACvD,WAAW,EAAE,iFAAiF;QAC9F,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;CAClC,CAAC;AAEX,SAAS,QAAQ,CAAC,CAAO;IACvB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC;AAC/P,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,CAAgB,EAAE,CAA8B,EAAE,IAA6B,EAAE;IAClH,IAAI,MAAM,GAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAa,EAAE,CAAC;IACxE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACnD,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACtF,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,qFAAqF,EAAE,EAAE,QAAQ,EAAE,CAAC;IAC3L,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QAAC,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,GAAG;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;IAAC,CAAC;IACrK,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,IAAI,GAAG,EAAmC,CAAC;IAC5H,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,KAAM,CAAW,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAAC,CAAC;IAAC,CAAC;IAC5O,OAAO;QACL,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ;QAC/B,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,+GAA+G,CAAC,CAAC,CAAC,+HAA+H;KAC/P,CAAC;AACJ,CAAC"}
|