n8n-nodes-cronos-paytech 0.1.2

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.
@@ -0,0 +1,521 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CronosX402 = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const ethers_1 = require("ethers");
6
+ const actions_1 = require("./utils/actions");
7
+ class CronosX402 {
8
+ constructor() {
9
+ this.description = {
10
+ displayName: 'Cronos x402',
11
+ name: 'cronosX402',
12
+ icon: 'file:cronosX402.svg',
13
+ group: ['transform'],
14
+ version: 1,
15
+ description: 'Autonomous Payments for AI Agents',
16
+ defaults: {
17
+ name: 'Cronos x402',
18
+ },
19
+ inputs: ['main'],
20
+ outputs: ['main'],
21
+ credentials: [
22
+ {
23
+ name: 'cronosWalletCredentialsApi',
24
+ required: false,
25
+ },
26
+ ],
27
+ properties: [
28
+ {
29
+ displayName: 'Action',
30
+ name: 'action',
31
+ type: 'options',
32
+ noDataExpression: true,
33
+ options: [
34
+ {
35
+ name: 'Generate Challenge',
36
+ value: 'generateChallenge',
37
+ description: 'Create a 402 Payment Request (Merchant)',
38
+ action: 'Create a 402 payment request merchant',
39
+ },
40
+ {
41
+ name: 'Get Balance',
42
+ value: 'getBalance',
43
+ description: 'Check wallet balance (Utility)',
44
+ action: 'Check wallet balance utility',
45
+ },
46
+ {
47
+ name: 'Get Event Logs (Polling)',
48
+ value: 'getEventLogs',
49
+ description: 'Poll for smart contract events',
50
+ action: 'Poll for smart contract events',
51
+ },
52
+ {
53
+ name: 'Notarize (Data)',
54
+ value: 'notarize',
55
+ description: 'Write data on-chain (Audit/Reputation)',
56
+ action: 'Write data on chain audit reputation',
57
+ },
58
+ {
59
+ name: 'Pay From Wallet',
60
+ value: 'payFromWallet',
61
+ description: 'Sign a payment for a resource (Client Mode)',
62
+ action: 'Sign a payment for a resource client mode',
63
+ },
64
+ {
65
+ name: 'Recover Address (Verify Auth)',
66
+ value: 'recoverAddress',
67
+ description: 'Recover signer address from message & signature',
68
+ action: 'Recover signer address from message signature',
69
+ },
70
+ {
71
+ name: 'Sign Message (Auth)',
72
+ value: 'signMessage',
73
+ description: 'Sign a text message (Login/SIWE)',
74
+ action: 'Sign a text message login siwe',
75
+ },
76
+ {
77
+ name: 'Verify Payment',
78
+ value: 'verifyPayment',
79
+ description: 'Check payment status (Merchant Mode)',
80
+ action: 'Check payment status merchant mode',
81
+ },
82
+ ],
83
+ default: 'payFromWallet',
84
+ },
85
+ {
86
+ displayName: 'Token Address',
87
+ name: 'tokenAddress',
88
+ type: 'string',
89
+ typeOptions: { password: true },
90
+ default: '0xc01efAaF7C5C61bEbFAeb358E1161b537b8bC0e0',
91
+ required: true,
92
+ displayOptions: {
93
+ show: {
94
+ action: ['payFromWallet', 'generateChallenge'],
95
+ },
96
+ },
97
+ description: 'The ERC-20 token contract address (e.g. USDC)',
98
+ },
99
+ {
100
+ displayName: 'Recipient Address (Merchant)',
101
+ name: 'recipientAddress',
102
+ type: 'string',
103
+ default: '',
104
+ required: true,
105
+ displayOptions: {
106
+ show: {
107
+ action: ['payFromWallet', 'generateChallenge'],
108
+ },
109
+ },
110
+ description: 'The wallet address of the service you are paying',
111
+ },
112
+ {
113
+ displayName: 'Amount (Units)',
114
+ name: 'amount',
115
+ type: 'string',
116
+ default: '100000',
117
+ required: true,
118
+ displayOptions: {
119
+ show: {
120
+ action: ['payFromWallet', 'generateChallenge'],
121
+ },
122
+ },
123
+ description: 'Amount to pay in smallest units (e.g. Wei/Satoshi)',
124
+ },
125
+ {
126
+ displayName: 'Broadcast Transaction?',
127
+ name: 'broadcast',
128
+ type: 'boolean',
129
+ default: false,
130
+ displayOptions: {
131
+ show: {
132
+ action: ['payFromWallet', 'notarize'],
133
+ },
134
+ },
135
+ description: 'Whether to submit the transaction to the blockchain immediately',
136
+ },
137
+ {
138
+ displayName: 'Payment Header',
139
+ name: 'paymentHeader',
140
+ type: 'string',
141
+ default: '',
142
+ required: true,
143
+ displayOptions: {
144
+ show: {
145
+ action: ['verifyPayment'],
146
+ },
147
+ },
148
+ description: 'The X402 Payment Header received from the client',
149
+ },
150
+ {
151
+ displayName: 'Expected Recipient',
152
+ name: 'expectedRecipient',
153
+ type: 'string',
154
+ default: '',
155
+ required: true,
156
+ displayOptions: {
157
+ show: {
158
+ action: ['verifyPayment'],
159
+ },
160
+ },
161
+ description: 'Your wallet address (must match the payment recipient)',
162
+ },
163
+ {
164
+ displayName: 'Expected Amount',
165
+ name: 'expectedAmount',
166
+ type: 'string',
167
+ default: '100000',
168
+ required: true,
169
+ displayOptions: {
170
+ show: {
171
+ action: ['verifyPayment'],
172
+ },
173
+ },
174
+ description: 'Amount required (base units)',
175
+ },
176
+ {
177
+ displayName: 'Settle On-Chain? (Relayer)',
178
+ name: 'settle',
179
+ type: 'boolean',
180
+ default: true,
181
+ displayOptions: {
182
+ show: {
183
+ action: ['verifyPayment'],
184
+ },
185
+ },
186
+ description: 'Whether to broadcast the transaction to settle the payment if wallet is connected',
187
+ },
188
+ {
189
+ displayName: 'Data to Notarize',
190
+ name: 'data',
191
+ type: 'string',
192
+ default: '',
193
+ required: true,
194
+ displayOptions: {
195
+ show: {
196
+ action: ['notarize'],
197
+ },
198
+ },
199
+ description: 'Text or JSON string to write to the blockchain (will be converted to Hex)',
200
+ },
201
+ {
202
+ displayName: 'Message to Sign',
203
+ name: 'message',
204
+ type: 'string',
205
+ default: '',
206
+ required: true,
207
+ displayOptions: {
208
+ show: {
209
+ action: ['signMessage'],
210
+ },
211
+ },
212
+ description: 'The plain text message to sign with your wallet',
213
+ },
214
+ {
215
+ displayName: 'Signature',
216
+ name: 'signature',
217
+ type: 'string',
218
+ default: '',
219
+ required: true,
220
+ displayOptions: {
221
+ show: {
222
+ action: ['recoverAddress'],
223
+ },
224
+ },
225
+ description: 'The hex string signature to recover address from',
226
+ },
227
+ {
228
+ displayName: 'Message (Challenge)',
229
+ name: 'message',
230
+ type: 'string',
231
+ default: '',
232
+ required: true,
233
+ displayOptions: {
234
+ show: {
235
+ action: ['recoverAddress'],
236
+ },
237
+ },
238
+ description: 'The original plain text message that was signed',
239
+ },
240
+ {
241
+ displayName: 'Contract Address',
242
+ name: 'contractAddress',
243
+ type: 'string',
244
+ default: '0xc01efAaF7C5C61bEbFAeb358E1161b537b8bC0e0',
245
+ required: true,
246
+ displayOptions: {
247
+ show: {
248
+ action: ['getEventLogs'],
249
+ },
250
+ },
251
+ description: 'Address of the smart contract to listen to',
252
+ },
253
+ {
254
+ displayName: 'Topic 0 (Event Signature)',
255
+ name: 'topic0',
256
+ type: 'string',
257
+ default: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
258
+ required: true,
259
+ displayOptions: {
260
+ show: {
261
+ action: ['getEventLogs'],
262
+ },
263
+ },
264
+ description: 'The Keccak-256 hash of the event signature (e.g. transfer(address,address,uint256))',
265
+ },
266
+ {
267
+ displayName: 'Topic 1 (Sender / Param 1)',
268
+ name: 'topic1',
269
+ type: 'string',
270
+ default: '',
271
+ displayOptions: {
272
+ show: {
273
+ action: ['getEventLogs'],
274
+ },
275
+ },
276
+ description: 'First indexed parameter. For standard Transfers, this is the SENDER (From) address.',
277
+ },
278
+ {
279
+ displayName: 'Topic 2 (Receiver / Param 2)',
280
+ name: 'topic2',
281
+ type: 'string',
282
+ default: '',
283
+ displayOptions: {
284
+ show: {
285
+ action: ['getEventLogs'],
286
+ },
287
+ },
288
+ description: 'Second indexed parameter. For standard Transfers, this is the RECEIVER (To) address.',
289
+ },
290
+ {
291
+ displayName: 'Topic 3 (ID / Param 3)',
292
+ name: 'topic3',
293
+ type: 'string',
294
+ default: '',
295
+ displayOptions: {
296
+ show: {
297
+ action: ['getEventLogs'],
298
+ },
299
+ },
300
+ description: 'Third indexed parameter. Often used for Token ID (NFTs) or other IDs.',
301
+ },
302
+ {
303
+ displayName: 'From Block',
304
+ name: 'fromBlock',
305
+ type: 'string',
306
+ default: 'latest',
307
+ required: true,
308
+ displayOptions: {
309
+ show: {
310
+ action: ['getEventLogs'],
311
+ },
312
+ },
313
+ description: 'Start block number or "latest"',
314
+ },
315
+ {
316
+ displayName: 'To Block',
317
+ name: 'toBlock',
318
+ type: 'string',
319
+ default: 'latest',
320
+ required: true,
321
+ displayOptions: {
322
+ show: {
323
+ action: ['getEventLogs'],
324
+ },
325
+ },
326
+ description: 'End block number or "latest"',
327
+ },
328
+ {
329
+ displayName: 'RPC URL',
330
+ name: 'rpcUrl',
331
+ type: 'string',
332
+ default: 'https://evm-t3.cronos.org/',
333
+ displayOptions: {
334
+ show: {
335
+ action: ['getBalance', 'verifyPayment', 'notarize', 'payFromWallet', 'getEventLogs'],
336
+ },
337
+ },
338
+ },
339
+ ],
340
+ usableAsTool: true,
341
+ };
342
+ }
343
+ async execute() {
344
+ const items = this.getInputData();
345
+ const returnData = [];
346
+ let credentials;
347
+ try {
348
+ credentials = await this.getCredentials('cronosWalletCredentialsApi');
349
+ }
350
+ catch {
351
+ }
352
+ const action = this.getNodeParameter('action', 0);
353
+ const requiresKey = ['payFromWallet', 'getBalance', 'notarize', 'signMessage'];
354
+ if (requiresKey.includes(action) && (!credentials || !credentials.privateKey)) {
355
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No Private Key provided in credentials.');
356
+ }
357
+ const privateKey = credentials === null || credentials === void 0 ? void 0 : credentials.privateKey;
358
+ const wallet = privateKey ? new ethers_1.ethers.Wallet(privateKey) : null;
359
+ for (let i = 0; i < items.length; i++) {
360
+ try {
361
+ let result = {};
362
+ if (action === 'payFromWallet' && wallet) {
363
+ const shouldBroadcast = this.getNodeParameter('broadcast', i, false);
364
+ let provider = undefined;
365
+ if (shouldBroadcast === true) {
366
+ const rpcUrl = this.getNodeParameter('rpcUrl', i);
367
+ let networkHint = undefined;
368
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'testnet')
369
+ networkHint = 338;
370
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'mainnet')
371
+ networkHint = 25;
372
+ provider = new ethers_1.ethers.JsonRpcProvider(rpcUrl, networkHint);
373
+ }
374
+ const params = {
375
+ wallet: wallet,
376
+ tokenAddress: this.getNodeParameter('tokenAddress', i),
377
+ recipient: this.getNodeParameter('recipientAddress', i),
378
+ amount: this.getNodeParameter('amount', i),
379
+ chainId: 338,
380
+ provider: provider,
381
+ };
382
+ result = await (0, actions_1.actionPayFromWallet)(params);
383
+ }
384
+ else if (action === 'verifyPayment') {
385
+ const rpcUrl = this.getNodeParameter('rpcUrl', i);
386
+ let networkHint = undefined;
387
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'testnet')
388
+ networkHint = 338;
389
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'mainnet')
390
+ networkHint = 25;
391
+ const provider = new ethers_1.ethers.JsonRpcProvider(rpcUrl, networkHint);
392
+ result = await (0, actions_1.actionVerifyPayment)({
393
+ paymentHeader: this.getNodeParameter('paymentHeader', i),
394
+ expectedRecipient: this.getNodeParameter('expectedRecipient', i),
395
+ expectedAmount: this.getNodeParameter('expectedAmount', i),
396
+ provider: provider,
397
+ wallet: wallet || undefined,
398
+ shouldSettle: this.getNodeParameter('settle', i, true)
399
+ });
400
+ }
401
+ else if (action === 'getBalance' && wallet) {
402
+ const rpcUrl = this.getNodeParameter('rpcUrl', i);
403
+ let networkHint = undefined;
404
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'testnet')
405
+ networkHint = 338;
406
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'mainnet')
407
+ networkHint = 25;
408
+ const provider = new ethers_1.ethers.JsonRpcProvider(rpcUrl, networkHint);
409
+ const balance = await provider.getBalance(wallet.address);
410
+ result = {
411
+ address: wallet.address,
412
+ balanceWei: balance.toString(),
413
+ balanceEth: ethers_1.ethers.formatEther(balance),
414
+ network: networkHint === 338 ? "Cronos Testnet" : "Cronos Mainnet",
415
+ };
416
+ }
417
+ else if (action === 'notarize' && wallet) {
418
+ const broadcast = this.getNodeParameter('broadcast', i, false);
419
+ let provider = undefined;
420
+ if (broadcast) {
421
+ const rpcUrl = this.getNodeParameter('rpcUrl', i);
422
+ let networkHint = undefined;
423
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'testnet')
424
+ networkHint = 338;
425
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'mainnet')
426
+ networkHint = 25;
427
+ provider = new ethers_1.ethers.JsonRpcProvider(rpcUrl, networkHint);
428
+ }
429
+ result = await (0, actions_1.actionNotarize)({
430
+ wallet: wallet,
431
+ data: this.getNodeParameter('data', i),
432
+ provider: provider,
433
+ });
434
+ }
435
+ else if (action === 'generateChallenge') {
436
+ result = (0, actions_1.actionGenerateChallenge)({
437
+ recipient: this.getNodeParameter('recipientAddress', i),
438
+ amount: this.getNodeParameter('amount', i),
439
+ tokenAddress: this.getNodeParameter('tokenAddress', i),
440
+ chainId: 338,
441
+ });
442
+ }
443
+ else if (action === 'getEventLogs') {
444
+ const rpcUrl = this.getNodeParameter('rpcUrl', i);
445
+ let networkHint = undefined;
446
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'testnet')
447
+ networkHint = 338;
448
+ if ((credentials === null || credentials === void 0 ? void 0 : credentials.network) === 'mainnet')
449
+ networkHint = 25;
450
+ const provider = new ethers_1.ethers.JsonRpcProvider(rpcUrl, networkHint);
451
+ const fromBlockInputStr = this.getNodeParameter('fromBlock', i);
452
+ const toBlockInputStr = this.getNodeParameter('toBlock', i);
453
+ const parseBlockTag = (val) => {
454
+ const v = val.trim();
455
+ if (['latest', 'earliest', 'pending'].includes(v))
456
+ return v;
457
+ if (v.startsWith('0x'))
458
+ return v;
459
+ if (/^\d+$/.test(v))
460
+ return parseInt(v, 10);
461
+ return v;
462
+ };
463
+ const fromBlock = parseBlockTag(fromBlockInputStr);
464
+ const toBlock = parseBlockTag(toBlockInputStr);
465
+ const t0 = this.getNodeParameter('topic0', i);
466
+ const t1 = this.getNodeParameter('topic1', i);
467
+ const t2 = this.getNodeParameter('topic2', i);
468
+ const t3 = this.getNodeParameter('topic3', i);
469
+ const processTopic = (val) => {
470
+ if (!val || val === '')
471
+ return null;
472
+ const trimmed = val.trim();
473
+ if (ethers_1.ethers.isAddress(trimmed)) {
474
+ return ethers_1.ethers.zeroPadValue(trimmed, 32);
475
+ }
476
+ return trimmed;
477
+ };
478
+ const topics = [
479
+ processTopic(t0),
480
+ processTopic(t1),
481
+ processTopic(t2),
482
+ processTopic(t3)
483
+ ];
484
+ while (topics.length > 0 && topics[topics.length - 1] === null) {
485
+ topics.pop();
486
+ }
487
+ const contractAddress = this.getNodeParameter('contractAddress', i);
488
+ const logsResult = await (0, actions_1.actionGetEventLogs)({
489
+ provider,
490
+ address: contractAddress,
491
+ topics: topics,
492
+ fromBlock: fromBlock,
493
+ toBlock: toBlock
494
+ });
495
+ result = logsResult;
496
+ }
497
+ else if (action === 'signMessage' && wallet) {
498
+ const message = this.getNodeParameter('message', i);
499
+ result = await (0, actions_1.actionSignMessage)(wallet, message);
500
+ }
501
+ else if (action === 'recoverAddress') {
502
+ const message = this.getNodeParameter('message', i);
503
+ const signature = this.getNodeParameter('signature', i);
504
+ result = (0, actions_1.actionRecoverAddress)(message, signature);
505
+ }
506
+ returnData.push({ json: result });
507
+ }
508
+ catch (error) {
509
+ if (this.continueOnFail()) {
510
+ returnData.push({ json: { error: error.message } });
511
+ }
512
+ else {
513
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, { itemIndex: i });
514
+ }
515
+ }
516
+ }
517
+ return [returnData];
518
+ }
519
+ }
520
+ exports.CronosX402 = CronosX402;
521
+ //# sourceMappingURL=CronosX402.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CronosX402.node.js","sourceRoot":"","sources":["../../../nodes/CronosX402/CronosX402.node.ts"],"names":[],"mappings":";;;AAAA,+CAMsB;AAEtB,mCAAgC;AAChC,6CAAiL;AAEjL,MAAa,UAAU;IAAvB;QACI,gBAAW,GAAyB;YAChC,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE;gBACN,IAAI,EAAE,aAAa;aACtB;YACD,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE;gBACT;oBACI,IAAI,EAAE,4BAA4B;oBAClC,QAAQ,EAAE,KAAK;iBAClB;aACJ;YACD,UAAU,EAAE;gBACR;oBACI,WAAW,EAAE,QAAQ;oBACrB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,oBAAoB;4BAC1B,KAAK,EAAE,mBAAmB;4BAC1B,WAAW,EAAE,yCAAyC;4BACtD,MAAM,EAAE,uCAAuC;yBAClD;wBACD;4BACI,IAAI,EAAE,aAAa;4BACnB,KAAK,EAAE,YAAY;4BACnB,WAAW,EAAE,gCAAgC;4BAC7C,MAAM,EAAE,8BAA8B;yBACzC;wBACD;4BACI,IAAI,EAAE,0BAA0B;4BAChC,KAAK,EAAE,cAAc;4BACrB,WAAW,EAAE,gCAAgC;4BAC7C,MAAM,EAAE,gCAAgC;yBAC3C;wBACD;4BACI,IAAI,EAAE,iBAAiB;4BACvB,KAAK,EAAE,UAAU;4BACjB,WAAW,EAAE,wCAAwC;4BACrD,MAAM,EAAE,sCAAsC;yBACjD;wBACD;4BACI,IAAI,EAAE,iBAAiB;4BACvB,KAAK,EAAE,eAAe;4BACtB,WAAW,EAAE,6CAA6C;4BAC1D,MAAM,EAAE,2CAA2C;yBACtD;wBACD;4BACI,IAAI,EAAE,+BAA+B;4BACrC,KAAK,EAAE,gBAAgB;4BACvB,WAAW,EAAE,iDAAiD;4BAC9D,MAAM,EAAE,+CAA+C;yBAC1D;wBACD;4BACI,IAAI,EAAE,qBAAqB;4BAC3B,KAAK,EAAE,aAAa;4BACpB,WAAW,EAAE,kCAAkC;4BAC/C,MAAM,EAAE,gCAAgC;yBAC3C;wBACD;4BACI,IAAI,EAAE,gBAAgB;4BACtB,KAAK,EAAE,eAAe;4BACtB,WAAW,EAAE,sCAAsC;4BACnD,MAAM,EAAE,oCAAoC;yBAC/C;qBACJ;oBACD,OAAO,EAAE,eAAe;iBAC3B;gBAID;oBACI,WAAW,EAAE,eAAe;oBAC5B,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC/B,OAAO,EAAE,4CAA4C;oBACrD,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC;yBACjD;qBACJ;oBACD,WAAW,EAAE,+CAA+C;iBAC/D;gBACD;oBACI,WAAW,EAAE,8BAA8B;oBAC3C,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC;yBACjD;qBACJ;oBACD,WAAW,EAAE,kDAAkD;iBAClE;gBACD;oBACI,WAAW,EAAE,gBAAgB;oBAC7B,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,QAAQ;oBACjB,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC;yBACjD;qBACJ;oBACD,WAAW,EAAE,oDAAoD;iBACpE;gBACD;oBACI,WAAW,EAAE,wBAAwB;oBACrC,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,KAAK;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC;yBACxC;qBACJ;oBACD,WAAW,EAAE,iEAAiE;iBACjF;gBAID;oBACI,WAAW,EAAE,gBAAgB;oBAC7B,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,eAAe,CAAC;yBAC5B;qBACJ;oBACD,WAAW,EAAE,kDAAkD;iBAClE;gBACD;oBACI,WAAW,EAAE,oBAAoB;oBACjC,IAAI,EAAE,mBAAmB;oBACzB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,eAAe,CAAC;yBAC5B;qBACJ;oBACD,WAAW,EAAE,wDAAwD;iBACxE;gBACD;oBACI,WAAW,EAAE,iBAAiB;oBAC9B,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,QAAQ;oBACjB,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,eAAe,CAAC;yBAC5B;qBACJ;oBACD,WAAW,EAAE,8BAA8B;iBAC9C;gBACD;oBACI,WAAW,EAAE,4BAA4B;oBACzC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,IAAI;oBACb,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,eAAe,CAAC;yBAC5B;qBACJ;oBACD,WAAW,EAAE,mFAAmF;iBACnG;gBAID;oBACI,WAAW,EAAE,kBAAkB;oBAC/B,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,UAAU,CAAC;yBACvB;qBACJ;oBACD,WAAW,EAAE,2EAA2E;iBAC3F;gBAID;oBACI,WAAW,EAAE,iBAAiB;oBAC9B,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,aAAa,CAAC;yBAC1B;qBACJ;oBACD,WAAW,EAAE,iDAAiD;iBACjE;gBACD;oBACI,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,gBAAgB,CAAC;yBAC7B;qBACJ;oBACD,WAAW,EAAE,kDAAkD;iBAClE;gBACD;oBACI,WAAW,EAAE,qBAAqB;oBAClC,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,gBAAgB,CAAC;yBAC7B;qBACJ;oBACD,WAAW,EAAE,iDAAiD;iBACjE;gBAID;oBACI,WAAW,EAAE,kBAAkB;oBAC/B,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,4CAA4C;oBACrD,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,cAAc,CAAC;yBAC3B;qBACJ;oBACD,WAAW,EAAE,4CAA4C;iBAC5D;gBACD;oBACI,WAAW,EAAE,2BAA2B;oBACxC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,oEAAoE;oBAC7E,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,cAAc,CAAC;yBAC3B;qBACJ;oBACD,WAAW,EAAE,qFAAqF;iBACrG;gBACD;oBACI,WAAW,EAAE,4BAA4B;oBACzC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,cAAc,CAAC;yBAC3B;qBACJ;oBACD,WAAW,EAAE,qFAAqF;iBACrG;gBACD;oBACI,WAAW,EAAE,8BAA8B;oBAC3C,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,cAAc,CAAC;yBAC3B;qBACJ;oBACD,WAAW,EAAE,sFAAsF;iBACtG;gBACD;oBACI,WAAW,EAAE,wBAAwB;oBACrC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,cAAc,CAAC;yBAC3B;qBACJ;oBACD,WAAW,EAAE,uEAAuE;iBACvF;gBACD;oBACI,WAAW,EAAE,YAAY;oBACzB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,QAAQ;oBACjB,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,cAAc,CAAC;yBAC3B;qBACJ;oBACD,WAAW,EAAE,gCAAgC;iBAChD;gBACD;oBACI,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,QAAQ;oBACjB,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,cAAc,CAAC;yBAC3B;qBACJ;oBACD,WAAW,EAAE,8BAA8B;iBAC9C;gBAID;oBACI,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,4BAA4B;oBACrC,cAAc,EAAE;wBACZ,IAAI,EAAE;4BACF,MAAM,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,CAAC;yBACvF;qBACJ;iBACJ;aACJ;YACD,YAAY,EAAE,IAAI;SACrB,CAAC;IAyNN,CAAC;IAvNG,KAAK,CAAC,OAAO;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,IAAI,WAAW,CAAC;QAChB,IAAI,CAAC;YACD,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,4BAA4B,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;QAG5D,MAAM,WAAW,GAAG,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QAC/E,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,yCAAyC,CAAC,CAAC;QAC5F,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAoB,CAAC;QACrD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,eAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC;gBACD,IAAI,MAAM,GAAG,EAAE,CAAC;gBAGhB,IAAI,MAAM,KAAK,eAAe,IAAI,MAAM,EAAE,CAAC;oBACvC,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAY,CAAC;oBAChF,IAAI,QAAQ,GAAG,SAAS,CAAC;oBAGzB,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;wBAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;wBAC5D,IAAI,WAAW,GAAG,SAAS,CAAC;wBAC5B,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;4BAAE,WAAW,GAAG,GAAG,CAAC;wBAC1D,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;4BAAE,WAAW,GAAG,EAAE,CAAC;wBACzD,QAAQ,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;oBAC/D,CAAC;oBAED,MAAM,MAAM,GAAG;wBACX,MAAM,EAAE,MAAM;wBACd,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAW;wBAChE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAW;wBACjE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW;wBACpD,OAAO,EAAE,GAAG;wBACZ,QAAQ,EAAE,QAAQ;qBACrB,CAAC;oBAEF,MAAM,GAAG,MAAM,IAAA,6BAAmB,EAAC,MAAM,CAAC,CAAC;gBAC/C,CAAC;qBAGI,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;oBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;oBAC5D,IAAI,WAAW,GAAG,SAAS,CAAC;oBAE5B,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;wBAAE,WAAW,GAAG,GAAG,CAAC;oBAC1D,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;wBAAE,WAAW,GAAG,EAAE,CAAC;oBACzD,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;oBAEjE,MAAM,GAAG,MAAM,IAAA,6BAAmB,EAAC;wBAC/B,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAW;wBAClE,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAW;wBAC1E,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAW;wBACpE,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,MAAM,IAAI,SAAS;wBAC3B,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAY;qBACpE,CAAC,CAAC;gBACP,CAAC;qBAGI,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,EAAE,CAAC;oBACzC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;oBAG5D,IAAI,WAAW,GAAG,SAAS,CAAC;oBAC5B,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;wBAAE,WAAW,GAAG,GAAG,CAAC;oBAC1D,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;wBAAE,WAAW,GAAG,EAAE,CAAC;oBAEzD,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;oBACjE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAE1D,MAAM,GAAG;wBACL,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE;wBAC9B,UAAU,EAAE,eAAM,CAAC,WAAW,CAAC,OAAO,CAAC;wBACvC,OAAO,EAAE,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB;qBACrE,CAAC;gBACN,CAAC;qBAGI,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,EAAE,CAAC;oBACvC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAY,CAAC;oBAC1E,IAAI,QAAQ,GAAG,SAAS,CAAC;oBAEzB,IAAI,SAAS,EAAE,CAAC;wBACZ,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;wBAC5D,IAAI,WAAW,GAAG,SAAS,CAAC;wBAC5B,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;4BAAE,WAAW,GAAG,GAAG,CAAC;wBAC1D,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;4BAAE,WAAW,GAAG,EAAE,CAAC;wBACzD,QAAQ,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;oBAC/D,CAAC;oBAED,MAAM,GAAG,MAAM,IAAA,wBAAc,EAAC;wBAC1B,MAAM,EAAE,MAAM;wBACd,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAW;wBAChD,QAAQ,EAAE,QAAQ;qBACrB,CAAC,CAAC;gBACP,CAAC;qBAGI,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;oBACtC,MAAM,GAAG,IAAA,iCAAuB,EAAC;wBAC7B,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAW;wBACjE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW;wBACpD,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAW;wBAChE,OAAO,EAAE,GAAG;qBACf,CAAC,CAAC;gBACP,CAAC;qBAGI,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;oBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;oBAC5D,IAAI,WAAW,GAAG,SAAS,CAAC;oBAC5B,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;wBAAE,WAAW,GAAG,GAAG,CAAC;oBAC1D,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,MAAK,SAAS;wBAAE,WAAW,GAAG,EAAE,CAAC;oBACzD,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;oBAGjE,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAW,CAAC;oBAC1E,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAW,CAAC;oBAEtE,MAAM,aAAa,GAAG,CAAC,GAAW,EAAmB,EAAE;wBACnD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;wBACrB,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;4BAAE,OAAO,CAAC,CAAC;wBAC5D,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;4BAAE,OAAO,CAAC,CAAC;wBACjC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;4BAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC5C,OAAO,CAAC,CAAC;oBACb,CAAC,CAAC;oBAEF,MAAM,SAAS,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC;oBACnD,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;oBAG/C,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;oBACxD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;oBACxD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;oBACxD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;oBAGxD,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE;wBACjC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE;4BAAE,OAAO,IAAI,CAAC;wBACpC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;wBAC3B,IAAI,eAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC5B,OAAO,eAAM,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wBAC5C,CAAC;wBACD,OAAO,OAAO,CAAC;oBACnB,CAAC,CAAC;oBAIF,MAAM,MAAM,GAAG;wBACX,YAAY,CAAC,EAAE,CAAC;wBAChB,YAAY,CAAC,EAAE,CAAC;wBAChB,YAAY,CAAC,EAAE,CAAC;wBAChB,YAAY,CAAC,EAAE,CAAC;qBACnB,CAAC;oBAKF,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC7D,MAAM,CAAC,GAAG,EAAE,CAAC;oBACjB,CAAC;oBAED,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAW,CAAC;oBAE9E,MAAM,UAAU,GAAG,MAAM,IAAA,4BAAkB,EAAC;wBACxC,QAAQ;wBACR,OAAO,EAAE,eAAe;wBACxB,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,SAAS;wBACpB,OAAO,EAAE,OAAO;qBACnB,CAAC,CAAC;oBAEH,MAAM,GAAG,UAAU,CAAC;gBACxB,CAAC;qBAGI,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,EAAE,CAAC;oBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAW,CAAC;oBAC9D,MAAM,GAAG,MAAM,IAAA,2BAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;qBAGI,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;oBAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAW,CAAC;oBAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAW,CAAC;oBAClE,MAAM,GAAG,IAAA,8BAAoB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBACtD,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBACxB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACJ,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAc,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnF,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;CACJ;AAxjBD,gCAwjBC"}
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 26.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 120.1 138.8" style="enable-background:new 0 0 120.1 138.8;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:#002D74;}
7
+ .st1{fill:url(#SVGID_1_);}
8
+ .st2{fill:url(#SVGID_00000061444671184501762360000006264132297249298069_);}
9
+ </style>
10
+ <path class="st0" d="M60.1,0L0,34.7v69.4l60.1,34.7l60-34.7V34.7L60.1,0z M102.3,93.8l-42.3,24.4L17.8,93.8V45l42.3-24.4L102.3,45
11
+ V93.8z"/>
12
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="90.1166" y1="1.0868" x2="90.1166" y2="70.4884" gradientTransform="matrix(1 0 0 -1 0 139.8898)">
13
+ <stop offset="0" style="stop-color:#002D74"/>
14
+ <stop offset="1" style="stop-color:#002D74;stop-opacity:0"/>
15
+ </linearGradient>
16
+ <path class="st1" d="M60.1,138.8l60-34.7V34.7L60.1,0v20.6L102.3,45v48.9l-42.3,24.4V138.8z"/>
17
+ <linearGradient id="SVGID_00000034064843000503835000000005854543727190432132_" gradientUnits="userSpaceOnUse" x1="30.0233" y1="139.8898" x2="30.0233" y2="70.4884" gradientTransform="matrix(1 0 0 -1 0 139.8898)">
18
+ <stop offset="0" style="stop-color:#002D74"/>
19
+ <stop offset="1" style="stop-color:#002D74;stop-opacity:0"/>
20
+ </linearGradient>
21
+ <path style="fill:url(#SVGID_00000034064843000503835000000005854543727190432132_);" d="M60,0L0,34.7v69.4l60,34.7v-20.6L17.8,93.8
22
+ V44.9L60,20.6V0z"/>
23
+ <path class="st0" d="M88.1,85.6l-28,16.2L32,85.6V53.2L60.1,37l28,16.2L76.4,60l-16.4-9.5L43.7,60v18.9l16.4,9.5l16.4-9.5L88.1,85.6
24
+ z"/>
25
+ </svg>