@canister-software/consensus-cli 0.1.0-beta.3 → 0.1.0-beta.4

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 CHANGED
@@ -1,67 +1,274 @@
1
-
2
- <p align="center">
3
- <img src="./assets/setup.gif" alt="Consensus Client Setup Demo" width="800">
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/Demali-876/consensus/main/assets/dark-logo.png" alt="Consensus logo" width="220" />
4
3
  </p>
5
- <h1 align="center">Consensus Client</h1>
4
+
5
+ <h1 align="center">Consensus CLI</h1>
6
6
 
7
7
  <p align="center">
8
- CLI tool for setting up and managing access credentials for the Consensus protocol.<br>
9
- Creates a wallet, registers it, and generates your local configuration.<br>
8
+ TypeScript SDK + CLI for the <strong>Consensus Network</strong>.<br/>
9
+ Route outbound HTTP through decentralized proxy nodes and open paid WebSocket sessions with x402 micropayments.
10
10
  </p>
11
11
 
12
12
  <p align="center">
13
- <a href="#"><img alt="Version" src="https://img.shields.io/badge/version-alpha-orange"></a>
14
- <a href="LICENSE"><img alt="License" src="https://img.shields.io/badge/license-BUSL--1.1-blue"></a>
15
- <a href="https://github.com/Demali-876/consensus/stargazers">
16
- <img alt="GitHub stars" src="https://img.shields.io/github/stars/Demali-876/consensus?style=social">
17
- </a>
18
- <a href="#"><img alt="Status" src="https://img.shields.io/badge/status-experimental-yellow"></a>
13
+ <a href="https://www.npmjs.com/package/@canister-software/consensus-cli"><img alt="npm version" src="https://img.shields.io/npm/v/@canister-software/consensus-cli.svg"/></a>
14
+ <a href="LICENSE"><img alt="License" src="https://img.shields.io/badge/license-BUSL--1.1-blue"/></a>
15
+ <a href="https://github.com/Demali-876/consensus/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/Demali-876/consensus?style=social"/></a>
16
+ <a href="#"><img alt="Status" src="https://img.shields.io/badge/status-beta-orange"/></a>
19
17
  </p>
20
18
 
21
- ## Setup Guide
19
+ ---
20
+
21
+ - [Installation](#installation)
22
+ - [Environment Setup](#environment-setup)
23
+ - [ProxyClient](#proxyclient)
24
+ - [ProxyClient Options](#proxyclient-options)
25
+ - [Auto Strategy (Default)](#auto-strategy-default)
26
+ - [Manual Strategy](#manual-strategy)
27
+ - [Per-Request Node Selection](#per-request-node-selection)
28
+ - [SocketClient](#socketclient)
29
+ - [SocketClient Options](#socketclient-options)
30
+ - [Billing Models](#billing-models)
31
+ - [Basic Usage](#basic-usage)
32
+ - [Node Filtering](#node-filtering)
33
+ - [Reconnection](#reconnection)
34
+ - [Safe Mode](#safe-mode)
35
+ - [Session State](#session-state)
36
+ - [CLI Commands](#cli-commands)
37
+ - [Setup Process](#setup-process)
38
+ - [Security](#security)
39
+
40
+ ---
22
41
 
23
- Install the Consensus client library:
42
+ ## Installation
24
43
 
25
44
  ```bash
26
- npm install consensus
45
+ npm install @canister-software/consensus-cli
46
+ ```
47
+
48
+ ---
49
+
50
+ ## Environment Setup
51
+
52
+ Create a `.env` file in the root of your project with your CDP credentials:
53
+
54
+ ```env
55
+ CDP_API_KEY_ID=your_cdp_key_id
56
+ CDP_API_KEY_SECRET=your_cdp_key_secret
57
+ CDP_WALLET_SECRET=your_cdp_wallet_secret
58
+ ```
59
+
60
+ Get your CDP credentials at [portal.cdp.coinbase.com](https://portal.cdp.coinbase.com/).
61
+
62
+ You can also override the default server with:
63
+
64
+ ```env
65
+ CONSENSUS_SERVER_URL=https://your-custom-node.example.com
66
+ ```
67
+
68
+ ---
69
+
70
+ ## ProxyClient
71
+
72
+ `ProxyClient(fetchWithPayment, options)` returns Express-compatible middleware that routes your outbound HTTP requests through Consensus proxy nodes, handling x402 payments automatically.
73
+
74
+ ### ProxyClient Options
75
+
76
+ | Option | Type | Default | Description |
77
+ |---|---|---|---|
78
+ | `mode` | `"inclusive" \| "exclusive"` | `"inclusive"` | `inclusive` proxies all routes **except** those in `routes`. `exclusive` proxies **only** the listed routes. |
79
+ | `routes` | `string[]` | `[]` | Route paths to include or exclude, depending on `mode`. |
80
+ | `matchSubroutes` | `boolean` | `false` | When `true`, a route match also applies to all sub-paths beneath it. |
81
+ | `strategy` | `"auto" \| "manual"` | `"auto"` | `auto` transparently intercepts `fetch()` calls within middleware. `manual` exposes `req.consensus.fetch()` for explicit control. |
82
+ | `cache_ttl` | `number` | — | TTL in seconds for node-level response caching. |
83
+ | `verbose` | `boolean` | `false` | Enables verbose response metadata from the proxy node. |
84
+ | `node_region` | `string` | — | Prefer proxy nodes in a specific geographic region. |
85
+ | `node_domain` | `string` | — | Route through a specific node domain. |
86
+ | `node_exclude` | `string` | — | Exclude a specific node domain from selection. |
87
+
88
+ ### Auto Strategy (Default)
89
+
90
+ In `auto` mode, `ProxyClient` intercepts the global `fetch()` within the request context so your route handlers require no changes.
91
+
92
+ ```ts
93
+ import express from "express";
94
+ import { ProxyClient } from "@canister-software/consensus-cli";
95
+
96
+ const app = express();
97
+
98
+ // Proxy only /price — all other routes use direct fetch
99
+ app.use(
100
+ ProxyClient(fetchWithPayment, {
101
+ mode: "exclusive",
102
+ routes: ["/price"],
103
+ matchSubroutes: false,
104
+ strategy: "auto",
105
+ cache_ttl: 60,
106
+ verbose: true,
107
+ })
108
+ );
109
+
110
+ // No changes needed — fetch() is automatically proxied for /price
111
+ app.get("/price", async (_req, res) => {
112
+ const response = await fetch("https://api.example.com/price");
113
+ res.json(await response.json());
114
+ });
115
+ ```
116
+
117
+ ### Manual Strategy
118
+
119
+ In `manual` mode, the proxy is not applied automatically. Use `req.consensus.fetch()` to explicitly proxy individual requests, or `req.consensus.request()` for a lower-level structured payload:
120
+
121
+ ```ts
122
+ app.use(ProxyClient(fetchWithPayment, { strategy: "manual" }));
123
+
124
+ app.get("/data", async (req, res) => {
125
+ // Proxied fetch — returns a standard Response
126
+ const response = await req.consensus.fetch("https://api.example.com/data");
127
+ res.json(await response.json());
128
+
129
+ // Or use the structured request helper — returns a ProxyResponseShape
130
+ const result = await req.consensus.request({
131
+ target_url: "https://api.example.com/data",
132
+ method: "GET",
133
+ });
134
+ res.json(result.data);
135
+ });
136
+ ```
137
+
138
+ ### Per-Request Node Selection
139
+
140
+ Both `req.consensus.fetch()` and `req.consensus.request()` accept per-request options as a second argument to override node routing at the call level:
141
+
142
+ ```ts
143
+ const response = await req.consensus.fetch(
144
+ "https://api.example.com/data",
145
+ { method: "GET" },
146
+ { node_region: "us-east", cache_ttl: 30 }
147
+ );
27
148
  ```
28
149
 
29
- The Consensus proxy uses Coinbase Developer Platform (CDP) to create and manage wallets. You'll need to provide CDP credentials in your project's root directory.
150
+ ---
151
+
152
+ ## SocketClient
153
+
154
+ `SocketClient(fetchWithPayment, options)` returns a client for opening paid WebSocket sessions through the Consensus Network. Token acquisition and reconnection are handled automatically.
155
+
156
+ ### SocketClient Options
157
+
158
+ | Option | Type | Default | Description |
159
+ |---|---|---|---|
160
+ | `openTimeoutMs` | `number` | `12000` | Milliseconds to wait for the WebSocket connection to open before timing out. |
161
+ | `reconnectIntervalMs` | `number` | `2000` | Milliseconds between automatic reconnection attempts. |
162
+ | `defaults` | `ConsensusSocketTokenParams` | — | Default token parameters applied to every `requestToken()` call unless overridden. |
163
+ | `webSocketFactory` | `constructor` | auto-detected | Custom WebSocket constructor (browser `WebSocket` or `ws` for Node.js). Auto-detected if not provided. |
164
+
165
+ ### Billing Models
166
+
167
+ Token requests accept a `model` parameter to control how your session is billed:
30
168
 
31
- ## Environment Variables
169
+ | Model | Description |
170
+ |---|---|
171
+ | `"hybrid"` | Billed by both time and data (default). |
172
+ | `"time"` | Billed by duration only (`minutes`). |
173
+ | `"data"` | Billed by data transfer only (`megabytes`). |
32
174
 
33
- Create a `.env` file in the root of your project with the following required variables:
175
+ ### Basic Usage
34
176
 
35
- | Variable | Description |
36
- |----------|-------------|
37
- | <kbd>CDP_API_KEY_ID</kbd> | Your CDP API key ID |
38
- | <kbd>CDP_API_KEY_SECRET`</kbd> | Your CDP API key secret |
39
- | <kbd>CDP_WALLET_SECRET</kbd> | Your CDP wallet secret |
177
+ ```ts
178
+ import { SocketClient } from "@canister-software/consensus-cli";
40
179
 
41
- Get your CDP credentials at: [https://portal.cdp.coinbase.com/](https://portal.cdp.coinbase.com/)
180
+ const client = SocketClient(fetchWithPayment, {
181
+ reconnectIntervalMs: 2000,
182
+ });
42
183
 
43
- ## Commands
184
+ // Request a session token — pays for a time-based session
185
+ const auth = await client.requestToken({
186
+ model: "time",
187
+ minutes: 5,
188
+ megabytes: 0,
189
+ });
44
190
 
45
- These are the commands avaialable in the Consesnsus CLI:
191
+ // Connect using the token returns a managed session
192
+ const session = await client.connect(auth);
193
+
194
+ session.on("open", () => console.log("Connected"));
195
+ session.on("message", (msg) => console.log("Received:", msg));
196
+ session.on("error", (err) => console.error("Error:", err));
197
+ session.on("close", () => console.log("Disconnected"));
198
+
199
+ session.send("hello");
200
+
201
+ // Close when done
202
+ session.close();
203
+ ```
204
+
205
+ ### Node Filtering
206
+
207
+ Target specific proxy nodes for WebSocket sessions:
208
+
209
+ ```ts
210
+ const auth = await client.requestToken({
211
+ model: "hybrid",
212
+ minutes: 10,
213
+ megabytes: 100,
214
+ nodeRegion: "eu-west",
215
+ nodeExclude: "node.example.com",
216
+ });
217
+ ```
46
218
 
47
- | Command | Description |
48
- |--- |--- |
49
- | <kbd>setup</kbd> | Create new account and register with `x402-proxy` |
50
- | <kbd>setup --force</kbd> | Force create new account (reset existing) |
51
- | <kbd>help</kbd> | Show help message |
219
+ ### Reconnection
220
+
221
+ Sessions reconnect automatically on unexpected disconnects. When reconnecting, `SocketClient` re-requests a fresh token using the same parameters from the last `requestToken()` call and re-establishes the WebSocket connection. Set `reconnectIntervalMs` to control retry pacing.
222
+
223
+ To stop reconnection, call `session.close()` — this sets an internal flag that suppresses all automatic retries.
224
+
225
+ ### Safe Mode
226
+
227
+ Both `requestToken()` and `connect()` support a `{ safe: true }` option that catches errors and returns a result object instead of throwing:
228
+
229
+ ```ts
230
+ const result = await client.requestToken({ model: "time", minutes: 1 }, { safe: true });
231
+
232
+ if (!result.ok) {
233
+ console.error("Token request failed:", result.error);
234
+ } else {
235
+ const session = await client.connect(result.data);
236
+ }
237
+ ```
238
+
239
+ ### Session State
240
+
241
+ ```ts
242
+ const state = session.getState();
243
+ // { connected: boolean, reconnecting: boolean, closedByCaller: boolean }
244
+ ```
245
+
246
+ ---
247
+
248
+ ## CLI Commands
249
+
250
+ | Command | Description |
251
+ |---|---|
252
+ | `consensus setup` | Create a wallet and register it with the x402 proxy. |
253
+ | `consensus setup --force` | Force re-create the account, resetting any existing configuration. |
254
+ | `consensus help` | Show help message. |
255
+
256
+ ---
52
257
 
53
258
  ## Setup Process
54
259
 
55
- When you run the setup command, the Consensus client SDK will:
260
+ Run `consensus setup` to initialize your environment. The CLI will:
261
+
262
+ 1. **Create a wallet** using your CDP credentials.
263
+ 2. **Generate `.consensus-config.json`** containing your wallet and delegation credentials.
264
+ 3. **Export wallet authorization** to the x402 proxy for payment delegation.
265
+ 4. **Add `.consensus-config.json` to `.gitignore`** automatically to prevent accidental commits.
266
+
267
+ ---
56
268
 
57
- 1. **Create a wallet** using your CDP credentials
58
- 2. **Generate a configuration file** (`.consensus-config.json`) containing your credentials
59
- 3. **Export wallet authorization** to the x402 proxy for payment delegation
269
+ ## Security
60
270
 
61
- > [!CAUTION]
62
- > **DO NOT EXPOSE** the `.consensus-config.json` file as it contains sensitive information.
63
- > The client automatically adds this file to `.gitignore` to prevent accidental commits.
271
+ > **⚠️ Never commit `.consensus-config.json`.** It contains sensitive wallet credentials. The setup command adds it to `.gitignore` automatically, but verify this if you use a custom `.gitignore` setup.
64
272
 
65
- > [!WARNING]
66
- > **DO NOT keep large amounts** in the proxy-delegated wallet - if the proxy is compromised, your delegation could be at risk.
273
+ >**DO NOT keep large amounts** in the proxy-delegated wallet - if the proxy is compromised, your delegation could be at risk.
67
274
  > Only fund the wallet with amounts you're comfortable delegating for API payments.
Binary file
@@ -0,0 +1,73 @@
1
+ <svg width="33" height="32" viewBox="0 0 33 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M30.7911 16.3723C28.0677 13.6502 23.6662 13.6502 20.9427 16.3723C18.2194 19.0945 18.2194 23.4939 20.9427 26.216C23.6662 28.9382 28.0677 28.9382 30.7911 26.216C33.5058 23.4939 33.5058 19.0857 30.7911 16.3723ZM23.0776 24.0734C21.5578 22.5543 21.5578 20.0867 23.0776 18.5676C24.5974 17.0485 27.0661 17.0485 28.586 18.5676C30.1059 20.0867 30.1059 22.5543 28.586 24.0734C27.0661 25.5926 24.6063 25.5926 23.0776 24.0734Z" fill="url(#paint0_linear_230_97)"/>
3
+ <path d="M25.9416 26.6536C26.1908 26.7599 26.4488 26.822 26.707 26.884C29.0656 27.451 31.4332 26.1132 32.3677 23.8983C32.3766 23.8894 32.3766 23.8717 32.3766 23.8629C32.8928 22.5073 32.9462 21.0898 32.6347 19.7786C31.6557 19.4419 30.6766 18.9635 29.6442 18.8306C29.3594 18.7952 29.0834 18.804 28.7986 18.8306C29.7688 19.9646 30.0536 21.6125 29.3416 23.0832C28.5405 24.7488 26.627 25.6436 24.8291 25.1918C23.9122 24.9614 23.1468 24.4476 22.6306 23.7654C23.3872 25.0146 24.4017 26.0157 25.9416 26.6536Z" fill="url(#paint1_linear_230_97)"/>
4
+ <path d="M32.5784 23.2837C32.4356 23.7949 32.1947 24.2881 31.9092 24.7365C31.6148 25.1848 31.2579 25.6063 30.8386 25.947C30.4193 26.2968 29.9375 26.5658 29.429 26.7451C28.9116 26.9245 28.3673 27.0052 27.823 27.0142C27.2788 27.0142 26.7345 26.9335 26.2171 26.7631C25.6997 26.5927 25.218 26.3416 24.7717 26.0278C24.3257 25.7229 23.9242 25.3552 23.5673 24.9606C23.2105 24.5571 22.8893 24.1267 22.6305 23.6604C22.9339 24.0998 23.2819 24.5033 23.6565 24.8709C24.0312 25.2386 24.4417 25.5794 24.8788 25.8574C25.7532 26.4223 26.7792 26.772 27.8142 26.7541C28.849 26.7541 29.884 26.4313 30.7048 25.7946C31.1241 25.4718 31.4899 25.0862 31.8022 24.6647C32.1144 24.2432 32.3821 23.7769 32.5784 23.2837Z" fill="white"/>
5
+ <path d="M25.8698 15.9777C25.6202 15.8705 25.3618 15.7902 25.1121 15.7277C22.7766 15.1116 20.3877 16.4062 19.4161 18.6025C19.4071 18.6114 19.4071 18.6293 19.3983 18.6382C18.8633 19.9952 18.7742 21.4148 19.0594 22.7361C20.0222 23.0932 20.9938 23.5932 22.0189 23.745C22.2953 23.7896 22.5359 23.7896 22.8213 23.7628C21.8853 22.6022 21.6624 20.9416 22.3933 19.4774C23.2313 17.8257 25.1567 16.9776 26.9395 17.4686C27.8488 17.7186 28.5975 18.2543 29.0967 18.9507C28.3836 17.6829 27.3942 16.6472 25.8698 15.9777Z" fill="url(#paint2_linear_230_97)"/>
6
+ <path d="M19.1489 19.0559C19.3014 18.5636 19.5526 18.1058 19.8486 17.6739C20.1536 17.2506 20.5123 16.8533 20.9428 16.5337C21.3645 16.2054 21.8579 15.9636 22.3781 15.7995C22.8983 15.6353 23.4455 15.5663 23.9838 15.5749C24.5308 15.5835 25.0691 15.6785 25.5805 15.8513C26.0916 16.0327 26.5761 16.2746 27.0066 16.5855C27.4462 16.8878 27.8318 17.2506 28.1907 17.6393C28.5404 18.028 28.8544 18.4513 29.0967 18.9004C28.8006 18.4772 28.4598 18.0798 28.092 17.7171C27.7242 17.3543 27.3206 17.026 26.8899 16.741C26.0289 16.1795 25.0153 15.8254 23.9747 15.8254C22.9341 15.7995 21.9026 16.0931 21.0595 16.6892C20.6379 16.9828 20.2701 17.3456 19.9472 17.743C19.6334 18.1403 19.3552 18.5808 19.1489 19.0559Z" fill="white"/>
7
+ <path d="M16.8119 21.3508C16.8401 17.5003 13.7514 14.3645 9.90088 14.3345C6.05044 14.3045 2.91618 17.3917 2.88792 21.2422C2.85976 25.0928 5.94843 28.2285 9.79896 28.2585C13.6433 28.2823 16.7838 25.1889 16.8119 21.3508ZM5.91252 21.2596C5.92829 19.1108 7.68623 17.3792 9.83501 17.3959C11.9838 17.4126 13.7162 19.1714 13.7005 21.3203C13.6848 23.4692 11.9268 25.2007 9.77803 25.184C7.62911 25.1672 5.90295 23.4147 5.91252 21.2596Z" fill="url(#paint3_linear_230_97)"/>
8
+ <path d="M6.08418 25.1106C6.1833 25.3628 6.32017 25.5901 6.45717 25.8176C7.70836 27.8958 10.3228 28.6438 12.5566 27.7553C12.5692 27.7554 12.5818 27.743 12.5881 27.7367C13.9161 27.1533 14.9635 26.1966 15.679 25.0545C15.2318 24.1208 14.8856 23.0875 14.2558 22.2587C14.0812 22.031 13.8812 21.8406 13.6625 21.6563C13.5353 23.1433 12.5612 24.5026 11.0138 25.0274C9.26495 25.6255 7.28467 24.8902 6.34493 23.2922C5.86561 22.4773 5.69461 21.5715 5.81839 20.725C5.45932 22.1406 5.45804 23.566 6.08418 25.1106Z" fill="url(#paint4_linear_230_97)"/>
9
+ <path d="M13.1423 27.4742C12.678 27.7311 12.1576 27.9056 11.6378 28.0169C11.1117 28.1217 10.561 28.1633 10.024 28.1037C9.48061 28.0503 8.95087 27.8959 8.46622 27.6594C7.97535 27.4167 7.53592 27.0856 7.1476 26.7041C6.76567 26.3163 6.44124 25.872 6.19954 25.3838C5.95783 24.8956 5.79866 24.3762 5.70913 23.8381C5.61334 23.3063 5.59352 22.7622 5.62421 22.2311C5.6613 21.6937 5.74258 21.1629 5.89318 20.6513C5.79298 21.1757 5.7497 21.7068 5.7507 22.2318C5.75168 22.7567 5.797 23.2883 5.90564 23.7948C6.11678 24.8142 6.5876 25.7905 7.32668 26.5153C8.05286 27.2525 9.00914 27.7634 10.0387 27.9013C10.563 27.9735 11.0944 27.9636 11.6138 27.8902C12.1331 27.817 12.6532 27.6804 13.1423 27.4742Z" fill="white"/>
10
+ <path d="M13.6397 17.5677C13.5409 17.3147 13.4168 17.0743 13.2861 16.8525C12.0861 14.7564 9.48742 13.9629 7.2409 14.8119C7.22822 14.8117 7.21551 14.8242 7.20294 14.8242C5.86073 15.3954 4.78685 16.3281 4.04564 17.4585C4.46686 18.395 4.79249 19.4381 5.40372 20.2749C5.56586 20.5032 5.73468 20.6745 5.95405 20.8591C6.12411 19.3778 7.15074 18.0537 8.70677 17.5469C10.4715 16.9849 12.4269 17.7614 13.3282 19.3761C13.7882 20.1994 13.932 21.1087 13.7861 21.953C14.1889 20.5553 14.2324 19.1236 13.6397 17.5677Z" fill="url(#paint5_linear_230_97)"/>
11
+ <path d="M6.73038 14.9397C7.18821 14.7029 7.69059 14.5605 8.20604 14.4684C8.72157 14.3886 9.25641 14.3654 9.78621 14.4478C10.3159 14.5179 10.8345 14.6996 11.3164 14.9551C11.7984 15.2105 12.2316 15.5519 12.6032 15.9415C12.981 16.3372 13.291 16.7874 13.5268 17.2729C13.7562 17.7644 13.9239 18.2793 14.0045 18.8042C14.0976 19.3295 14.1097 19.8588 14.0847 20.3873C14.0531 20.9092 13.9719 21.4299 13.822 21.9177C13.9157 21.4098 13.9596 20.8881 13.96 20.3715C13.9603 19.8549 13.911 19.337 13.8118 18.8302C13.6076 17.8228 13.1486 16.8521 12.4184 16.1108C11.7067 15.3513 10.7736 14.8224 9.75733 14.64C9.25222 14.5458 8.73565 14.5383 8.22599 14.5871C7.72268 14.6423 7.21367 14.7533 6.73038 14.9397Z" fill="white"/>
12
+ <path d="M14.7943 2.53401C11.4081 4.36729 10.1519 8.58567 11.9836 11.9728C13.8153 15.3598 18.0317 16.6154 21.4178 14.7822C24.8041 12.9489 26.0603 8.73047 24.2286 5.34338C22.3944 1.9647 18.1696 0.706622 14.7943 2.53401ZM19.9736 12.1246C18.0839 13.1476 15.719 12.4434 14.6968 10.5533C13.6746 8.66312 14.3792 6.29711 16.2689 5.27392C18.1586 4.25086 20.5235 4.95508 21.5457 6.84526C22.5679 8.73557 21.8659 11.0931 19.9736 12.1246Z" fill="url(#paint6_linear_230_97)"/>
13
+ <path d="M23.264 10.1161C23.4371 9.90762 23.5701 9.67805 23.7032 9.44831C24.9198 7.34959 24.3134 4.69871 22.4573 3.17091C22.4513 3.15985 22.4344 3.15479 22.4259 3.15227C21.2741 2.27064 19.9307 1.81489 18.5851 1.73923C17.983 2.58148 17.2451 3.38328 16.8231 4.33486C16.7078 4.59768 16.6376 4.8647 16.5818 5.14523C17.9455 4.5391 19.6061 4.73643 20.8125 5.83854C22.1801 7.08171 22.4917 9.171 21.5455 10.7652C21.063 11.5782 20.3521 12.1651 19.551 12.4651C20.9642 12.0965 22.2132 11.4099 23.264 10.1161Z" fill="url(#paint7_linear_230_97)"/>
14
+ <path d="M21.9284 2.79353C22.3775 3.07623 22.7815 3.44785 23.1297 3.84944C23.4754 4.25958 23.7775 4.7219 23.9844 5.22103C24.1999 5.72271 24.3202 6.26124 24.347 6.79983C24.3712 7.34691 24.2932 7.89157 24.1465 8.41575C23.9912 8.93738 23.7585 9.43597 23.4475 9.88323C23.1366 10.3305 22.7584 10.7205 22.3303 11.0586C21.9108 11.3991 21.4438 11.679 20.9638 11.9084C20.4752 12.1352 19.971 12.3202 19.4503 12.4351C19.9579 12.2698 20.444 12.0515 20.9033 11.7973C21.3626 11.5431 21.8064 11.2469 22.1975 10.9074C22.9885 10.2306 23.6165 9.34707 23.8947 8.35C24.1901 7.35821 24.176 6.27415 23.8001 5.30578C23.6104 4.81176 23.3452 4.35113 23.0304 3.93158C22.7156 3.51202 22.3451 3.12241 21.9284 2.79353Z" fill="white"/>
15
+ <path d="M13.0115 7.13803C12.8376 7.34664 12.6868 7.57136 12.5557 7.79287C11.2987 9.85536 11.8577 12.5144 13.6853 14.0724C13.6913 14.0836 13.7084 14.0887 13.7144 14.0997C14.8624 14.9997 16.1974 15.4903 17.5452 15.594C18.1623 14.7732 18.9187 13.9846 19.3568 13.0455C19.4784 12.7933 19.5471 12.5628 19.6029 12.2816C18.2234 12.8474 16.5682 12.5871 15.3735 11.4688C14.0297 10.1942 13.7664 8.10681 14.7458 6.53829C15.2449 5.73813 15.9719 5.17344 16.7818 4.89381C15.3633 5.21539 14.0883 5.86811 13.0115 7.13803Z" fill="url(#paint8_linear_230_97)"/>
16
+ <path d="M14.0437 14.4579C13.6154 14.1712 13.2483 13.7999 12.9189 13.3928C12.6003 12.9798 12.3218 12.5225 12.1384 12.0187C11.9441 11.5209 11.8532 10.9791 11.8443 10.4336C11.8355 9.88823 11.9254 9.34407 12.0874 8.83061C12.2518 8.3088 12.4965 7.81999 12.808 7.37924C13.1277 6.94111 13.4978 6.54579 13.9187 6.22193C14.3339 5.88692 14.7916 5.62091 15.2666 5.38784C15.7389 5.16361 16.2342 4.98346 16.7338 4.87947C16.2437 5.04243 15.7656 5.25568 15.3129 5.50467C14.8602 5.75365 14.4305 6.04671 14.0344 6.37813C13.2505 7.04311 12.6218 7.91348 12.3249 8.91078C12.003 9.90069 11.9901 10.9731 12.3207 11.9513C12.4818 12.4392 12.7246 12.8952 13.0132 13.3181C13.3045 13.7323 13.6473 14.1246 14.0437 14.4579Z" fill="white"/>
17
+ <defs>
18
+ <linearGradient id="paint0_linear_230_97" x1="20.9284" y1="16.3546" x2="30.772" y2="26.2028" gradientUnits="userSpaceOnUse">
19
+ <stop offset="0.00130208" stop-color="#1C1E20"/>
20
+ <stop offset="0.1702" stop-color="#0D0E0F"/>
21
+ <stop offset="0.6354" stop-color="#1A1F25"/>
22
+ <stop offset="1" stop-color="#232527"/>
23
+ </linearGradient>
24
+ <linearGradient id="paint1_linear_230_97" x1="26.9199" y1="25.5499" x2="29.1719" y2="19.0015" gradientUnits="userSpaceOnUse">
25
+ <stop offset="0.00130208" stop-color="#353535"/>
26
+ <stop offset="0.3813" stop-color="#414141" stop-opacity="0.6195"/>
27
+ <stop offset="0.7284" stop-opacity="0.2719"/>
28
+ <stop offset="1" stop-color="#040507" stop-opacity="0"/>
29
+ </linearGradient>
30
+ <linearGradient id="paint2_linear_230_97" x1="24.8654" y1="17.0436" x2="22.4615" y2="23.551" gradientUnits="userSpaceOnUse">
31
+ <stop offset="0.00130208" stop-color="#474646"/>
32
+ <stop offset="0.3813" stop-opacity="0.6195"/>
33
+ <stop offset="0.7284" stop-color="#040404" stop-opacity="0.2719"/>
34
+ <stop offset="1" stop-color="#303030" stop-opacity="0"/>
35
+ </linearGradient>
36
+ <linearGradient id="paint3_linear_230_97" x1="9.90348" y1="14.3118" x2="9.79491" y2="28.2356" gradientUnits="userSpaceOnUse">
37
+ <stop offset="0.00130208" stop-color="#1C1E20"/>
38
+ <stop offset="0.1702" stop-color="#0D0E0F"/>
39
+ <stop offset="0.6354" stop-color="#1A1F25"/>
40
+ <stop offset="1" stop-color="#232527"/>
41
+ </linearGradient>
42
+ <linearGradient id="paint4_linear_230_97" x1="7.55697" y1="25.0331" x2="13.8027" y2="22.0422" gradientUnits="userSpaceOnUse">
43
+ <stop offset="0.00130208" stop-color="#353535"/>
44
+ <stop offset="0.3813" stop-color="#414141" stop-opacity="0.6195"/>
45
+ <stop offset="0.7284" stop-opacity="0.2719"/>
46
+ <stop offset="1" stop-color="#040507" stop-opacity="0"/>
47
+ </linearGradient>
48
+ <linearGradient id="paint5_linear_230_97" x1="12.1755" y1="17.6002" x2="5.85252" y2="20.4541" gradientUnits="userSpaceOnUse">
49
+ <stop offset="0.00130208" stop-color="#474646"/>
50
+ <stop offset="0.3813" stop-opacity="0.6195"/>
51
+ <stop offset="0.7284" stop-color="#040404" stop-opacity="0.2719"/>
52
+ <stop offset="1" stop-color="#303030" stop-opacity="0"/>
53
+ </linearGradient>
54
+ <linearGradient id="paint6_linear_230_97" x1="11.9624" y1="11.9815" x2="24.2105" y2="5.35798" gradientUnits="userSpaceOnUse">
55
+ <stop offset="0.00130208" stop-color="#1C1E20"/>
56
+ <stop offset="0.1702" stop-color="#0D0E0F"/>
57
+ <stop offset="0.6354" stop-color="#1A1F25"/>
58
+ <stop offset="1" stop-color="#232527"/>
59
+ </linearGradient>
60
+ <linearGradient id="paint7_linear_230_97" x1="22.4854" y1="8.86354" x2="16.8521" y2="4.83623" gradientUnits="userSpaceOnUse">
61
+ <stop offset="0.00130208" stop-color="#353535"/>
62
+ <stop offset="0.3813" stop-color="#414141" stop-opacity="0.6195"/>
63
+ <stop offset="0.7284" stop-opacity="0.2719"/>
64
+ <stop offset="1" stop-color="#040507" stop-opacity="0"/>
65
+ </linearGradient>
66
+ <linearGradient id="paint8_linear_230_97" x1="13.7465" y1="8.40482" x2="19.2971" y2="12.566" gradientUnits="userSpaceOnUse">
67
+ <stop offset="0.00130208" stop-color="#474646"/>
68
+ <stop offset="0.3813" stop-opacity="0.6195"/>
69
+ <stop offset="0.7284" stop-color="#040404" stop-opacity="0.2719"/>
70
+ <stop offset="1" stop-color="#303030" stop-opacity="0"/>
71
+ </linearGradient>
72
+ </defs>
73
+ </svg>
@@ -0,0 +1,73 @@
1
+ <svg width="33" height="33" viewBox="0 0 33 33" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M30.7911 17.3723C28.0677 14.6502 23.6662 14.6502 20.9427 17.3723C18.2194 20.0945 18.2194 24.4939 20.9427 27.216C23.6662 29.9382 28.0677 29.9382 30.7911 27.216C33.5058 24.4939 33.5058 20.0857 30.7911 17.3723ZM23.0776 25.0734C21.5578 23.5543 21.5578 21.0867 23.0776 19.5676C24.5974 18.0485 27.0661 18.0485 28.586 19.5676C30.1059 21.0867 30.1059 23.5543 28.586 25.0734C27.0661 26.5926 24.6063 26.5926 23.0776 25.0734Z" fill="url(#paint0_linear_230_116)"/>
3
+ <path d="M25.9416 27.6536C26.1908 27.7599 26.4488 27.8219 26.707 27.884C29.0656 28.451 31.4332 27.1132 32.3677 24.8983C32.3766 24.8894 32.3766 24.8717 32.3766 24.8628C32.8928 23.5073 32.9462 22.0898 32.6347 20.7786C31.6557 20.4419 30.6766 19.9635 29.6442 19.8306C29.3594 19.7951 29.0834 19.804 28.7986 19.8306C29.7688 20.9646 30.0536 22.6125 29.3416 24.0832C28.5405 25.7488 26.627 26.6436 24.8291 26.1918C23.9122 25.9614 23.1468 25.4476 22.6306 24.7654C23.3872 26.0146 24.4017 27.0157 25.9416 27.6536Z" fill="url(#paint1_linear_230_116)"/>
4
+ <path d="M32.5784 24.2837C32.4356 24.7949 32.1947 25.2881 31.9092 25.7364C31.6148 26.1848 31.2579 26.6063 30.8386 26.947C30.4193 27.2968 29.9375 27.5658 29.429 27.7451C28.9116 27.9245 28.3673 28.0052 27.823 28.0142C27.2788 28.0142 26.7345 27.9335 26.2171 27.7631C25.6997 27.5927 25.218 27.3416 24.7717 27.0277C24.3257 26.7229 23.9242 26.3552 23.5673 25.9606C23.2105 25.5571 22.8893 25.1267 22.6305 24.6604C22.9339 25.0998 23.2819 25.5033 23.6565 25.8709C24.0312 26.2386 24.4417 26.5794 24.8788 26.8574C25.7532 27.4223 26.7792 27.772 27.8142 27.7541C28.849 27.7541 29.884 27.4313 30.7048 26.7946C31.1241 26.4718 31.4899 26.0862 31.8022 25.6647C32.1144 25.2432 32.3821 24.7769 32.5784 24.2837Z" fill="black"/>
5
+ <path d="M25.8698 16.9777C25.6202 16.8705 25.3618 16.7902 25.1121 16.7277C22.7766 16.1116 20.3877 17.4062 19.4161 19.6025C19.4071 19.6114 19.4071 19.6293 19.3983 19.6382C18.8633 20.9952 18.7742 22.4148 19.0594 23.7361C20.0222 24.0932 20.9938 24.5932 22.0189 24.745C22.2953 24.7896 22.5359 24.7896 22.8213 24.7628C21.8853 23.6022 21.6624 21.9416 22.3933 20.4774C23.2313 18.8257 25.1567 17.9776 26.9395 18.4686C27.8488 18.7186 28.5975 19.2543 29.0967 19.9507C28.3836 18.6829 27.3942 17.6472 25.8698 16.9777Z" fill="url(#paint2_linear_230_116)"/>
6
+ <path d="M19.1489 20.0559C19.3014 19.5636 19.5526 19.1058 19.8486 18.6739C20.1536 18.2506 20.5123 17.8533 20.9428 17.5337C21.3645 17.2054 21.8579 16.9636 22.3781 16.7995C22.8983 16.6353 23.4455 16.5663 23.9838 16.5749C24.5308 16.5835 25.0691 16.6785 25.5805 16.8513C26.0916 17.0327 26.5761 17.2746 27.0066 17.5855C27.4462 17.8878 27.8318 18.2506 28.1907 18.6393C28.5404 19.028 28.8544 19.4513 29.0967 19.9004C28.8006 19.4772 28.4598 19.0798 28.092 18.7171C27.7242 18.3543 27.3206 18.026 26.8899 17.741C26.0289 17.1795 25.0153 16.8254 23.9747 16.8254C22.9341 16.7995 21.9026 17.0931 21.0595 17.6892C20.6379 17.9828 20.2701 18.3456 19.9472 18.743C19.6334 19.1403 19.3552 19.5808 19.1489 20.0559Z" fill="black"/>
7
+ <path d="M16.8119 22.3508C16.8401 18.5002 13.7514 15.3645 9.90088 15.3344C6.05044 15.3045 2.91618 18.3917 2.88792 22.2422C2.85976 26.0928 5.94843 29.2285 9.79896 29.2585C13.6433 29.2823 16.7838 26.1889 16.8119 22.3508ZM5.91252 22.2596C5.92829 20.1108 7.68623 18.3792 9.83501 18.3959C11.9838 18.4126 13.7162 20.1714 13.7005 22.3203C13.6848 24.4691 11.9268 26.2007 9.77803 26.184C7.62911 26.1671 5.90295 24.4147 5.91252 22.2596Z" fill="url(#paint3_linear_230_116)"/>
8
+ <path d="M6.08418 26.1106C6.1833 26.3628 6.32017 26.5901 6.45717 26.8175C7.70836 28.8958 10.3228 29.6437 12.5566 28.7553C12.5692 28.7554 12.5818 28.7429 12.5881 28.7367C13.9161 28.1533 14.9635 27.1966 15.679 26.0545C15.2318 25.1208 14.8856 24.0875 14.2558 23.2587C14.0812 23.031 13.8812 22.8406 13.6625 22.6563C13.5353 24.1433 12.5612 25.5026 11.0138 26.0274C9.26495 26.6254 7.28467 25.8902 6.34493 24.2922C5.86561 23.4773 5.69461 22.5714 5.81839 21.725C5.45932 23.1406 5.45804 24.5659 6.08418 26.1106Z" fill="url(#paint4_linear_230_116)"/>
9
+ <path d="M13.1423 28.4742C12.678 28.7311 12.1576 28.9056 11.6378 29.0169C11.1117 29.1217 10.561 29.1633 10.024 29.1036C9.48061 29.0503 8.95087 28.8959 8.46622 28.6594C7.97535 28.4167 7.53592 28.0855 7.1476 27.7041C6.76567 27.3163 6.44124 26.872 6.19954 26.3838C5.95783 25.8956 5.79866 25.3762 5.70913 24.838C5.61334 24.3063 5.59352 23.7622 5.62421 23.2311C5.6613 22.6937 5.74258 22.1629 5.89318 21.6513C5.79298 22.1757 5.7497 22.7068 5.7507 23.2318C5.75168 23.7567 5.797 24.2883 5.90564 24.7948C6.11678 25.8142 6.5876 26.7905 7.32668 27.5153C8.05286 28.2525 9.00914 28.7634 10.0387 28.9013C10.563 28.9735 11.0944 28.9635 11.6138 28.8902C12.1331 28.817 12.6532 28.6804 13.1423 28.4742Z" fill="black"/>
10
+ <path d="M13.6397 18.5677C13.5409 18.3147 13.4168 18.0742 13.2861 17.8525C12.0861 15.7563 9.48742 14.9628 7.2409 15.8118C7.22822 15.8117 7.21551 15.8242 7.20294 15.8242C5.86073 16.3954 4.78685 17.328 4.04564 18.4585C4.46686 19.395 4.79249 20.4381 5.40372 21.2749C5.56586 21.5031 5.73468 21.6745 5.95405 21.8591C6.12411 20.3778 7.15074 19.0536 8.70677 18.5469C10.4715 17.9848 12.4269 18.7614 13.3282 20.3761C13.7882 21.1994 13.932 22.1087 13.7861 22.9529C14.1889 21.5553 14.2324 20.1236 13.6397 18.5677Z" fill="url(#paint5_linear_230_116)"/>
11
+ <path d="M6.73038 15.9397C7.18821 15.7029 7.69059 15.5605 8.20604 15.4684C8.72157 15.3886 9.25641 15.3654 9.78621 15.4478C10.3159 15.5179 10.8345 15.6996 11.3164 15.9551C11.7984 16.2105 12.2316 16.5519 12.6032 16.9414C12.981 17.3372 13.291 17.7874 13.5268 18.2729C13.7562 18.7644 13.9239 19.2793 14.0045 19.8042C14.0976 20.3295 14.1097 20.8588 14.0847 21.3873C14.0531 21.9092 13.9719 22.4299 13.822 22.9177C13.9157 22.4098 13.9596 21.8881 13.96 21.3715C13.9603 20.8549 13.911 20.337 13.8118 19.8302C13.6076 18.8228 13.1486 17.8521 12.4184 17.1108C11.7067 16.3513 10.7736 15.8224 9.75733 15.64C9.25222 15.5457 8.73565 15.5383 8.22599 15.5871C7.72268 15.6423 7.21367 15.7533 6.73038 15.9397Z" fill="black"/>
12
+ <path d="M14.3504 2.53401C10.9642 4.36729 9.70805 8.58567 11.5397 11.9728C13.3714 15.3598 17.5878 16.6154 20.974 14.7822C24.3602 12.9489 25.6164 8.73047 23.7847 5.34338C21.9505 1.9647 17.7257 0.706622 14.3504 2.53401ZM19.5298 12.1246C17.6401 13.1476 15.2752 12.4434 14.253 10.5533C13.2308 8.66312 13.9353 6.29711 15.8251 5.27392C17.7148 4.25086 20.0797 4.95508 21.1019 6.84526C22.1241 8.73557 21.422 11.0931 19.5298 12.1246Z" fill="url(#paint6_linear_230_116)"/>
13
+ <path d="M22.8202 10.1161C22.9932 9.90762 23.1263 9.67805 23.2594 9.44831C24.476 7.34959 23.8695 4.69871 22.0134 3.17091C22.0075 3.15985 21.9905 3.15479 21.982 3.15227C20.8302 2.27064 19.4869 1.81489 18.1413 1.73923C17.5392 2.58148 16.8013 3.38328 16.3792 4.33486C16.264 4.59768 16.1937 4.8647 16.1379 5.14523C17.5016 4.5391 19.1623 4.73643 20.3686 5.83854C21.7363 7.08171 22.0478 9.171 21.1016 10.7652C20.6192 11.5782 19.9083 12.1651 19.1071 12.4651C20.5203 12.0965 21.7693 11.4099 22.8202 10.1161Z" fill="url(#paint7_linear_230_116)"/>
14
+ <path d="M21.4845 2.79353C21.9337 3.07623 22.3376 3.44785 22.6859 3.84944C23.0315 4.25958 23.3336 4.7219 23.5405 5.22103C23.7561 5.72271 23.8764 6.26124 23.9031 6.79983C23.9274 7.34691 23.8494 7.89157 23.7026 8.41575C23.5473 8.93738 23.3146 9.43597 23.0037 9.88323C22.6927 10.3305 22.3146 10.7205 21.8864 11.0586C21.4669 11.3991 20.9999 11.679 20.52 11.9084C20.0314 12.1352 19.5272 12.3202 19.0064 12.4351C19.5141 12.2698 20.0002 12.0515 20.4595 11.7973C20.9188 11.5431 21.3625 11.2469 21.7537 10.9074C22.5447 10.2306 23.1727 9.34707 23.4509 8.35C23.7462 7.35821 23.7322 6.27415 23.3562 5.30578C23.1665 4.81176 22.9014 4.35113 22.5865 3.93158C22.2717 3.51202 21.9012 3.12241 21.4845 2.79353Z" fill="black"/>
15
+ <path d="M12.5677 7.13803C12.3937 7.34664 12.243 7.57136 12.1118 7.79287C10.8549 9.85536 11.4138 12.5144 13.2414 14.0724C13.2474 14.0836 13.2645 14.0887 13.2706 14.0997C14.4185 14.9997 15.7536 15.4903 17.1014 15.594C17.7184 14.7732 18.4749 13.9846 18.9129 13.0455C19.0346 12.7933 19.1032 12.5628 19.159 12.2816C17.7795 12.8474 16.1244 12.5871 14.9297 11.4688C13.5859 10.1942 13.3225 8.10681 14.3019 6.53829C14.801 5.73813 15.5281 5.17344 16.338 4.89381C14.9194 5.21539 13.6445 5.86811 12.5677 7.13803Z" fill="url(#paint8_linear_230_116)"/>
16
+ <path d="M13.5999 14.4579C13.1715 14.1712 12.8045 13.7999 12.475 13.3928C12.1564 12.9798 11.878 12.5225 11.6945 12.0187C11.5003 11.5209 11.4093 10.9791 11.4005 10.4336C11.3917 9.88823 11.4816 9.34407 11.6435 8.8306C11.8079 8.3088 12.0526 7.81999 12.3641 7.37923C12.6838 6.94111 13.0539 6.54579 13.4748 6.22192C13.89 5.88692 14.3478 5.62091 14.8227 5.38783C15.2951 5.16361 15.7903 4.98346 16.29 4.87947C15.7998 5.04243 15.3217 5.25568 14.8691 5.50466C14.4164 5.75365 13.9866 6.0467 13.5905 6.37813C12.8067 7.04311 12.178 7.91347 11.881 8.91078C11.5592 9.90069 11.5463 10.9731 11.8769 11.9513C12.038 12.4392 12.2807 12.8952 12.5694 13.3181C12.8606 13.7323 13.2035 14.1245 13.5999 14.4579Z" fill="black"/>
17
+ <defs>
18
+ <linearGradient id="paint0_linear_230_116" x1="20.9284" y1="17.3546" x2="30.772" y2="27.2028" gradientUnits="userSpaceOnUse">
19
+ <stop offset="0.00130208" stop-color="#F0F0F0"/>
20
+ <stop offset="0.1702" stop-color="white"/>
21
+ <stop offset="0.6354" stop-color="white"/>
22
+ <stop offset="1" stop-color="white"/>
23
+ </linearGradient>
24
+ <linearGradient id="paint1_linear_230_116" x1="26.9199" y1="26.5499" x2="29.1719" y2="20.0015" gradientUnits="userSpaceOnUse">
25
+ <stop offset="0.00130208" stop-color="#CFD0D0"/>
26
+ <stop offset="0.3813" stop-color="#C0CFE5" stop-opacity="0.6195"/>
27
+ <stop offset="0.7284" stop-color="#D5DADF" stop-opacity="0.2719"/>
28
+ <stop offset="1" stop-color="#0271EB" stop-opacity="0"/>
29
+ </linearGradient>
30
+ <linearGradient id="paint2_linear_230_116" x1="24.8654" y1="18.0436" x2="22.4615" y2="24.551" gradientUnits="userSpaceOnUse">
31
+ <stop offset="0.00130208" stop-color="#878787"/>
32
+ <stop offset="0.3813" stop-color="#C3C8CE" stop-opacity="0.6195"/>
33
+ <stop offset="0.7284" stop-color="#E1E4E8" stop-opacity="0.2719"/>
34
+ <stop offset="1" stop-color="#E5E9EE" stop-opacity="0"/>
35
+ </linearGradient>
36
+ <linearGradient id="paint3_linear_230_116" x1="9.90348" y1="15.3118" x2="9.79491" y2="29.2356" gradientUnits="userSpaceOnUse">
37
+ <stop offset="0.00130208" stop-color="#F0F0F0"/>
38
+ <stop offset="0.1702" stop-color="white"/>
39
+ <stop offset="0.6354" stop-color="white"/>
40
+ <stop offset="1" stop-color="white"/>
41
+ </linearGradient>
42
+ <linearGradient id="paint4_linear_230_116" x1="7.55697" y1="26.0331" x2="13.8027" y2="23.0422" gradientUnits="userSpaceOnUse">
43
+ <stop offset="0.00130208" stop-color="#CFD0D0"/>
44
+ <stop offset="0.3813" stop-color="#C0CFE5" stop-opacity="0.6195"/>
45
+ <stop offset="0.7284" stop-color="#D5DADF" stop-opacity="0.2719"/>
46
+ <stop offset="1" stop-color="#0271EB" stop-opacity="0"/>
47
+ </linearGradient>
48
+ <linearGradient id="paint5_linear_230_116" x1="12.1755" y1="18.6002" x2="5.85252" y2="21.454" gradientUnits="userSpaceOnUse">
49
+ <stop offset="0.00130208" stop-color="#878787"/>
50
+ <stop offset="0.3813" stop-color="#C3C8CE" stop-opacity="0.6195"/>
51
+ <stop offset="0.7284" stop-color="#E1E4E8" stop-opacity="0.2719"/>
52
+ <stop offset="1" stop-color="#E5E9EE" stop-opacity="0"/>
53
+ </linearGradient>
54
+ <linearGradient id="paint6_linear_230_116" x1="11.5186" y1="11.9815" x2="23.7666" y2="5.35798" gradientUnits="userSpaceOnUse">
55
+ <stop offset="0.00130208" stop-color="#F0F0F0"/>
56
+ <stop offset="0.1702" stop-color="white"/>
57
+ <stop offset="0.6354" stop-color="white"/>
58
+ <stop offset="1" stop-color="white"/>
59
+ </linearGradient>
60
+ <linearGradient id="paint7_linear_230_116" x1="22.0416" y1="8.86354" x2="16.4082" y2="4.83623" gradientUnits="userSpaceOnUse">
61
+ <stop offset="0.00130208" stop-color="#CFD0D0"/>
62
+ <stop offset="0.3813" stop-color="#C0CFE5" stop-opacity="0.6195"/>
63
+ <stop offset="0.7284" stop-color="#D5DADF" stop-opacity="0.2719"/>
64
+ <stop offset="1" stop-color="#0271EB" stop-opacity="0"/>
65
+ </linearGradient>
66
+ <linearGradient id="paint8_linear_230_116" x1="13.3027" y1="8.40482" x2="18.8533" y2="12.566" gradientUnits="userSpaceOnUse">
67
+ <stop offset="0.00130208" stop-color="#878787"/>
68
+ <stop offset="0.3813" stop-color="#C3C8CE" stop-opacity="0.6195"/>
69
+ <stop offset="0.7284" stop-color="#E1E4E8" stop-opacity="0.2719"/>
70
+ <stop offset="1" stop-color="#E5E9EE" stop-opacity="0"/>
71
+ </linearGradient>
72
+ </defs>
73
+ </svg>