@ic-pay/icpay-widget 1.2.94 → 1.2.111
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 -17
- package/dist/{amount-input-DBc6rB3K.d.ts → amount-input-DlnLWkeX.d.ts} +170 -0
- package/dist/chunk-QEOLHVOE.js +2 -0
- package/dist/chunk-QEOLHVOE.js.map +1 -0
- package/dist/chunk-RCWWBMN4.js +2112 -0
- package/dist/chunk-RCWWBMN4.js.map +1 -0
- package/dist/index.d.ts +14 -2
- package/dist/index.js +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.js +1 -1
- package/dist/wallet-select-VE5FSSFG.js +2 -0
- package/package.json +14 -3
- package/dist/chunk-WVNSOAVU.js +0 -2
- package/dist/chunk-WVNSOAVU.js.map +0 -1
- package/dist/chunk-Z7MZQN3H.js +0 -2112
- package/dist/chunk-Z7MZQN3H.js.map +0 -1
- package/dist/wallet-select-BEKXSS66.js +0 -2
- /package/dist/{wallet-select-BEKXSS66.js.map → wallet-select-VE5FSSFG.js.map} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# ICPay Widget
|
|
1
|
+
# ICPay Widget
|
|
2
2
|
|
|
3
|
-
Embeddable, framework-agnostic payment widgets powered by `@ic-pay/icpay-sdk`.
|
|
3
|
+
Embeddable, framework-agnostic payment widgets for **ICPay** — multi-chain crypto payments on **EVM (e.g. Base)**, **Solana**, and **Internet Computer**. Drop-in Web Components and React wrappers powered by `@ic-pay/icpay-sdk`.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -21,16 +21,26 @@ npm install @ic-pay/icpay-widget @ic-pay/icpay-sdk
|
|
|
21
21
|
|
|
22
22
|
## Components
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
| Component | Description |
|
|
25
|
+
|-----------|-------------|
|
|
26
|
+
| `icpay-pay-button` | One-click pay with fixed or configurable amount |
|
|
27
|
+
| `icpay-amount-input` | Enter custom USD amount, then pay |
|
|
28
|
+
| `icpay-tip-jar` | Preset tip amounts (e.g. $1, $5, $10) |
|
|
29
|
+
| `icpay-premium-content` | Gated content unlock (paywall) |
|
|
30
|
+
| `icpay-article-paywall` | Article paywall with preview and unlock |
|
|
31
|
+
| `icpay-coffee-shop` | Simple store with preset items and prices |
|
|
32
|
+
| `icpay-donation-thermometer` | Donation progress toward a goal |
|
|
33
|
+
| `icpay-progress-bar` | Transaction progress indicator (used internally) |
|
|
32
34
|
|
|
33
|
-
React bindings
|
|
35
|
+
React bindings for all components: `@ic-pay/icpay-widget/react`.
|
|
36
|
+
|
|
37
|
+
## Supported chains and wallets
|
|
38
|
+
|
|
39
|
+
- **EVM** (Base, etc.) — MetaMask, Coinbase Wallet, Brave, Rabby, OKX, WalletConnect (QR + deep links).
|
|
40
|
+
- **Solana** — Phantom, Backpack (and compatible `window.solana` providers).
|
|
41
|
+
- **Internet Computer** — Plug, Internet Identity (II), Oisy, NFID.
|
|
42
|
+
|
|
43
|
+
Use **token shortcodes** (e.g. `base_usdc`, `sol_usdc`, `ic_icp`) to choose chain and token. Filter options with `tokenShortcodes`, `chainShortcodes`, or `chainTypes` in config.
|
|
34
44
|
|
|
35
45
|
## Quick usage
|
|
36
46
|
|
|
@@ -43,7 +53,7 @@ HTML (with a bundler):
|
|
|
43
53
|
<icpay-pay-button
|
|
44
54
|
id="pay"
|
|
45
55
|
publishable-key="YOUR_PK"
|
|
46
|
-
token-shortcode="
|
|
56
|
+
token-shortcode="base_usdc"
|
|
47
57
|
amount-usd="5"
|
|
48
58
|
></icpay-pay-button>
|
|
49
59
|
```
|
|
@@ -54,16 +64,34 @@ import { IcpayPayButton } from '@ic-pay/icpay-widget/react';
|
|
|
54
64
|
|
|
55
65
|
export default function Example() {
|
|
56
66
|
return (
|
|
57
|
-
<IcpayPayButton
|
|
67
|
+
<IcpayPayButton
|
|
68
|
+
config={{
|
|
69
|
+
publishableKey: process.env.NEXT_PUBLIC_ICPAY_PK!,
|
|
70
|
+
tokenShortcode: 'base_usdc',
|
|
71
|
+
amountUsd: 5,
|
|
72
|
+
}}
|
|
73
|
+
/>
|
|
58
74
|
);
|
|
59
75
|
}
|
|
60
76
|
```
|
|
61
77
|
|
|
62
|
-
##
|
|
78
|
+
## Config highlights
|
|
79
|
+
|
|
80
|
+
- **publishableKey** (required) — From your ICPay account.
|
|
81
|
+
- **tokenShortcode** — Token/chain (e.g. `base_usdc`, `sol_usdc`, `ic_icp`). Omit to let the user pick.
|
|
82
|
+
- **tokenShortcodes** / **chainShortcodes** / **chainTypes** — Restrict which tokens or chains are shown.
|
|
83
|
+
- **recipientAddresses** — `{ evm?, ic?, sol? }` for relay payments to your addresses per chain.
|
|
84
|
+
- **theme** — `'light' | 'dark'` or a `ThemeConfig` object.
|
|
85
|
+
- **evmProvider** — Pass `window.ethereum` (or another provider) for EVM flows in the browser.
|
|
86
|
+
|
|
87
|
+
Full config and options: [docs.icpay.org](https://docs.icpay.org).
|
|
88
|
+
|
|
89
|
+
## Styling and theming
|
|
63
90
|
|
|
64
|
-
- Works out of the box.
|
|
65
|
-
-
|
|
91
|
+
- Works out of the box. Override with CSS variables on `:root` or the component (e.g. `--icpay-primary`, `--icpay-surface`, `--icpay-text`).
|
|
92
|
+
- Optional Tailwind build: `dist/tailwind.css`.
|
|
66
93
|
|
|
67
94
|
## Documentation
|
|
68
95
|
|
|
69
|
-
|
|
96
|
+
- **Component reference, theming, events, examples:** [https://docs.icpay.org](https://docs.icpay.org)
|
|
97
|
+
- **Sandbox (testnets):** [betterstripe.com](https://betterstripe.com) — test with Base Sepolia, Solana Devnet, and other test networks.
|
|
@@ -50,6 +50,7 @@ type CommonConfig = {
|
|
|
50
50
|
chainShortcodes?: string[];
|
|
51
51
|
tokenShortcodes?: string[];
|
|
52
52
|
chainTypes?: Array<'ic' | 'evm' | 'sol'>;
|
|
53
|
+
fiat_currency?: string;
|
|
53
54
|
metadata?: Record<string, any>;
|
|
54
55
|
derivationOrigin?: string;
|
|
55
56
|
actorProvider?: (canisterId: string, idl: any) => any;
|
|
@@ -63,6 +64,12 @@ type CommonConfig = {
|
|
|
63
64
|
disableAfterSuccess?: boolean;
|
|
64
65
|
onrampDisabled?: boolean;
|
|
65
66
|
onramp?: OnrampConfig;
|
|
67
|
+
/**
|
|
68
|
+
* Optional: existing payment intent id (e.g. from server/checkout).
|
|
69
|
+
* When set, widget loads the intent from icpay-api; if already completed, shows success.
|
|
70
|
+
* Otherwise amount/currency and payment flow are driven by the loaded intent.
|
|
71
|
+
*/
|
|
72
|
+
paymentIntentId?: string;
|
|
66
73
|
};
|
|
67
74
|
type PremiumContentConfig = CommonConfig & {
|
|
68
75
|
priceUsd: number;
|
|
@@ -184,6 +191,9 @@ declare class ICPayProgressBar extends LitElement {
|
|
|
184
191
|
private currentAmount;
|
|
185
192
|
private currentCurrency;
|
|
186
193
|
private currentLedgerSymbol;
|
|
194
|
+
/** Fiat currency code/symbol from payment intent (for success message). */
|
|
195
|
+
private currentFiatCode;
|
|
196
|
+
private currentFiatSymbol;
|
|
187
197
|
private confirmLoadingStartedAt;
|
|
188
198
|
private progressionTimer;
|
|
189
199
|
private currentWalletType;
|
|
@@ -289,6 +299,28 @@ declare class ICPayPremiumContent extends LitElement {
|
|
|
289
299
|
private onTransactionCompleted;
|
|
290
300
|
private onUnlock;
|
|
291
301
|
private tryAutoConnectPNP;
|
|
302
|
+
/** Ensure WalletSelect (pnp) is created with same config as wallet modal; used by generateWalletConnectQr / connectWallet. */
|
|
303
|
+
private getOrCreatePnp;
|
|
304
|
+
/**
|
|
305
|
+
* Pre-generate WalletConnect QR as a data URL. Host can show it in a placeholder (e.g. pay page left column).
|
|
306
|
+
* When user scans and approves, the widget is updated to "connected" so Pay does not open the wallet selector.
|
|
307
|
+
* hostOptions.onConnected is called when the phone wallet connects so the host can show "Connected" etc.
|
|
308
|
+
* Returns the QR image as data URL, or null if WalletConnect is not enabled/available.
|
|
309
|
+
*/
|
|
310
|
+
generateWalletConnectQr(hostOptions?: {
|
|
311
|
+
onConnected?: () => void;
|
|
312
|
+
}): Promise<string | null>;
|
|
313
|
+
/**
|
|
314
|
+
* Check if Coinbase/Base wallet is already connected (e.g. user returned from Base app deep link).
|
|
315
|
+
* Host can call this on load when showing Base option on mobile to show "Connected".
|
|
316
|
+
*/
|
|
317
|
+
checkCoinbaseConnection(): Promise<boolean>;
|
|
318
|
+
/**
|
|
319
|
+
* Connect a specific wallet by id (e.g. 'coinbase' for Base Wallet deep link on mobile).
|
|
320
|
+
* Host can use this for "Connect with Base" without opening the wallet modal.
|
|
321
|
+
* Resolves when connected; rejects on error.
|
|
322
|
+
*/
|
|
323
|
+
connectWallet(walletId: string): Promise<void>;
|
|
292
324
|
connectedCallback(): void;
|
|
293
325
|
disconnectedCallback(): void;
|
|
294
326
|
protected updated(changed: Map<string, unknown>): void;
|
|
@@ -349,6 +381,28 @@ declare class ICPayTipJar extends LitElement {
|
|
|
349
381
|
private walletBalances;
|
|
350
382
|
private tryAutoConnectPNP;
|
|
351
383
|
private get amounts();
|
|
384
|
+
/** Ensure WalletSelect (pnp) is created with same config as wallet modal; used by generateWalletConnectQr / connectWallet. */
|
|
385
|
+
private getOrCreatePnp;
|
|
386
|
+
/**
|
|
387
|
+
* Pre-generate WalletConnect QR as a data URL. Host can show it in a placeholder (e.g. pay page left column).
|
|
388
|
+
* When user scans and approves, the widget is updated to "connected" so Pay does not open the wallet selector.
|
|
389
|
+
* hostOptions.onConnected is called when the phone wallet connects so the host can show "Connected" etc.
|
|
390
|
+
* Returns the QR image as data URL, or null if WalletConnect is not enabled/available.
|
|
391
|
+
*/
|
|
392
|
+
generateWalletConnectQr(hostOptions?: {
|
|
393
|
+
onConnected?: () => void;
|
|
394
|
+
}): Promise<string | null>;
|
|
395
|
+
/**
|
|
396
|
+
* Check if Coinbase/Base wallet is already connected (e.g. user returned from Base app deep link).
|
|
397
|
+
* Host can call this on load when showing Base option on mobile to show "Connected".
|
|
398
|
+
*/
|
|
399
|
+
checkCoinbaseConnection(): Promise<boolean>;
|
|
400
|
+
/**
|
|
401
|
+
* Connect a specific wallet by id (e.g. 'coinbase' for Base Wallet deep link on mobile).
|
|
402
|
+
* Host can use this for "Connect with Base" without opening the wallet modal.
|
|
403
|
+
* Resolves when connected; rejects on error.
|
|
404
|
+
*/
|
|
405
|
+
connectWallet(walletId: string): Promise<void>;
|
|
352
406
|
connectedCallback(): void;
|
|
353
407
|
protected updated(changed: Map<string, unknown>): void;
|
|
354
408
|
private onSwitchAccount;
|
|
@@ -414,6 +468,28 @@ declare class ICPayArticlePaywall extends LitElement {
|
|
|
414
468
|
private onTransactionCompleted;
|
|
415
469
|
private onUnlock;
|
|
416
470
|
private tryAutoConnectPNP;
|
|
471
|
+
/** Ensure WalletSelect (pnp) is created with same config as wallet modal; used by generateWalletConnectQr / connectWallet. */
|
|
472
|
+
private getOrCreatePnp;
|
|
473
|
+
/**
|
|
474
|
+
* Pre-generate WalletConnect QR as a data URL. Host can show it in a placeholder (e.g. pay page left column).
|
|
475
|
+
* When user scans and approves, the widget is updated to "connected" so Pay does not open the wallet selector.
|
|
476
|
+
* hostOptions.onConnected is called when the phone wallet connects so the host can show "Connected" etc.
|
|
477
|
+
* Returns the QR image as data URL, or null if WalletConnect is not enabled/available.
|
|
478
|
+
*/
|
|
479
|
+
generateWalletConnectQr(hostOptions?: {
|
|
480
|
+
onConnected?: () => void;
|
|
481
|
+
}): Promise<string | null>;
|
|
482
|
+
/**
|
|
483
|
+
* Check if Coinbase/Base wallet is already connected (e.g. user returned from Base app deep link).
|
|
484
|
+
* Host can call this on load when showing Base option on mobile to show "Connected".
|
|
485
|
+
*/
|
|
486
|
+
checkCoinbaseConnection(): Promise<boolean>;
|
|
487
|
+
/**
|
|
488
|
+
* Connect a specific wallet by id (e.g. 'coinbase' for Base Wallet deep link on mobile).
|
|
489
|
+
* Host can use this for "Connect with Base" without opening the wallet modal.
|
|
490
|
+
* Resolves when connected; rejects on error.
|
|
491
|
+
*/
|
|
492
|
+
connectWallet(walletId: string): Promise<void>;
|
|
417
493
|
private attachTransakMessageListener;
|
|
418
494
|
private detachTransakMessageListener;
|
|
419
495
|
private onTransakMessage;
|
|
@@ -476,6 +552,28 @@ declare class ICPayCoffeeShop extends LitElement {
|
|
|
476
552
|
private selectItem;
|
|
477
553
|
private selectSymbol;
|
|
478
554
|
private get selectedItem();
|
|
555
|
+
/** Ensure WalletSelect (pnp) is created with same config as wallet modal; used by generateWalletConnectQr / connectWallet. */
|
|
556
|
+
private getOrCreatePnp;
|
|
557
|
+
/**
|
|
558
|
+
* Pre-generate WalletConnect QR as a data URL. Host can show it in a placeholder (e.g. pay page left column).
|
|
559
|
+
* When user scans and approves, the widget is updated to "connected" so Pay does not open the wallet selector.
|
|
560
|
+
* hostOptions.onConnected is called when the phone wallet connects so the host can show "Connected" etc.
|
|
561
|
+
* Returns the QR image as data URL, or null if WalletConnect is not enabled/available.
|
|
562
|
+
*/
|
|
563
|
+
generateWalletConnectQr(hostOptions?: {
|
|
564
|
+
onConnected?: () => void;
|
|
565
|
+
}): Promise<string | null>;
|
|
566
|
+
/**
|
|
567
|
+
* Check if Coinbase/Base wallet is already connected (e.g. user returned from Base app deep link).
|
|
568
|
+
* Host can call this on load when showing Base option on mobile to show "Connected".
|
|
569
|
+
*/
|
|
570
|
+
checkCoinbaseConnection(): Promise<boolean>;
|
|
571
|
+
/**
|
|
572
|
+
* Connect a specific wallet by id (e.g. 'coinbase' for Base Wallet deep link on mobile).
|
|
573
|
+
* Host can use this for "Connect with Base" without opening the wallet modal.
|
|
574
|
+
* Resolves when connected; rejects on error.
|
|
575
|
+
*/
|
|
576
|
+
connectWallet(walletId: string): Promise<void>;
|
|
479
577
|
private resetPaymentFlow;
|
|
480
578
|
private order;
|
|
481
579
|
private attachTransakMessageListener;
|
|
@@ -531,6 +629,28 @@ declare class ICPayDonationThermometer extends LitElement {
|
|
|
531
629
|
private walletBalances;
|
|
532
630
|
private tryAutoConnectPNP;
|
|
533
631
|
private get amounts();
|
|
632
|
+
/** Ensure WalletSelect (pnp) is created with same config as wallet modal; used by generateWalletConnectQr / connectWallet. */
|
|
633
|
+
private getOrCreatePnp;
|
|
634
|
+
/**
|
|
635
|
+
* Pre-generate WalletConnect QR as a data URL. Host can show it in a placeholder (e.g. pay page left column).
|
|
636
|
+
* When user scans and approves, the widget is updated to "connected" so Pay does not open the wallet selector.
|
|
637
|
+
* hostOptions.onConnected is called when the phone wallet connects so the host can show "Connected" etc.
|
|
638
|
+
* Returns the QR image as data URL, or null if WalletConnect is not enabled/available.
|
|
639
|
+
*/
|
|
640
|
+
generateWalletConnectQr(hostOptions?: {
|
|
641
|
+
onConnected?: () => void;
|
|
642
|
+
}): Promise<string | null>;
|
|
643
|
+
/**
|
|
644
|
+
* Check if Coinbase/Base wallet is already connected (e.g. user returned from Base app deep link).
|
|
645
|
+
* Host can call this on load when showing Base option on mobile to show "Connected".
|
|
646
|
+
*/
|
|
647
|
+
checkCoinbaseConnection(): Promise<boolean>;
|
|
648
|
+
/**
|
|
649
|
+
* Connect a specific wallet by id (e.g. 'coinbase' for Base Wallet deep link on mobile).
|
|
650
|
+
* Host can use this for "Connect with Base" without opening the wallet modal.
|
|
651
|
+
* Resolves when connected; rejects on error.
|
|
652
|
+
*/
|
|
653
|
+
connectWallet(walletId: string): Promise<void>;
|
|
534
654
|
connectedCallback(): void;
|
|
535
655
|
protected updated(changed: Map<string, unknown>): void;
|
|
536
656
|
private onSwitchAccount;
|
|
@@ -586,14 +706,42 @@ declare class ICPayPayButton extends LitElement {
|
|
|
586
706
|
private balancesLoading;
|
|
587
707
|
private balancesError;
|
|
588
708
|
private walletBalances;
|
|
709
|
+
private loadedPaymentIntent;
|
|
710
|
+
private paymentIntentLoading;
|
|
589
711
|
private onrampPollTimer;
|
|
590
712
|
private pnp;
|
|
591
713
|
private oisyConnectRetriedNewTab;
|
|
592
714
|
private sdk;
|
|
593
715
|
private onrampPollingActive;
|
|
594
716
|
private onrampNotifyController;
|
|
717
|
+
private onTransactionCompleted;
|
|
595
718
|
private getSdk;
|
|
719
|
+
/** Ensure WalletSelect (pnp) is created with same config as wallet modal; used by generateWalletConnectQr. */
|
|
720
|
+
private getOrCreatePnp;
|
|
721
|
+
/**
|
|
722
|
+
* Pre-generate WalletConnect QR as a data URL. Host can show it in a placeholder (e.g. pay page left column).
|
|
723
|
+
* When user scans and approves, the widget is updated to "connected" so Pay does not open the wallet selector.
|
|
724
|
+
* hostOptions.onConnected is called when the phone wallet connects so the host can show "Connected" etc.
|
|
725
|
+
* Returns the QR image as data URL, or null if WalletConnect is not enabled/available.
|
|
726
|
+
*/
|
|
727
|
+
generateWalletConnectQr(hostOptions?: {
|
|
728
|
+
onConnected?: () => void;
|
|
729
|
+
}): Promise<string | null>;
|
|
730
|
+
/**
|
|
731
|
+
* Check if Coinbase/Base wallet is already connected (e.g. user returned from Base app deep link).
|
|
732
|
+
* Host can call this on load when showing Base option on mobile to show "Connected".
|
|
733
|
+
*/
|
|
734
|
+
checkCoinbaseConnection(): Promise<boolean>;
|
|
735
|
+
/**
|
|
736
|
+
* Connect a specific wallet by id (e.g. 'coinbase' for Base Wallet deep link on mobile).
|
|
737
|
+
* Host can use this for "Connect with Base" without opening the wallet modal.
|
|
738
|
+
* Resolves when connected; rejects on error.
|
|
739
|
+
*/
|
|
740
|
+
connectWallet(walletId: string): Promise<void>;
|
|
596
741
|
connectedCallback(): void;
|
|
742
|
+
disconnectedCallback(): void;
|
|
743
|
+
/** Load payment intent by id from config; if completed show success, else merge intent into config for amount/currency and pass to SDK. */
|
|
744
|
+
private loadPaymentIntentIfNeeded;
|
|
597
745
|
protected updated(changed: Map<string, unknown>): void;
|
|
598
746
|
private onSwitchAccount;
|
|
599
747
|
private selectSymbol;
|
|
@@ -655,6 +803,28 @@ declare class ICPayAmountInput extends LitElement {
|
|
|
655
803
|
private onInputChange;
|
|
656
804
|
private selectSymbol;
|
|
657
805
|
private isValidAmount;
|
|
806
|
+
/** Ensure WalletSelect (pnp) is created with same config as wallet modal; used by generateWalletConnectQr / connectWallet. */
|
|
807
|
+
private getOrCreatePnp;
|
|
808
|
+
/**
|
|
809
|
+
* Pre-generate WalletConnect QR as a data URL. Host can show it in a placeholder (e.g. pay page left column).
|
|
810
|
+
* When user scans and approves, the widget is updated to "connected" so Pay does not open the wallet selector.
|
|
811
|
+
* hostOptions.onConnected is called when the phone wallet connects so the host can show "Connected" etc.
|
|
812
|
+
* Returns the QR image as data URL, or null if WalletConnect is not enabled/available.
|
|
813
|
+
*/
|
|
814
|
+
generateWalletConnectQr(hostOptions?: {
|
|
815
|
+
onConnected?: () => void;
|
|
816
|
+
}): Promise<string | null>;
|
|
817
|
+
/**
|
|
818
|
+
* Check if Coinbase/Base wallet is already connected (e.g. user returned from Base app deep link).
|
|
819
|
+
* Host can call this on load when showing Base option on mobile to show "Connected".
|
|
820
|
+
*/
|
|
821
|
+
checkCoinbaseConnection(): Promise<boolean>;
|
|
822
|
+
/**
|
|
823
|
+
* Connect a specific wallet by id (e.g. 'coinbase' for Base Wallet deep link on mobile).
|
|
824
|
+
* Host can use this for "Connect with Base" without opening the wallet modal.
|
|
825
|
+
* Resolves when connected; rejects on error.
|
|
826
|
+
*/
|
|
827
|
+
connectWallet(walletId: string): Promise<void>;
|
|
658
828
|
private ensureWallet;
|
|
659
829
|
private getWalletId;
|
|
660
830
|
private getWalletLabel;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Actor as Ft,HttpAgent as Ht}from"@dfinity/agent";import{Actor as Nt}from"@dfinity/agent";var x=class{constructor(t){this.id="plug";this.label="Plug";this.icon=null;this._config=t.config||{},this._adapterCfg=t.adapter}async isInstalled(){return!!(typeof window<"u"&&window.ic&&window.ic.plug)}async isConnected(){try{return!!await window.ic?.plug?.isConnected?.()}catch{return!1}}async connect(){if(!await this.isInstalled())throw new Error("Plug is not installed");await this.isConnected()||await window.ic.plug.requestConnect?.({host:this._config.icHost});let e=await window.ic.plug.getPrincipal?.(),r=typeof e?.toText=="function"?e.toText():e?.toString?.()||null;return{owner:r,principal:r,connected:!0}}async disconnect(){try{await window.ic?.plug?.disconnect?.()}catch{}}async getPrincipal(){try{let t=await window.ic.plug.getPrincipal?.();return typeof t?.toText=="function"?t.toText():t?.toString?.()||null}catch{return null}}getActor(t){let e=window.ic?.plug?.agent;if(!e)throw new Error("Plug agent not initialized");return Nt.createActor(t.idl,{agent:e,canisterId:t.canisterId})}};import{Actor as mt,HttpAgent as Dt}from"@dfinity/agent";import{AuthClient as jt}from"@dfinity/auth-client";var E=class{constructor(t){this.id="ii";this.label="Internet Identity";this.icon=null;this._client=null;this._agent=null;this._config=t.config||{}}async client(){return this._client?this._client:(this._client=await jt.create(),this._client)}async isInstalled(){return!0}async isConnected(){return await(await this.client()).isAuthenticated()}async connect(){let t=await this.client();await t.isAuthenticated()||await t.login({identityProvider:this._config.derivationOrigin,maxTimeToLive:BigInt(10080*60*1e9)});let r=t.getIdentity();this._agent=new Dt({host:this._config.icHost,identity:r});let i=r.getPrincipal().toText();return{owner:i,principal:i,connected:!0}}async disconnect(){try{await(await this.client()).logout()}catch{}this._agent=null}async getPrincipal(){try{return(await this.client()).getIdentity().getPrincipal().toText()}catch{return null}}getActor(t){if(!this._agent)throw new Error("II agent not initialized");return mt.createActor(t.idl,{agent:this._agent,canisterId:t.canisterId})}};import{Actor as zt,HttpAgent as Tt}from"@dfinity/agent";import{PostMessageTransport as Lt}from"@slide-computer/signer-web";import{Signer as Ct}from"@slide-computer/signer";import{SignerAgent as vt}from"@slide-computer/signer-agent";var O=class{constructor(t){this.id="nfid";this.label="NFID";this.icon=null;this._agent=null;this._principal=null;this._config=t.config||{}}async isInstalled(){return!0}async isConnected(){return!!this._agent}async connect(){let e=(this._config?.adapters||{}).nfid?.config||{},r=e.signerUrl,i=e.hostUrl||this._config.icHost;if(!r)throw new Error("NFID signerUrl not configured");if(!i)throw new Error("IC host not configured");let o=new Tt({host:i}),n=new Lt({url:r,...e.transport||{}}),c=new Ct({transport:n});await c.openChannel();let M=(await c.accounts())?.[0]?.owner,d=await vt.create({signer:c,agent:o,account:M}),p=null;try{p=(await d.getPrincipal())?.toText?.()||null}catch{}return this._agent=d,this._principal=p,{owner:p,principal:p,connected:!0}}async disconnect(){this._agent=null,this._principal=null}async getPrincipal(){return this._principal}getActor(t){if(!this._agent)throw new Error("NFID agent not initialized");return zt.createActor(t.idl,{agent:this._agent,canisterId:t.canisterId})}};import{Actor as bt,HttpAgent as xt}from"@dfinity/agent";import{PostMessageTransport as Et}from"@slide-computer/signer-web";import{Signer as Ot}from"@slide-computer/signer";import{SignerAgent as St}from"@slide-computer/signer-agent";var S=class{constructor(t){this.id="oisy";this.label="Oisy";this.icon=null;this._agent=null;this._principal=null;this._config=t.config||{}}async isInstalled(){return!0}async isConnected(){return!!this._agent}async connect(){let e=(this._config?.adapters||{}).oisy?.config||{},r=e.signerUrl,i=e.hostUrl||this._config.icHost,o=e.transport||{};if(!r)throw new Error("Oisy signerUrl not configured");if(!i)throw new Error("IC host not configured");let n=o.windowOpenerFeatures??"",c=new xt({host:i}),s=new Et({url:r,windowOpenerFeatures:n,detectNonClickEstablishment:!1,...o}),M=new Ot({transport:s});await M.openChannel();let p=(await M.accounts())?.[0]?.owner,l=await St.create({signer:M,agent:c,account:p}),u=null;try{u=(await l.getPrincipal())?.toText?.()||null}catch{}return this._agent=l,this._principal=u,{owner:u,principal:u,connected:!0}}async disconnect(){this._agent=null,this._principal=null}async getPrincipal(){return this._principal}getActor(t){if(!this._agent)throw new Error("Oisy agent not initialized");return bt.createActor(t.idl,{agent:this._agent,canisterId:t.canisterId})}};var P=class{constructor(t){this.id="metamask";this.label="MetaMask";this.config=t.config||{}}isMobileBrowser(){try{let t=typeof navigator<"u"?navigator:window?.navigator,e=String(t?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(e)}catch{return!1}}getProvider(){try{let e=(typeof window<"u"?window:{}).ethereum;if(e&&Array.isArray(e.providers)){let r=e.providers.find(i=>i&&i.isMetaMask);if(r)return r}if(e&&e.isMetaMask||this.isMobileBrowser()&&e&&typeof e.request=="function")return e}catch{}return null}getEvmProvider(){return this.getProvider()}async isInstalled(){try{return!!this.getProvider()}catch{return!1}}async isConnected(){try{let t=this.getProvider();if(!t)return!1;let r=await(typeof t.request=="function"?t.request({method:"eth_accounts"}):Promise.resolve([]));return Array.isArray(r)&&r.length>0}catch{return!1}}async connect(){let t=this.getProvider();if(!t){if(typeof window<"u"&&this.isMobileBrowser()){try{let s=`https://metamask.app.link/dapp/${String(window.location?.href||"").replace(/^https?:\/\//i,"")}`;try{try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-deeplink",{detail:{wallet:"metamask",url:s}}))}catch{}window.location.href=s}catch{try{window.open(s,"_self","noopener,noreferrer")}catch{}}}catch{}throw new Error("Opening MetaMask\u2026 If nothing happens, install MetaMask and try again.")}throw new Error("MetaMask not available")}let e=n=>new Promise(c=>setTimeout(c,n)),r=async()=>{try{let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}try{let n=await t.request?.({method:"eth_requestAccounts"});if(Array.isArray(n)&&n.length>0)return n}catch(n){if(n&&(n.code===4001||n.code==="4001"))throw new Error("Connection request was rejected")}try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]});let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}return[]},i=[];for(let n=0;n<3&&i.length===0;n++)t=this.getProvider()||t,i=await r(),i.length===0&&await e(300);let o=Array.isArray(i)&&i[0]||"";if(!o)throw new Error("No account returned by MetaMask");return{owner:o,principal:o,connected:!0}}async disconnect(){try{let t=this.getProvider()||(typeof window<"u"?window.ethereum:null);if(!t)return;try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]})}catch{}try{t.removeAllListeners?.("accountsChanged")}catch{}try{t.removeAllListeners?.("chainChanged")}catch{}try{t.removeAllListeners?.("disconnect")}catch{}}catch{}}async getPrincipal(){try{let t=this.getProvider()||(typeof window<"u"?window.ethereum:null);if(!t)return null;let e=await t.request?.({method:"eth_accounts"});return Array.isArray(e)&&e[0]||""||null}catch{return null}}getActor(t){throw new Error("EVM wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};var X="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAzNTguOCAxNzkuOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzU4LjggMTc5Ljg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDp1cmwoI1NWR0lEXzFfKTt9Cgkuc3Qxe2ZpbGw6dXJsKCNTVkdJRF8yXyk7fQoJLnN0MntmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiMyOUFCRTI7fQo8L3N0eWxlPgo8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjIyNC43ODUzIiB5MT0iMjU3Ljc1MzYiIHgyPSIzNDguMDY2MyIgeTI9IjEzMy40NTgxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgMjcyKSI+Cgk8c3RvcCAgb2Zmc2V0PSIwLjIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRjE1QTI0Ii8+Cgk8c3RvcCAgb2Zmc2V0PSIwLjY4NDEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQkIwM0IiLz4KPC9saW5lYXJHcmFkaWVudD4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTI3MS42LDBjLTIwLDAtNDEuOSwxMC45LTY1LDMyLjRjLTEwLjksMTAuMS0yMC41LDIxLjEtMjcuNSwyOS44YzAsMCwxMS4yLDEyLjksMjMuNSwyNi44CgljNi43LTguNCwxNi4yLTE5LjgsMjcuMy0zMC4xYzIwLjUtMTkuMiwzMy45LTIzLjEsNDEuNi0yMy4xYzI4LjgsMCw1Mi4yLDI0LjIsNTIuMiw1NC4xYzAsMjkuNi0yMy40LDUzLjgtNTIuMiw1NC4xCgljLTEuNCwwLTMtMC4yLTUtMC42YzguNCwzLjksMTcuNSw2LjcsMjYsNi43YzUyLjgsMCw2My4yLTM2LjUsNjMuOC0zOS4xYzEuNS02LjcsMi40LTEzLjcsMi40LTIwLjlDMzU4LjYsNDAuNCwzMTkuNiwwLDI3MS42LDB6Ii8+CjxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMl8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTMzLjk0NjEiIHkxPSIxMDYuNDI2MiIgeDI9IjEwLjY2NTMiIHkyPSIyMzAuNzIxNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAwIDI3MikiPgoJPHN0b3AgIG9mZnNldD0iMC4yMSIgc3R5bGU9InN0b3AtY29sb3I6I0VEMUU3OSIvPgoJPHN0b3AgIG9mZnNldD0iMC44OTI5IiBzdHlsZT0ic3RvcC1jb2xvcjojNTIyNzg1Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik04Ny4xLDE3OS44YzIwLDAsNDEuOS0xMC45LDY1LTMyLjRjMTAuOS0xMC4xLDIwLjUtMjEuMSwyNy41LTI5LjhjMCwwLTExLjItMTIuOS0yMy41LTI2LjgKCWMtNi43LDguNC0xNi4yLDE5LjgtMjcuMywzMC4xYy0yMC41LDE5LTM0LDIzLjEtNDEuNiwyMy4xYy0yOC44LDAtNTIuMi0yNC4yLTUyLjItNTQuMWMwLTI5LjYsMjMuNC01My44LDUyLjItNTQuMQoJYzEuNCwwLDMsMC4yLDUsMC42Yy04LjQtMy45LTE3LjUtNi43LTI2LTYuN0MxMy40LDI5LjYsMyw2Ni4xLDIuNCw2OC44QzAuOSw3NS41LDAsODIuNSwwLDg5LjdDMCwxMzkuNCwzOSwxNzkuOCw4Ny4xLDE3OS44eiIvPgo8cGF0aCBjbGFzcz0ic3QyIiBkPSJNMTI3LjMsNTkuN2MtNS44LTUuNi0zNC0yOC41LTYxLTI5LjNDMTguMSwyOS4yLDQsNjQuMiwyLjcsNjguN0MxMiwyOS41LDQ2LjQsMC4yLDg3LjIsMAoJYzMzLjMsMCw2NywzMi43LDkxLjksNjIuMmMwLDAsMC4xLTAuMSwwLjEtMC4xYzAsMCwxMS4yLDEyLjksMjMuNSwyNi44YzAsMCwxNCwxNi41LDI4LjgsMzFjNS44LDUuNiwzMy45LDI4LjIsNjAuOSwyOQoJYzQ5LjUsMS40LDYzLjItMzUuNiw2My45LTM4LjRjLTkuMSwzOS41LTQzLjYsNjguOS04NC42LDY5LjFjLTMzLjMsMC02Ny0zMi43LTkyLTYyLjJjMCwwLjEtMC4xLDAuMS0wLjEsMC4yCgljMCwwLTExLjItMTIuOS0yMy41LTI2LjhDMTU2LjIsOTAuOCwxNDIuMiw3NC4yLDEyNy4zLDU5Ljd6IE0yLjcsNjkuMWMwLTAuMSwwLTAuMiwwLjEtMC4zQzIuNyw2OC45LDIuNyw2OSwyLjcsNjkuMXoiLz4KPC9zdmc+Cg==";var K="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNS45MDIyIDMuMTU2MjlDMTYuNzcxNCAzLjA2MzYzIDE3LjQwMDggMi4yODM5OCAxNy4zMDgxIDEuNDE0ODlDMTcuMjE1NSAwLjU0NTgwOSAxNi40MzU4IC0wLjA4MzYwOTkgMTUuNTY2NyAwLjAwOTA0OTQ2TDEyLjMzNDUgMC4zNTM2MzNDMTAuNjc4NiAwLjUzMDE2NSA5LjM1MDQ2IDAuNjcxNzUxIDguMjcxOCAwLjg2NzMwNkM3LjE2MDYgMS4wNjg3NiA2LjIwODI3IDEuMzQ0MTQgNS4zMjM3OCAxLjgzOTgxQzMuODg3NzMgMi42NDQ1NyAyLjY5NzE5IDMuODIzODUgMS44Nzk0NCA1LjI1MTk2QzEuMzc1NjggNi4xMzE3MyAxLjA5MjA0IDcuMDgxMTIgMC44ODExODUgOC4xODk2MUMwLjY3NjUzNSA5LjI2NTQ5IDAuNTIzODkzIDEwLjU5MSAwLjMzMzYyMSAxMi4yNDMyTDAuMzI1NDI0IDEyLjMxNDRMMC4wMDgwNjAwNiAxNS40NzA0Qy0wLjA3OTM4NzUgMTYuMzQgMC41NTQ3MjYgMTcuMTE1OSAxLjQyNDM5IDE3LjIwMzRDMi4yOTQwNiAxNy4yOTA4IDMuMDY5OTUgMTYuNjU2NyAzLjE1NzQgMTUuNzg3MUwzLjQ3MjQ4IDEyLjY1MzhDMy42NzA1NCAxMC45MzQgMy44MTA2NiA5LjcyNzMgMy45OTA2NiA4Ljc4MTAzQzQuMTY3MzEgNy44NTIzNSA0LjM2NDQ5IDcuMjgxODEgNC42MjYyNiA2LjgyNDY3QzUuMTU5MDEgNS44OTQyNyA1LjkzNDg3IDUuMTI1NTkgNi44NzEyMSA0LjYwMDg2QzcuMzMxNTEgNC4zNDI5MSA3LjkwNDg2IDQuMTUwNTEgOC44MzY0NiAzLjk4MTYxQzkuNzg3NjYgMy44MDkxNiAxMS4wMDA1IDMuNjc4ODggMTIuNzI5OSAzLjQ5NDVMMTUuOTAyMiAzLjE1NjI5Wk00Ni42OTE5IDEuNDE0ODlDNDYuNTk5MiAyLjI4Mzk4IDQ3LjIyODYgMy4wNjM2MyA0OC4wOTc4IDMuMTU2MjlMNTEuMjcwMSAzLjQ5NDVDNTIuOTk5NSAzLjY3ODg4IDU0LjIxMjMgMy44MDkxNiA1NS4xNjM1IDMuOTgxNjFDNTYuMDk1MSA0LjE1MDUxIDU2LjY2ODUgNC4zNDI5MSA1Ny4xMjg4IDQuNjAwODZDNTguMDY1MSA1LjEyNTU5IDU4Ljg0MSA1Ljg5NDI3IDU5LjM3MzcgNi44MjQ2N0M1OS42MzU1IDcuMjgxODEgNTkuODMyNyA3Ljg1MjM1IDYwLjAwOTMgOC43ODEwM0M2MC4xODkzIDkuNzI3MyA2MC4zMjk1IDEwLjkzNCA2MC41Mjc1IDEyLjY1MzhMNjAuODQyNiAxNS43ODcxQzYwLjkzIDE2LjY1NjcgNjEuNzA1OSAxNy4yOTA4IDYyLjU3NTYgMTcuMjAzNEM2My40NDUzIDE3LjExNTkgNjQuMDc5NCAxNi4zNCA2My45OTE5IDE1LjQ3MDRMNjMuNjc0NiAxMi4zMTQ0TDYzLjY2NjQgMTIuMjQzMkM2My40NzYxIDEwLjU5MSA2My4zMjM1IDkuMjY1NDkgNjMuMTE4OCA4LjE4OTYxQzYyLjkwOCA3LjA4MTEyIDYyLjYyNDMgNi4xMzE3MyA2Mi4xMjA2IDUuMjUxOTZDNjEuMzAyOCAzLjgyMzg1IDYwLjExMjMgMi42NDQ1NyA1OC42NzYyIDEuODM5ODFDNTcuNzkxNyAxLjM0NDE0IDU2LjgzOTQgMS4wNjg3NiA1NS43MjgyIDAuODY3MzA2QzU0LjY0OTUgMC42NzE3NTEgNTMuMzIxNCAwLjUzMDE2NSA1MS42NjU1IDAuMzUzNjMzTDQ4LjQzMzMgMC4wMDkwNDk0NkM0Ny41NjQyIC0wLjA4MzYwOTkgNDYuNzg0NSAwLjU0NTgwOSA0Ni42OTE5IDEuNDE0ODlaTTQ2LjY5MTkgNjIuNTg1MUM0Ni41OTkyIDYxLjcxNiA0Ny4yMjg2IDYwLjkzNjQgNDguMDk3OCA2MC44NDM3TDUxLjI3MDEgNjAuNTA1NUM1Mi45OTk1IDYwLjMyMTEgNTQuMjEyMyA2MC4xOTA4IDU1LjE2MzUgNjAuMDE4NEM1Ni4wOTUxIDU5Ljg0OTUgNTYuNjY4NSA1OS42NTcxIDU3LjEyODggNTkuMzk5MUM1OC4wNjUxIDU4Ljg3NDQgNTguODQxIDU4LjEwNTcgNTkuMzczNyA1Ny4xNzUzQzU5LjYzNTUgNTYuNzE4MiA1OS44MzI3IDU2LjE0NzYgNjAuMDA5MyA1NS4yMTlDNjAuMTg5MyA1NC4yNzI3IDYwLjMyOTUgNTMuMDY2IDYwLjUyNzUgNTEuMzQ2Mkw2MC44NDI2IDQ4LjIxMjlDNjAuOTMgNDcuMzQzMyA2MS43MDU5IDQ2LjcwOTIgNjIuNTc1NiA0Ni43OTY2QzYzLjQ0NTMgNDYuODg0MSA2NC4wNzk0IDQ3LjY2IDYzLjk5MTkgNDguNTI5Nkw2My42NzQ2IDUxLjY4NTZMNjMuNjY2NCA1MS43NTY4QzYzLjQ3NjEgNTMuNDA5IDYzLjMyMzUgNTQuNzM0NSA2My4xMTg4IDU1LjgxMDRDNjIuOTA4IDU2LjkxODkgNjIuNjI0MyA1Ny44NjgzIDYyLjEyMDYgNTguNzQ4QzYxLjMwMjggNjAuMTc2MiA2MC4xMTIzIDYxLjM1NTQgNTguNjc2MiA2Mi4xNjAyQzU3Ljc5MTcgNjIuNjU1OSA1Ni44Mzk0IDYyLjkzMTIgNTUuNzI4MiA2My4xMzI3QzU0LjY0OTYgNjMuMzI4MiA1My4zMjE2IDYzLjQ2OTggNTEuNjY1OCA2My42NDYzTDUxLjY2NTYgNjMuNjQ2M0w1MS42NjU1IDYzLjY0NjRMNTEuNjY1NSA2My42NDY0TDQ4LjQzMzMgNjMuOTkxQzQ3LjU2NDIgNjQuMDgzNiA0Ni43ODQ1IDYzLjQ1NDIgNDYuNjkxOSA2Mi41ODUxWk0xNy4zMDgxIDYyLjU4NTZDMTcuNDAwOCA2MS43MTY1IDE2Ljc3MTQgNjAuOTM2OSAxNS45MDIyIDYwLjg0NDJMMTIuNzI5OSA2MC41MDZDMTEuMDAwNSA2MC4zMjE2IDkuNzg3NjYgNjAuMTkxMyA4LjgzNjQ2IDYwLjAxODlDNy45MDQ4NiA1OS44NSA3LjMzMTUxIDU5LjY1NzYgNi44NzEyMSA1OS4zOTk2QzUuOTM0ODcgNTguODc0OSA1LjE1OTAxIDU4LjEwNjIgNC42MjYyNiA1Ny4xNzU4QzQuMzY0NDkgNTYuNzE4NyA0LjE2NzMxIDU2LjE0ODEgMy45OTA2NiA1NS4yMTk1QzMuODEwNjYgNTQuMjczMiAzLjY3MDU0IDUzLjA2NjUgMy40NzI0OCA1MS4zNDY3TDMuMTU3NCA0OC4yMTM0QzMuMDY5OTUgNDcuMzQzOCAyLjI5NDA2IDQ2LjcwOTcgMS40MjQzOSA0Ni43OTcxQzAuNTU0NzI2IDQ2Ljg4NDYgLTAuMDc5Mzg3NSA0Ny42NjA0IDAuMDA4MDYwMDYgNDguNTMwMUwwLjMyNTQyNCA1MS42ODYxTDAuMzMzNjIxIDUxLjc1NzNDMC41MjM4OTMgNTMuNDA5NSAwLjY3NjUzNSA1NC43MzUgMC44ODExODUgNTUuODEwOUMxLjA5MjA0IDU2LjkxOTQgMS4zNzU2OCA1Ny44Njg4IDEuODc5NDQgNTguNzQ4NUMyLjY5NzE5IDYwLjE3NjYgMy44ODc3MyA2MS4zNTU5IDUuMzIzNzggNjIuMTYwN0M2LjIwODI3IDYyLjY1NjMgNy4xNjA2IDYyLjkzMTcgOC4yNzE4IDYzLjEzMzJDOS4zNTA0NCA2My4zMjg3IDEwLjY3ODYgNjMuNDcwMyAxMi4zMzQ1IDYzLjY0NjhMMTIuMzM0NSA2My42NDY5TDE1LjU2NjcgNjMuOTkxNEMxNi40MzU4IDY0LjA4NDEgMTcuMjE1NSA2My40NTQ3IDE3LjMwODEgNjIuNTg1NlpNMTYuNDUxMiAxOS43OTU0QzE1LjY5NTUgMTkuNzk1NCAxNS4wODI4IDIwLjQwODEgMTUuMDgyOCAyMS4xNjM4VjQzLjI5NzJDMTUuMDgyOCA0NC4wNTMgMTUuNjk1NSA0NC42NjU2IDE2LjQ1MTIgNDQuNjY1NkgyMC43NDk0QzIxLjUwNTIgNDQuNjY1NiAyMi4xMTc4IDQ0LjA1MyAyMi4xMTc4IDQzLjI5NzJWMjEuMTYzOEMyMi4xMTc4IDIwLjQwODEgMjEuNTA1MiAxOS43OTU0IDIwLjc0OTQgMTkuNzk1NEgxNi40NTEyWk0yOC4xMDgyIDE5Ljc5NTRDMjcuMzUyNSAxOS43OTU0IDI2LjczOTggMjAuNDA4MSAyNi43Mzk4IDIxLjE2MzhWNDMuMjk3MkMyNi43Mzk4IDQ0LjA1MyAyNy4zNTI1IDQ0LjY2NTYgMjguMTA4MiA0NC42NjU2SDM4LjUwMDRDNDEuMjI0NCA0NC42NjU2IDQzLjY0MDUgNDQuMTU2NCA0NS43NDg3IDQzLjEzNzlDNDcuODU2OCA0Mi4xMTk0IDQ5LjQ5MTIgNDAuNjc0NiA1MC42NTE5IDM4LjgwMzRDNTEuODEyNSAzNi45MzIyIDUyLjM5MjkgMzQuNzQxMiA1Mi4zOTI5IDMyLjIzMDVDNTIuMzkyOSAyOS43MTk4IDUxLjgxMjUgMjcuNTI4OSA1MC42NTE5IDI1LjY1NzdDNDkuNDkxMiAyMy43ODY1IDQ3Ljg1NjggMjIuMzQxNyA0NS43NDg3IDIxLjMyMzJDNDMuNjQwNSAyMC4zMDQ3IDQxLjIyNDQgMTkuNzk1NCAzOC41MDA0IDE5Ljc5NTRIMjguMTA4MlpNNDMuMzMyNiAzNy4yNDAxQzQyLjA1MzUgMzguNDQ4MSA0MC4zNDggMzkuMDUyMSAzOC4yMTYyIDM5LjA1MjFIMzQuMTg1NEMzMy45NTg3IDM5LjA1MjEgMzMuNzc0OSAzOC44NjgzIDMzLjc3NDkgMzguNjQxNlYyNS44MTk1QzMzLjc3NDkgMjUuNTkyOCAzMy45NTg3IDI1LjQwOSAzNC4xODU0IDI1LjQwOUgzOC4yMTYyQzQwLjM0OCAyNS40MDkgNDIuMDUzNSAyNi4wMTMgNDMuMzMyNiAyNy4yMjFDNDQuNjM1NCAyOC40Mjg5IDQ1LjI4NjggMzAuMDk4OCA0NS4yODY4IDMyLjIzMDVDNDUuMjg2OCAzNC4zNjIzIDQ0LjYzNTQgMzYuMDMyMSA0My4zMzI2IDM3LjI0MDFaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfODAzODBfNTQpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfODAzODBfNTQiIHgxPSIwLjc2NTgxMiIgeTE9Ii0yLjcwNDk2ZS0wNyIgeDI9IjYzLjU0MTciIHkyPSI2NC4yNzkzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwMEE2OTUiLz4KPHN0b3Agb2Zmc2V0PSIwLjUiIHN0b3AtY29sb3I9IiMwMTg0NzciLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDA2RjY0Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==";var _="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDQiIGhlaWdodD0iNDQiIHZpZXdCb3g9IjAgMCA0NCA0NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMjIiIGN5PSIyMiIgcj0iMjIiIGZpbGw9IiMwMDY2RkYiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNC40MTIgMzMuNDE5M0wyMy44ODI3IDM1Ljc2MDNDMjMuODAzNyAzNi4xMDk5IDIzLjQ2OTMgMzYuMzQwNSAyMy4xMTUyIDM2LjI4NThDMjIuMzA4IDM2LjE2MSAyMS40OSAzNi4wMTc3IDIwLjY2MzcgMzUuODU5NEMyMC4yODQyIDM1Ljc4NjcgMjAuMDQyMyAzNS40MTMzIDIwLjEyNzUgMzUuMDM2NUwyMC42MDY3IDMyLjkxN0MyMC4yNzExIDMyLjg1MTMgMTkuOTMzNCAzMi43ODAyIDE5LjU5NCAzMi43MDQyQzE5LjI4OCAzMi42MzQ0IDE4Ljk4NSAzMi41NjE1IDE4LjY4NTQgMzIuNDg1NUwxOC4yMDY0IDM0LjYwNDRDMTguMTIxMiAzNC45ODEgMTcuNzQyNiAzNS4yMTQgMTcuMzY4OSAzNS4xMTY4QzE2LjU1NDggMzQuOTA1IDE1Ljc1NDcgMzQuNjgzNiAxNC45NzIzIDM0LjQ1MDRDMTQuNjI4NCAzNC4zNDc5IDE0LjQyNTEgMzMuOTk1NSAxNC41MDQzIDMzLjY0NTVMMTUuMDMwOCAzMS4zMTY0QzkuODI2OTUgMjkuMjI5NyA2LjU0MTYxIDI1LjY4MyA3LjkzNjAzIDE5LjYyNjJMOC4yNzE1NiAxOC4xNDIxQzkuNjIwOTQgMTIuMDYyNiAxNC4xMTA5IDEwLjI4MTEgMTkuNzA1NiAxMC42MzkzTDIwLjIzMTggOC4zMTE3N0MyMC4zMTA5IDcuOTYxNzMgMjAuNjQ2IDcuNzMxMDUgMjEuMDAwNiA3Ljc4NjQ1QzIxLjgwNzIgNy45MTI0OSAyMi42MjQ3IDguMDU2ODMgMjMuNDUwNyA4LjIxNTkyQzIzLjgyOTkgOC4yODg5NSAyNC4wNzE0IDguNjYyMTMgMjMuOTg2MyA5LjAzODc1TDIzLjUwNzMgMTEuMTU3NUMyMy44MTA0IDExLjIxNzkgMjQuMTE1MyAxMS4yODI0IDI0LjQyMTUgMTEuMzUxMUMyNC43NjA5IDExLjQyNzggMjUuMDk2NSAxMS41MDgzIDI1LjQyNzcgMTEuNTkyN0wyNS45MDY1IDkuNDc1MUMyNS45OTE3IDkuMDk4MjYgMjYuMzcwNyA4Ljg2NTI4IDI2Ljc0NDUgOC45NjI4OUMyNy41NTg2IDkuMTc1NDQgMjguMzU4NiA5LjM5Nzg4IDI5LjE0MSA5LjYzMjQxQzI5LjQ4NDMgOS43MzUzNCAyOS42ODY5IDEwLjA4NzQgMjkuNjA3OSAxMC40MzdMMjkuMDgwMSAxMi43NzE3QzM0LjIxNjEgMTQuODU4IDM3LjQyNjEgMTguNDAyIDM2LjA2NDMgMjQuNDI1NkwzNS43Mjg4IDI1LjkwOTdDMzQuMzkwOSAzMS45Mzc2IDI5Ljk0OTIgMzMuNzQyMSAyNC40MTIgMzMuNDE5M1pNMzEuOTYyOSAyNC43MDM5TDMyLjE1MTcgMjMuODY4N0MzMy40ODE0IDE4LjM0MzQgMjkuMDYwMSAxNi4yNzk3IDIzLjYwOTQgMTQuOTY3NkMxOC4wOTg4IDEzLjgwMTUgMTMuMjE5NiAxMy43NjI2IDEyLjA0MzIgMTkuMzIyNkwxMS44NTQ0IDIwLjE1NzhDMTAuNTE4OSAyNS43MDg0IDE0Ljk0MDMgMjcuNzcyMSAyMC40MTY1IDI5LjA5QzI1LjkwMTYgMzAuMjUwMyAzMC43ODA3IDMwLjI4OTMgMzEuOTYyOSAyNC43MDM5WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==";var $="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAF1GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDMgNzkuOTY5MGE4N2ZjLCAyMDI1LzAzLzA2LTIwOjUwOjE2ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjYuMTEgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDI1LTExLTE2VDAxOjA1OjMxKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyNS0xMS0xNlQwMTowNzoxNSswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNS0xMS0xNlQwMTowNzoxNSswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjM3ZmUzMDEtMjdjNC00ZWJlLTgxZGQtMWJhYjk2NGE5MzllIiB4bXBNTTpEb2N1bWVu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";var tt="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzUiIGhlaWdodD0iMzQiIHZpZXdCb3g9IjAgMCAzNSAzNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTMyLjcwNzcgMzIuNzUyMkwyNS4xNjg4IDMwLjUxNzRMMTkuNDgzMyAzMy45MDA4TDE1LjUxNjcgMzMuODk5MUw5LjgyNzkzIDMwLjUxNzRMMi4yOTIyNSAzMi43NTIyTDAgMjUuMDQ4OUwyLjI5MjI1IDE2LjQ5OTNMMCA5LjI3MDk0TDIuMjkyMjUgMC4zMTIyNTZMMTQuMDY3NCA3LjMxNTU0SDIwLjkzMjZMMzIuNzA3NyAwLjMxMjI1NkwzNSA5LjI3MDk0TDMyLjcwNzcgMTYuNDk5M0wzNSAyNS4wNDg5TDMyLjcwNzcgMzIuNzUyMloiIGZpbGw9IiNGRjVDMTYiLz4KPHBhdGggZD0iTTIuMjkzOTUgMC4zMTIyNTZMMTQuMDY5MSA3LjMyMDQ3TDEzLjYwMDggMTIuMTMwMUwyLjI5Mzk1IDAuMzEyMjU2WiIgZmlsbD0iI0ZGNUMxNiIvPgo8cGF0aCBkPSJNOS44Mjk1OSAyNS4wNTIyTDE1LjAxMDYgMjguOTgxMUw5LjgyOTU5IDMwLjUxNzVWMjUuMDUyMloiIGZpbGw9IiNGRjVDMTYiLz4KPHBhdGggZD0iTTE0LjU5NjYgMTguNTU2NUwxMy42MDA5IDEyLjEzMzNMNy4yMjY5MiAxNi41MDA5TDcuMjIzNjMgMTYuNDk5M1YxNi41MDI1TDcuMjQzMzUgMjAuOTk4M0w5LjgyODA5IDE4LjU1NjVIOS44Mjk3NEgxNC41OTY2WiIgZmlsbD0iI0ZGNUMxNiIvPgo8cGF0aCBkPSJNMzIuNzA3NyAwLjMxMjI1NkwyMC45MzI2IDcuMzIwNDdMMjEuMzk5MyAxMi4xMzAxTDMyLjcwNzcgMC4zMTIyNTZaIiBmaWxsPSIjRkY1QzE2Ii8+CjxwYXRoIGQ9Ik0yNS4xNzIyIDI1LjA1MjJMMTkuOTkxMiAyOC45ODExTDI1LjE3MjIgMzAuNTE3NVYyNS4wNTIyWiIgZmlsbD0iI0ZGNUMxNiIvPgo8cGF0aCBkPSJNMjcuNzc2NiAxNi41MDI1SDI3Ljc3ODNIMjcuNzc2NlYxNi40OTkzTDI3Ljc3NSAxNi41MDA5TDIxLjQwMSAxMi4xMzMzTDIwLjQwNTMgMTguNTU2NUgyNS4xNzIyTDI3Ljc1ODYgMjAuOTk4M0wyNy43NzY2IDE2LjUwMjVaIiBmaWxsPSIjRkY1QzE2Ii8+CjxwYXRoIGQ9Ik05LjgyNzkzIDMwLjUxNzVMMi4yOTIyNSAzMi43NTIyTDAgMjUuMDUyMkg5LjgyNzkzVjMwLjUxNzVaIiBmaWxsPSIjRTM0ODA3Ii8+CjxwYXRoIGQ9Ik0xNC41OTQ3IDE4LjU1NDlMMTYuMDM0MSAyNy44NDA2TDE0LjAzOTMgMjIuNjc3N0w3LjIzOTc1IDIwLjk5ODRMOS44MjYxMyAxOC41NTQ5SDE0LjU5M0gxNC41OTQ3WiIgZmlsbD0iI0UzNDgwNyIvPgo8cGF0aCBkPSJNMjUuMTcyMSAzMC41MTc1TDMyLjcwNzggMzIuNzUyMkwzNS4wMDAxIDI1LjA1MjJIMjUuMTcyMVYzMC41MTc1WiIgZmlsbD0iI0UzNDgwNyIvPgo8cGF0aCBkPSJNMjAuNDA1MyAxOC41NTQ5TDE4Ljk2NTggMjcuODQwNkwyMC45NjA3IDIyLjY3NzdMMjcuNzYwMiAyMC45OTg0TDI1LjE3MjIgMTguNTU0OUgyMC40MDUzWiIgZmlsbD0iI0UzNDgwNyIvPgo8cGF0aCBkPSJNMCAyNS4wNDg4TDIuMjkyMjUgMTYuNDk5M0g3LjIyMTgzTDcuMjM5OTEgMjAuOTk2N0wxNC4wMzk0IDIyLjY3NkwxNi4wMzQzIDI3LjgzODlMMTUuMDA4OSAyOC45NzZMOS44Mjc5MyAyNS4wNDcySDBWMjUuMDQ4OFoiIGZpbGw9IiNGRjhENUQiLz4KPHBhdGggZD0iTTM1LjAwMDEgMjUuMDQ4OEwzMi43MDc4IDE2LjQ5OTNIMjcuNzc4M0wyNy43NjAyIDIwLjk5NjdMMjAuOTYwNyAyMi42NzZMMTguOTY1OCAyNy44Mzg5TDE5Ljk5MTIgMjguOTc2TDI1LjE3MjIgMjUuMDQ3MkgzNS4wMDAxVjI1LjA0ODhaIiBmaWxsPSIjRkY4RDVEIi8+CjxwYXRoIGQ9Ik0yMC45MzI1IDcuMzE1NDNIMTcuNDk5OUgxNC4wNjczTDEzLjYwMDYgMTIuMTI1MUwxNi4wMzQyIDI3LjgzNEgxOC45NjU2TDIxLjQwMDggMTIuMTI1MUwyMC45MzI1IDcuMzE1NDNaIiBmaWxsPSIjRkY4RDVEIi8+CjxwYXRoIGQ9Ik0yLjI5MjI1IDAuMzEyMjU2TDAgOS4yNzA5NEwyLjI5MjI1IDE2LjQ5OTNINy4yMjE4M0wxMy41OTkxIDEyLjEzMDFMMi4yOTIyNSAwLjMxMjI1NloiIGZpbGw9IiM2NjE4MDAiLz4KPHBhdGggZD0iTTEzLjE3IDIwLjQxOTlIMTAuOTM2OUw5LjcyMDk1IDIxLjYwNjJMMTQuMDQwOSAyMi42NzI3TDEzLjE3IDIwLjQxODJWMjAuNDE5OVoiIGZpbGw9IiM2NjE4MDAiLz4KPHBhdGggZD0iTTMyLjcwNzcgMC4zMTIyNTZMMzQuOTk5OSA5LjI3MDk0TDMyLjcwNzcgMTYuNDk5M0gyNy43NzgxTDIxLjQwMDkgMTIuMTMwMUwzMi43MDc3IDAuMzEyMjU2WiIgZmlsbD0iIzY2MTgwMCIvPgo8cGF0aCBkPSJNMjEuODMzIDIwLjQxOTlIMjQuMDY5NEwyNS4yODUzIDIxLjYwNzlMMjAuOTYwNCAyMi42NzZMMjEuODMzIDIwLjQxODJWMjAuNDE5OVoiIGZpbGw9IiM2NjE4MDAiLz4KPHBhdGggZD0iTTE5LjQ4MTcgMzAuODM2MkwxOS45OTExIDI4Ljk3OTRMMTguOTY1OCAyNy44NDIzSDE2LjAzMjdMMTUuMDA3MyAyOC45Nzk0TDE1LjUxNjcgMzAuODM2MiIgZmlsbD0iIzY2MTgwMCIvPgo8cGF0aCBkPSJNMTkuNDgxNiAzMC44MzU5VjMzLjkwMjFIMTUuNTE2NlYzMC44MzU5SDE5LjQ4MTZaIiBmaWxsPSIjQzBDNENEIi8+CjxwYXRoIGQ9Ik05LjgyOTU5IDMwLjUxNDJMMTUuNTIgMzMuOTAwOFYzMC44MzQ2TDE1LjAxMDYgMjguOTc3OEw5LjgyOTU5IDMwLjUxNDJaIiBmaWxsPSIjRTdFQkY2Ii8+CjxwYXRoIGQ9Ik0yNS4xNzIxIDMwLjUxNDJMMTkuNDgxNyAzMy45MDA4VjMwLjgzNDZMMTkuOTkxMSAyOC45Nzc4TDI1LjE3MjEgMzAuNTE0MloiIGZpbGw9IiNFN0VCRjYiLz4KPC9zdmc+Cg==";var et="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI4IDU2YzE1LjQ2NCAwIDI4LTEyLjUzNiAyOC0yOFM0My40NjQgMCAyOCAwIDAgMTIuNTM2IDAgMjhzMTIuNTM2IDI4IDI4IDI4WiIgZmlsbD0iIzFCNTNFNCIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNyAyOGMwIDExLjU5OCA5LjQwMiAyMSAyMSAyMXMyMS05LjQwMiAyMS0yMVMzOS41OTggNyAyOCA3IDcgMTYuNDAyIDcgMjhabTE3LjIzNC02Ljc2NmEzIDMgMCAwIDAtMyAzdjcuNTMzYTMgMyAwIDAgMCAzIDNoNy41MzNhMyAzIDAgMCAwIDMtM3YtNy41MzNhMyAzIDAgMCAwLTMtM2gtNy41MzNaIiBmaWxsPSIjZmZmIi8+PC9zdmc+";var Pt="data:image/webp;base64,UklGRngEAABXRUJQVlA4IGwEAABwGgCdASqAAIAAPm00lkakIyIhLZJo4IANiWIGepzpzWVWfAfkz7VNZfrX4XyZfpY5Ve135hP6ydPjxWfVv9GH999QD/D/47rUPQA8tr9qvh98odpITg6KC6MdEPqtq8njJn8YQd8fRyCBjuASoE7gh976be39QP7ZH1EaOy2byZB4+6S1n4J1we4tNWPChOPxxBzZfuYsStcWv/tZNqcra7FT/gy1QnCQAkdw+gUNhMn35RFANgSXPFVHZFoSr9YdNxlhwS/DtBxpj4Yf0Qnyn1ZNu6NIDryzzumAAP71vcpK//N3uTN6/gf/cz+Z/IGl2OP82F2AtGYx70dIV3TDkNq9sgAhCr9IZ0HUhT+7KUeLtkqR+dPCxztN0qMTy/gT7xoQBHTf3pua3S29wTkDmy3Fsy7Lv8PTVtL4d5DjJ3QgT6S/r/RoLpXt5ckfNBuBZ5cD7q6/rSBKVrfLYRlMs8/PW5KR4PMrlV9BNfv/g3x2mjvrkNijQUMjZBeGWL8cm5JtS7/EOF5P9ze4qe1yV5zVSVFt5e+//WL+UiuNvKd6qedKWsisJogbBMgFYrymDXtX7rwy5qpOIKODEdjYEY7CDAkYcvhN9cLylaFJnB822+x+hXMltuGJXS6vpf+DkoddD4V8niiWXvf82VYQvu2agUc4/+HDH9o+hv59V9FWrvk5fNJfTvIgUkH5vCcCwDwre/O/6ftorAm9en57f1mnje373z/a1W3UpDbn5rBQsFfxl2oiKvtNeyc7bILmYZ0iKT2BTOvUMn7M6ICDBaoJqcgXpIDC5rsq6F4u2TteFi4n6sLLvkP/xXiOM3lY5srmZ5aRj/SRoHWQrdrmc+rvWyTUo7cqAq8S3QsPW3gcF09Cnxop1LydqPo8SIb8zKgJqFj+KuMY/BYxfntOPlxAD7Ehx/4fZ/cJtjDj8ZqAeuK4Ps7U3zMMVMXw9cIZE47iuLzaTpJl3avReDg2QmWLRYq3AOdhgvdD5H1IpkqcQMOWiDXt46xdgLbVT2Ae1AcmlYrb6xUGrmGgk2lIehc/Df+MRJdAHc+BmnyfR8P7gx7IJg6R0let/R14Na6KeMthUP59RT9SSo5n3YPARM1Z9nLfjDfDy16iRq10Y+2eaNT9Q1xbOf5+PULDFrojM5ABxLaZHFIu+UTUDacGy/DG/N1tqlJ7ePfOaI4pDt/QZhAb6PIVCPIJIXWgbQ/e0VK+9d2AS18H+V/KcyKz5VciEYdk+H1uB3uzeGMdIhKpR5J2JV+e1urFlNpACGuluMWUwzj6n2L72/fz5uXqrfjel5EhkCXHn77cHXY6Kfl9v28YvKSj5f3vzY+wbv8YHop9bGvu/rhBK18Ooq5RW2Kb7s3/xi+57dh2WcBpctxH2kG+9RoszJAlD07LaWub1vw6EYYsSHALEv0cUo8x53lVOWtxIr+fwYX5Jtnv8LYqeN7cAlkl/gWNhn5kus3rg0Wm7rKPongcsUaxaHrkLbdxjqEA9mX4C/AA",nt=Pt;var rt="data:image/webp;base64,UklGRmAEAABXRUJQVlA4WAoAAAAQAAAAfwAAfwAAQUxQSD0BAAABCsi1battvlSCxmaGWrTUgLGQaLkNe8wBlRGrDNM8zGBm32ly/V9ETAC3DRcb/cnL9FS/iK4XwmqPRtxxu/7g4fNkfWrxO64T31my2hxOEbJZTu7Esq8/pyjfaVvbBWp3Z6SUwBZmypui9cTc5Jy/neLt09xA/ClinVoX8KaYPVll1aaoxVph38O651LyeoqbomhU3oF90lCJ5hR5U9MZQRvpkDvF7hY74Lp1H5z0h+A4uQd3//IBjud////7/w/wLwRHuQd3r4fg2PDBSakLjiEXnKucEbSRZrwJrZmgUfkE9k5DMXkNjKJI2vew7qmWrRossVYw4IHyhGtTfUh+iuvNvAakaW7As3hwPDG5eaB2B4USUFtb9vU7jE/altplstwaQRjqalLtOuG4XX/w8HmyPrX4nQsnYahNAQBWUDgg/AIAAHATAJ0BKoAAgAA+bTaWSCQjIiEhC7iADYlpAFVGVG5/99J5/Vd7/Zvx6/Eb47upeLfNQVn40OWGsvf/EZp1SJZ4eeKUwr+TUZu0yuMNAk4PBKF5fmL0eOz2sxlyF1k2PpU79Yw+1dd/VfsguNjNAOpujooZUvLoJkwr++tWg4MOdSMpiVVcFud3oFbBaC+w1q6Y0ih8Jyiu2FT5yd3off/EZxcAAP78rRBq1TvyDPGTtpZl6fMUoKvlLHGrtAC3XuckCfwRJnfG/aY5v+afCIPyjeFKANrccw0/eZYXfyOOymElPpcIFyn/DX0LVVChdzZGcPAMC2XCLLJfqNQLnrwVdrtp///aDQbauP7F7v0uv8UtFmP/5l0k7TnND9heE+aE4DSlRH+y/9Cx9KXkLzIJstm70HeMP4clZ1v4/6vCpX5CsJ70IuNXVGjSxs3OP9lrbuLhlcIIEc2SIGJ3qavevq/mkLkXudZ4SRo+SJpXOQuWqBRjAwTujM6fmPbC5/CYn3kwPLAFn7i92UJ9pgQN+JbG6TPsfKot9pwn+KP/VTLVvyv8aLGVn/+GmRt23RauLb8p5lk6WrB7qM1Ar9LD/ie+T2ZqIpT8ywwuSBWG37bH+0ZZqSmzKe5Q9PgQRVf9RHW7en1+w1M7OwvPKFtskA+SLeKXSb5NMYci6OzrZ/MkSWBl1XYD8Y0YE1CxlutKWGPQV7Paf1P7XQ1xLFTC8eZXqWX2oAV9TghLJj01pQgFxuvmoZGpQ9alHKf21/J4Vx74do7nSRTFJyl/L9VGrasy+tv0vcW9lbWL7j+MCdKyGh2xNTRV1oXhLA2Edu22lDIaFKT5GojhFjKc8QWDJ+bUo3km/xVNDGq0sE7TH4JM+gfqVuDsg/LZUtzFGL6SMLPJk71nRAKmzpRbTYWXl3XlTvOwzAZARyMhUDEcRGotZal/M7BwujgUYCgRQ8H3b+uRhEn6EueNF+Czzl1sG+Pe7IWuEd0aHVwiixyaqR3UWnWqQuAAAAAA";var it="data:image/webp;base64,UklGRtYCAABXRUJQVlA4IMoCAABQEgCdASqAAIAAPm02lUikIyIhIRgMIIANiWkcARAAF+tSv5/99J/RB9XsAGlSc78bIl6kh58aA3sp9hIcACdBu3D9g2hv6/+Cj+HX4bF4aHqZf6VdIWSW9bl353sa70S/qFAc892uoH8pqfPiakYAgEZCSd8aEmbltGbSPYfC4wvqZ9ezQiQYdXY3/Sg5wnSqEY6FToW0wM8QAAD+/PhAW398P+Y/Ufmdv1vCJ/v/ohtwIURd/2rR9z/+gzKn28ut3UaV0u/kc/8pninuF1e9YbAaSDHUeqAZqiAKIZmaGvWme8/luxhnX1Y5rtZk3eBL47mNGYRACwVMKHRl2LA/XhZbW1Q//lM1/6ic4D/8P5eWBMjc9tvr/1w65Tf+2YqPRUfatOAWlwt+JOQ7A40WTXjruFER/7NrZ3tjVzpksA2ujmryseHaiwyiei2mbF0GTnfMG+gl4/pLxq49MTM3bfXPCtft0z77211u4sTilNvJqdSH+3Qc5KfDH6gV4GWTwPSPR/7Krf/1FykCW2n/ReCjVJEy4jLXHwRFmqnHVsOyAdxpYIW4NBe7rv+kr9D8C5N5wiRt4L0AfG/CdI29CS9gLKmX0+uFXlCWpWGI69szzq5FWPBnjpMCeYssg4Hi5PZPL2bcVsOvTE6gCi1ykg26ZH7WE/KN8u9Wagu4TcAvU5nsMn9jc1NGwCZJ1vbQI8CyIWA2LNfuDo697Mov9ngaDmN701InhXXuZFANxq3en+JToh5LyqWp6Wg1UaAbKuM4iPHX41ht3YeOvwpXKTqngULJZvmnw4BeJc387ivRN9/yK//jm2x0r2tfpbafdYlNCsxcgG8lC2z5Vz2a0LuZIotzREDZkWc2Y9BzOaysg2ZacmnelGfW5UbxjADryUb+70mYMBLvUPN/rBiQE2XcSOtSRC91yn75qvUC6XhK/lbDAAAAAAA=";var ot="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0id2ViM2ljb25zIj48ZyBjbGlwLXBhdGg9InVybCgjdHJ1c3RfX2EpIj48cGF0aCBmaWxsPSIjMDUwMEZGIiBkPSJNMjQgMEgwdjI0aDI0eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik00LjggNi4zMTEgMTIgNHYxNmMtNS4xNDMtMi4xMzQtNy4yLTYuMjIyLTcuMi04LjUzM3ptMTQuNCAwTDEyIDR2MTZjNS4xNDMtMi4xMzQgNy4yLTYuMjIyIDcuMi04LjUzM3oiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJ0cnVzdF9fYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyNEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==";var at="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCA4MCA4MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiByeD0iMTIiIGZpbGw9IiMxQzdERkMiLz4KPHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiByeD0iMTIiIGZpbGw9InVybCgjcGFpbnQwX3JhZGlhbF8xXzQ2KSIvPgo8cGF0aCBkPSJNMjYuNDIyNyAzMS40NzMxQzMzLjkxNzEgMjQuMTc1NiA0Ni4wODI5IDI0LjE3NTYgNTMuNTc3MyAzMS40NzMxTDU0LjQ3OTYgMzIuMzU4QzU0Ljg1OCAzMi43MjA3IDU0Ljg1OCAzMy4zMTU1IDU0LjQ3OTYgMzMuNjc4Mkw1MS4zOTQ1IDM2LjY4MTNDNTEuMjA1MyAzNi44Njk5IDUwLjg5OTcgMzYuODY5OSA1MC43MTA1IDM2LjY4MTNMNDkuNDczNiAzNS40NzcyQzQ0LjIzNDcgMzAuMzg1IDM1Ljc2NTMgMzAuMzg1IDMwLjUyNjQgMzUuNDc3MkwyOS4yMDIxIDM2Ljc2ODRDMjkuMDEzIDM2Ljk1NyAyOC43MDc0IDM2Ljk1NyAyOC41MTgyIDM2Ljc2ODRMMjUuNDMzMSAzMy43NjUzQzI1LjA1NDcgMzMuNDAyNiAyNS4wNTQ3IDMyLjgwNzggMjUuNDMzMSAzMi40NDUxTDI2LjQyMjcgMzEuNDczMVpNNTkuOTY1OCAzNy42ODI0TDYyLjcxNjIgNDAuMzUxOEM2My4wOTQ2IDQwLjcxNDUgNjMuMDk0NiA0MS4zMDkzIDYyLjcxNjIgNDEuNjcyTDUwLjMzMjIgNTMuNzI4QzQ5Ljk1MzggNTQuMDkwNyA0OS4zNDI2IDU0LjA5MDcgNDguOTc4OCA1My43MjhMNDAuMTg5MiA0NS4xNjg0QzQwLjEwMTkgNDUuMDgxMyAzOS45NDE4IDQ1LjA4MTMgMzkuODU0NSA0NS4xNjg0TDMxLjA2NDkgNTMuNzI4QzMwLjY4NjUgNTQuMDkwNyAzMC4wNzUzIDU0LjA5MDcgMjkuNzExNSA1My43MjhMMTcuMjgzOCA0MS42NzJDMTYuOTA1NCA0MS4zMDkzIDE2LjkwNTQgNDAuNzE0NSAxNy4yODM4IDQwLjM1MThMMjAuMDM0MiAzNy42ODI0QzIwLjQxMjUgMzcuMzE5NyAyMS4wMjM3IDM3LjMxOTcgMjEuMzg3NSAzNy42ODI0TDMwLjE3NzIgNDYuMjQyQzMwLjI2NDUgNDYuMzI5IDMwLjQyNDUgNDYuMzI5IDMwLjUxMTkgNDYuMjQyTDM5LjMwMTUgMzcuNjgyNEMzOS42Nzk5IDM3LjMxOTcgNDAuMjkxIDM3LjMxOTcgNDAuNjU0OSAzNy42ODI0TDQ5LjQ0NDUgNDYuMjQyQzQ5LjUzMTggNDYuMzI5IDQ5LjY5MTkgNDYuMzI5IDQ5Ljc3OTIgNDYuMjQyTDU4LjU2ODggMzcuNjgyNEM1OC45NzYzIDM3LjMxOTcgNTkuNTg3NSAzNy4zMTk3IDU5Ljk2NTggMzcuNjgyNFoiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8cmFkaWFsR3JhZGllbnQgaWQ9InBhaW50MF9yYWRpYWxfMV80NiIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDI0Nzk1NSA0MC4wMDEyKSBzY2FsZSg4MCkiPgo8c3RvcCBzdG9wLWNvbG9yPSIjNUQ5REY2Ii8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzAwNkZGRiIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=";var kt="data:image/webp;base64,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",ct=kt;var Ut="data:image/webp;base64,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",st=Ut;var Qt="data:image/webp;base64,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",lt=Qt;var Wt="data:image/webp;base64,UklGRoQDAABXRUJQVlA4WAoAAAAQAAAAfwAAfwAAQUxQSEIAAAABZ6Aqsg06PfeBFhTwp4eIiO9JAFqgDkpi24oqfJYEDE1BYnFoFH6PQLMb4Ef0fwLSh5eMq7SmgFL/ddqYtCcxsD1WUDggHAMAADAWAJ0BKoAAgAA+bTaVR6QjIiEqFmgwgA2JQBrjvkex/mORM4ijCO4OaOcB4lvSj8xXnF9IB/WuoY9AD9ZvTb9lv9t/2k9ozVd4X5WzBuqgZcQbMzL39biv4/sPc7xOoYvhJHo23KgOlP+c+yXvcH13owJyPDoq7y50x3JBthvJRoRyksngI8TAN9pWTOaIkXdpLWMVEy89M91VKMq815lMLz8HFhZ4XtFGM2aIzuqZuVVhyc6r9IgGMAD+/KFwXOCQSQ9ryjC41iIU+x7fxryCxallV7uXiPxdW7zbeLBQ351xqzs44tk3+t0b8A/KlEzOpl5y+1FhbBPuZsnr4/Z46914Q5womQkrfJfwSs+vDlfdJayjqpubSuXhqaVXD5PNpOzOvwLkppF/6z5wUxKxfjHL8qs50UF/W0TXKsYRe1peOBA/Hlpw9NYCy1yzO0AsgwQ4vl2SkUU4Ur4J7qlU+Ru3VCZf9paZ5YrooPtuZ9Fafd7zr9k4HnNw89Qup9rqdusYvnoyXuc92GVOsZ1uIZlbMcFUl09LHPLZpEejDRbC4JX1Q9hdf7di4hax2BCaC1LC8nE6eQ7cGsKGM+A9TmTSIaWkkm+ePgmHH6z7abr4NNmx7xjqZrYOmBZyctY/kLXdG1WQfkPmbp276XDZocbirca8okm/P+JQXfpBsSRL3Je6T608k0tui8loC/pHCq2VmW5WLz9yIgVuwppRQ9wIUqvaXHNIz/TkSxTiYTjYZJP3CU11TXQujaQkfUu4uEwJ+nuhTCb7z0P8CQtvREirvrT9mwq8HSHXWdq6fzhLWKH5vSEQDBQjxd8dg6YsIeNLmlcdtlZTQ70Mq41FW/+f0T1hn8v7AP+o9//gmsSR8ys+PfAnh6IbY7tqrXXSRz71PzTBFdw8Fy/nPpP50iooJWaORiY4o+rQrh9/71uCL299F4JXVeLzV8H8ojGEmsFPG4TMfIsyiJ+nLwJ6kUXc/ijRDGDVUa3CVLG3xH+wecr+NwlT6rvrbYTmNsOp/sS8Fosv1k0X7Xz3048DRkF0AAEHwlMAAAA=",ut=Wt;var Yt={ii:X,nfid:K,oisy:_,plug:$,metamask:tt,coinbase:et,rainbow:nt,brave:ct,phantom:st,backpack:ut,rabby:lt,ledger:rt,okx:it,trust:ot,walletconnect:at};function k(a,t){let e=(a||"").toLowerCase();return Yt[e]||t||null}var yt=!1;var q=[1,8453,84532],V=[1,8453,84532];async function Zt(a){return new Promise((t,e)=>{try{let r=typeof document<"u"?document:null;if(!r)return t();let o=Array.from(r.getElementsByTagName("script")).find(c=>c&&c.src===a);if(o&&String(o.type||"").toLowerCase()!=="module")return t();let n=r.createElement("script");n.src=a,n.async=!0,n.onload=()=>t(),n.onerror=()=>e(new Error("Failed to load script: "+a)),r.head.appendChild(n)}catch{t()}})}async function Gt(a){for(let t of a)try{return await Zt(t),!0}catch{}return!1}function v(a,t){let e=t&&typeof t.globalVar=="string"&&t.globalVar.trim()?t.globalVar.trim():null,r=[e?a?.[e]?.default:null,e?a?.[e]:null,a?.["@walletconnect/ethereum-provider"]?.default,a?.["@walletconnect/ethereum-provider"],a?.WalletConnect?.EthereumProvider?.default,a?.WalletConnect?.EthereumProvider,a?.EthereumProvider?.default,a?.EthereumProvider,a?.WalletConnectEthereumProvider?.default,a?.WalletConnectEthereumProvider,a?.WalletConnectProvider?.default,a?.WalletConnectProvider].filter(Boolean);for(let i of r)if(typeof i=="function"||i&&typeof i.init=="function")return i;return null}async function F(a,t=1500,e=50){let r=Date.now();return new Promise((i,o)=>{let n=()=>{try{let c=a();if(c)return i(c)}catch{}if(Date.now()-r>=t)return i(null);setTimeout(n,e)};n()})}async function Rt(){}function dt(){try{let a=typeof navigator<"u"?navigator:window?.navigator,t=String(a?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(t)}catch{return!1}}async function H(){let a=typeof window<"u"?window:{};if(!(a?.QRCode&&typeof a.QRCode?.toCanvas=="function")){try{let t=await import("qrcode"),e=t&&(t.default||t)||null;if(e&&typeof e.toCanvas=="function"){a.QRCode=e;return}}catch{}await F(()=>{let t=typeof window<"u"?window:{};return t?.QRCode&&typeof t.QRCode?.toCanvas=="function"},2e3,50)}}async function Bt(a){try{let t=typeof document<"u"?document:null;if(!t)return;let e=l=>{try{window.location.href=l}catch{try{window.open(l,"_self","noopener,noreferrer")}catch{}}},r=[],i=(l,u)=>{try{let w=setTimeout(()=>{try{let y=typeof document<"u"?document:null;if(y&&y.visibilityState==="hidden")return;l()}catch{}},u);r.push(w)}catch{}},o=()=>{try{r.forEach(l=>{try{clearTimeout(l)}catch{}})}catch{}r.length=0},n=()=>{try{let l=typeof document<"u"?document:null;l&&l.visibilityState==="hidden"&&o()}catch{}};try{document.addEventListener("visibilitychange",n)}catch{}let c=l=>{let u=encodeURIComponent(l),w=`https://go.cb-w.com/wc?uri=${u}`,y=`coinbasewallet://wc?uri=${u}`;e(w),i(()=>e(y),600),i(()=>{o();try{document.removeEventListener("visibilitychange",n)}catch{}},4e3)},s=(l,u,w)=>{let y=t.createElement("button");y.style.display="flex",y.style.alignItems="center",y.style.gap="8px",y.style.padding="8px 12px",y.style.borderRadius="10px",y.style.border="1px solid #444",y.style.background="#2a2a2a",y.style.color="#fff",y.style.cursor="pointer",y.style.width="100%",y.style.justifyContent="center";let g=t.createElement("img"),A=u?k(u):null;A&&(g.src=A,g.alt=u||"wallet",g.style.width="18px",g.style.height="18px",g.style.display="block",y.appendChild(g));let h=t.createElement("span");return h.textContent=l,h.style.fontSize="13px",y.appendChild(h),y.onclick=f=>{try{f.preventDefault()}catch{}try{w()}catch{}},y},M=t.getElementById("icpay-wc-overlay");if(!M){let l=t.createElement("div");l.id="icpay-wc-overlay",l.style.position="fixed",l.style.inset="0",l.style.background="rgba(0,0,0,0.55)",l.style.display="flex",l.style.alignItems="center",l.style.justifyContent="center",l.style.zIndex="999999";let u=t.createElement("div");u.style.background="#1a1a1a",u.style.border="1px solid #333",u.style.borderRadius="16px",u.style.padding="16px",u.style.width="320px",u.style.boxShadow="0 10px 30px rgba(0,0,0,0.4)",u.style.display="flex",u.style.flexDirection="column",u.style.alignItems="center";let w=t.createElement("div");w.textContent="Connect with your wallet",w.style.color="#fff",w.style.fontSize="16px",w.style.marginBottom="12px";let y=t.createElement("div");y.id="icpay-wc-qr-container",y.style.width="260px",y.style.height="260px",y.style.background="#fff",y.style.borderRadius="8px";let g=t.createElement("canvas");g.id="icpay-wc-qr-canvas",g.style.width="260px",g.style.height="260px",g.style.display="block",g.style.borderRadius="8px";let A=dt();if(A){let f=t.createElement("div");f.style.display="flex",f.style.flexDirection="column",f.style.alignItems="stretch",f.style.gap="8px",f.style.width="100%";let C=()=>{try{w.textContent="Waiting for approval in your wallet...",f.style.pointerEvents="none",f.style.opacity="0.7"}catch{}};f.appendChild(s("MetaMask with WalletConnect","metamask",()=>{C(),e(`https://metamask.app.link/wc?uri=${encodeURIComponent(a)}`)})),f.appendChild(s("OKX Wallet with WalletConnect","okx",()=>{C(),e(`okx://wallet/wc?uri=${encodeURIComponent(a)}`)})),u.appendChild(f)}let h=t.createElement("button");h.textContent="Close",h.style.marginTop="12px",h.style.background="#2a2a2a",h.style.color="#fff",h.style.border="1px solid #444",h.style.padding="6px 10px",h.style.borderRadius="8px",h.onclick=()=>{try{let f=t.getElementById("icpay-wc-overlay");f&&f.parentNode&&f.parentNode.removeChild(f)}catch{}},u.appendChild(w),A||(y.appendChild(g),u.appendChild(y)),u.appendChild(h),l.appendChild(u),t.body.appendChild(l),M=l}let d=t.getElementById("icpay-wc-qr-container");if(!dt()&&d){await H();let l=typeof window<"u"?window:{};if(l?.QRCode?.toCanvas)try{d.innerHTML="";let u=t.createElement("canvas");u.id="icpay-wc-qr-canvas",u.style.width="260px",u.style.height="260px",u.style.display="block",u.style.borderRadius="8px",d.appendChild(u),l.QRCode.toCanvas(u,a,{width:260,margin:2})}catch{}}}catch{}}function I(){try{let t=(typeof document<"u"?document:null)?.getElementById("icpay-wc-overlay");t&&t.parentNode&&t.parentNode.removeChild(t)}catch{}}function qt(a){try{let t=typeof document<"u"?document:null;if(!t)return;let e=t.getElementById("icpay-wc-overlay");if(!e){let i=t.createElement("div");i.id="icpay-wc-overlay",i.style.position="fixed",i.style.inset="0",i.style.background="rgba(0,0,0,0.55)",i.style.display="flex",i.style.alignItems="center",i.style.justifyContent="center",i.style.zIndex="999999";let o=t.createElement("div");o.style.background="#1a1a1a",o.style.border="1px solid #333",o.style.borderRadius="16px",o.style.padding="16px",o.style.width="320px",o.style.boxShadow="0 10px 30px rgba(0,0,0,0.4)",o.style.display="flex",o.style.flexDirection="column",o.style.alignItems="center";let n=t.createElement("div");n.textContent="Connect with your wallet",n.style.color="#fff",n.style.fontSize="16px",n.style.marginBottom="12px";let c=t.createElement("div");c.id="icpay-wc-qr-container",c.style.width="260px",c.style.height="260px",c.style.background="#fff",c.style.borderRadius="8px";let s=t.createElement("button");s.textContent="Close",s.style.marginTop="12px",s.style.background="#2a2a2a",s.style.color="#fff",s.style.border="1px solid #444",s.style.padding="6px 10px",s.style.borderRadius="8px",s.onclick=()=>{try{let M=t.getElementById("icpay-wc-overlay");M&&M.parentNode&&M.parentNode.removeChild(M)}catch{}},o.appendChild(n),o.appendChild(c),o.appendChild(s),i.appendChild(o),t.body.appendChild(i),e=i}let r=t.getElementById("icpay-wc-qr-container");if(r){r.innerHTML="";let i=t.createElement("img");i.src=a,i.alt="WalletConnect QR",i.style.width="260px",i.style.height="260px",i.style.display="block",i.style.borderRadius="8px",r.appendChild(i)}}catch{}}var b=class{constructor(t){this.id="walletconnect";this.label="WalletConnect";this.wcProvider=null;this.wcProviderProxy=null;this.wcRedirect=null;this.lastDisplayUri=null;this.autoOpenedWcDeepLink=!1;this.autoOpenedPhantom=!1;this._preGenerateMode=!1;this.preGeneratedQrDataUrl=null;this.preGeneratedUri=null;this.pendingConnectPromise=null;this._wcProviderFromPreGenerate=null;this.config=t.config||{}}getAdapterConfig(){try{return this.config?.adapters?.walletconnect?.config||{}}catch{return{}}}getInjectedWcProvider(){try{let e=(typeof window<"u"?window:{}).ethereum;if(Array.isArray(e?.providers)){let r=e.providers.find(i=>i&&(i.isWalletConnect||i?.provider?.isWalletConnect));if(r)return r}if(e&&(e.isWalletConnect||e?.provider?.isWalletConnect))return e}catch{}return null}getEvmProvider(){return this.wcProviderProxy?this.wcProviderProxy:this.wcProvider?this.wcProvider:null}async isInstalled(){try{if(this.getInjectedWcProvider())return!0;let e=!!v(typeof window<"u"?window:{}),r=this.getAdapterConfig(),i=!!(r.projectId||r.projectID);return!!(e&&i)}catch{return!1}}async isConnected(){try{let t=this.getEvmProvider();if(!t)return!1;let e=await t.request?.({method:"eth_accounts"});return Array.isArray(e)&&e.length>0}catch{return!1}}async ensureV2Globals(t){let e=typeof window<"u"?window:{};if(await Rt(),!v(e,t)){if(!yt){let r=t&&(t.umdUrls||t.umdUrl)||null,i=[];try{let M=typeof document<"u"?document:null;if(M){let d=Array.from(M.getElementsByTagName("script")),p=l=>{let u=l.toLowerCase();return u.includes("icpay-embed")||u.includes("widget.icpay")||u.includes("icpay-widget")};d.forEach(l=>{try{let u=String(l?.src||"");if(!u||!p(u))return;let w=u.lastIndexOf("/");if(w>0){let y=u.slice(0,w);i.push(`${y}/wc/index.umd.js`,`${y}/index.umd.js`)}}catch{}})}}catch{}let o=typeof window<"u"&&window.location&&window.location.origin?window.location.origin:"",n=o?[`${o}/wp-content/plugins/icpay-payments/assets/js/wc/index.umd.js`,`${o}/wp-content/plugins/instant-crypto-payments-for-woocommerce/assets/js/wc/index.umd.js`]:[],c=[...Array.isArray(r)?r.filter(Boolean):typeof r=="string"&&r.trim()?[r.trim()]:[],...i,...n];yt=await Gt(c)}await F(()=>v(typeof window<"u"?window:{},t),2e3,100)}}isMobileBrowser(){try{let t=typeof navigator<"u"?navigator:window?.navigator,e=String(t?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(e)}catch{return!1}}openWalletAppIfPossible(){if(this.isMobileBrowser())try{let t=this.wcRedirect||{},e=t.native||t.universal||"";if(!e)return;try{window.location.href=e}catch{try{window.open(e,"_self","noopener,noreferrer")}catch{}}}catch{}}wrapProviderForMobileWake(t){if(!t||typeof t.request!="function")return t;let e=o=>{if(!this.isMobileBrowser()||!o)return!1;let n=o.toLowerCase();return n==="eth_sendtransaction"||n==="eth_signtransaction"||n==="eth_sign"||n==="personal_sign"||n==="eth_signtypeddata"||n==="eth_signtypeddata_v3"||n==="eth_signtypeddata_v4"||n==="wallet_switchethereumchain"||n==="wallet_addethereumchain"||n==="wallet_requestpermissions"},r=this;return new Proxy(t,{get(o,n,c){return n==="request"?async function(s){try{let M=s&&(s.method||typeof s=="object"&&s?.method);if(e(M)){r.openWalletAppIfPossible();try{await new Promise(d=>setTimeout(d,50))}catch{}}}catch{}return o.request.apply(o,arguments)}:Reflect.get(o,n,c)}})}async initGlobalProvider(){try{let t=typeof window<"u"?window:{},e=this.getAdapterConfig();if(!!!(e.projectId||e.projectID))return null;await this.ensureV2Globals(e);let i=v(t,e);if(i||(i=await F(()=>v(typeof window<"u"?window:{},e),4e3,100)),!i)return null;try{this.config?.debug&&console.debug("[ICPay WC] Using ctor",{isFn:typeof i=="function",hasInit:!!(i&&typeof i.init=="function"),name:i&&(i.name||i.constructor?.name)||"unknown"})}catch{}let o=String(e.projectId||e.projectID),n=q.slice(),c=V.slice(),s=["eth_requestAccounts","eth_accounts","eth_chainId","personal_sign","eth_sign","eth_signTypedData","eth_signTypedData_v3","eth_signTypedData_v4","eth_sendTransaction","wallet_switchEthereumChain","wallet_addEthereumChain"],M=["accountsChanged","chainChanged","connect","disconnect","message"],d=(()=>{try{let A=String(t?.location?.origin||"").trim();return A&&/^https?:\/\//.test(A)?A:"https://widget.icpay.org"}catch{return"https://widget.icpay.org"}})(),p=(()=>{try{return String(e?.metadata?.name||t?.document?.title||"ICPay Widget").trim()||"ICPay Widget"}catch{return"ICPay Widget"}})(),l=(()=>{try{return String(e?.metadata?.description||"ICPay mobile connect").trim()||"ICPay mobile connect"}catch{return"ICPay mobile connect"}})(),u=(()=>{try{return String(e?.metadata?.url||d).trim()||d}catch{return d}})(),w=(()=>{try{let A=(Array.isArray(e?.metadata?.icons)?e?.metadata?.icons:Array.isArray(e?.icons)?e?.icons:null)||null,f=(A&&A.length>0?A:[d+"/favicon.ico",d+"/apple-touch-icon.png"]).filter(C=>typeof C=="string"&&/^https?:\/\//.test(C));return f.length>0?f:[d+"/favicon.ico"]}catch{return[d+"/favicon.ico"]}})(),y={name:p,description:l,url:u,icons:w},g=typeof i.init=="function"?await i.init({projectId:o,chains:n,optionalChains:c,showQrModal:!1,metadata:y,relayUrl:"wss://relay.walletconnect.com",methods:s,optionalMethods:s,events:M,optionalEvents:M}):new i({projectId:o,chains:n,optionalChains:c,showQrModal:!1,metadata:y,relayUrl:"wss://relay.walletconnect.com",methods:s,optionalMethods:s,events:M,optionalEvents:M});try{await H(),g.on?.("display_uri",A=>{try{this.lastDisplayUri=A}catch{}if(!this._preGenerateMode)try{Bt(A)}catch{}}),g.on?.("disconnect",()=>{try{I()}catch{}})}catch{}return g}catch{return null}}async getOrCreateQrDataUrl(t){if(this.preGeneratedQrDataUrl)return this.preGeneratedQrDataUrl;this._preGenerateMode=!0;try{let e=await this.initGlobalProvider();if(!e)return null;await H();let r=typeof window<"u"?window:{};return r?.QRCode?.toCanvas?await new Promise((i,o)=>{let n=!1,c=null,s=d=>{n||(n=!0,c!=null&&clearTimeout(c),i(d))},M=d=>{try{this.preGeneratedUri=d;let l=(typeof document<"u"?document:null)?.createElement("canvas");if(!l){s(null);return}r.QRCode.toCanvas(l,d,{width:260,margin:2}),this.preGeneratedQrDataUrl=l.toDataURL("image/png"),this._wcProviderFromPreGenerate=e,s(this.preGeneratedQrDataUrl)}catch{s(null)}};c=setTimeout(()=>s(null),15e3);try{e.once?.("display_uri",M);let d=e.connect?.({chains:q.slice(),optionalChains:V.slice()});this.pendingConnectPromise=d&&typeof d.then=="function"?d.then(async()=>{try{let p=await e.request?.({method:"eth_accounts"}),l=Array.isArray(p)&&p[0]||"";if(l)return{owner:l,principal:l,connected:!0}}catch{}throw new Error("No account returned by WalletConnect")}):null,this.pendingConnectPromise&&this.pendingConnectPromise.then(p=>{this.wcProvider=this._wcProviderFromPreGenerate,this.wcProviderProxy=this.wrapProviderForMobileWake(this.wcProvider);try{t?.onConnected?.(p)}catch{}}).catch(()=>{}),d&&typeof d.catch=="function"&&d.catch(()=>{})}catch{s(null)}}):null}finally{this._preGenerateMode=!1}}async connect(){if(this.pendingConnectPromise&&this.preGeneratedQrDataUrl&&this._wcProviderFromPreGenerate){this.wcProvider=this._wcProviderFromPreGenerate,this.wcProviderProxy=this.wrapProviderForMobileWake(this.wcProvider);try{let n=await this.wcProviderProxy.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0){let c=n[0]||"";return{owner:c,principal:c,connected:!0}}}catch{}try{qt(this.preGeneratedQrDataUrl)}catch{}try{this.wcProviderProxy.on?.("connect",async()=>{try{let n=await this.wcProviderProxy.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)try{I()}catch{}}catch{}})}catch{}try{await this.pendingConnectPromise;let n=await this.wcProviderProxy.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0){try{I()}catch{}let c=n[0]||"";return{owner:c,principal:c,connected:!0}}}catch{}let o=Date.now();for(;Date.now()-o<6e4;){try{let n=await this.wcProviderProxy.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0){try{I()}catch{}let c=n[0]||"";return{owner:c,principal:c,connected:!0}}}catch{}await new Promise(n=>setTimeout(n,500))}try{I()}catch{}throw new Error("No account returned by WalletConnect")}try{let o=[];for(let n=0;n<localStorage.length;n++){let c=localStorage.key(n);c&&(c==="walletconnect"||c.startsWith("wc@")||c.startsWith("@walletconnect/")||c.toLowerCase().includes("walletconnect"))&&o.push(c)}o.forEach(n=>{try{localStorage.removeItem(n)}catch{}})}catch{}let t=this.getInjectedWcProvider();if(t){this.wcProvider=t,this.wcProviderProxy=this.wrapProviderForMobileWake(this.wcProvider);let o=await this.wcProviderProxy.request({method:"eth_requestAccounts"}),n=Array.isArray(o)&&o[0]||"";if(!n)throw new Error("No account returned by WalletConnect");return{owner:n,principal:n,connected:!0}}let e=await this.initGlobalProvider();if(e){this.wcProvider=e;try{let s=e?.session?.peer?.metadata?.redirect||e?.session?.peer?.metadata?.redirects||null;s&&(s.native||s.universal)&&(this.wcRedirect={native:s.native,universal:s.universal})}catch{}try{await this.wcProvider.disconnect?.()}catch{}this.wcProviderProxy=this.wrapProviderForMobileWake(this.wcProvider);try{await this.wcProviderProxy.connect?.({chains:q.slice(),optionalChains:V.slice()})}catch{}try{await this.wcProviderProxy.request?.({method:"eth_requestAccounts"})}catch{}try{await this.wcProviderProxy.enable?.()}catch{}try{this.wcProviderProxy.on?.("connect",async()=>{try{let s=await this.wcProviderProxy.request?.({method:"eth_accounts"});if(Array.isArray(s)&&s.length>0)try{I()}catch{}}catch{}})}catch{}let n=await(async(s=6e4)=>{let M=Date.now();return new Promise(async(d,p)=>{let l=!1,u=(w,y)=>{if(!l){l=!0;try{I()}catch{}w&&w.length>0?d(w):p(y||new Error("No account returned by WalletConnect"))}};try{let w=g=>{let A=Array.isArray(g)?g:[];A.length>0&&u(A)},y=async()=>{try{let g=typeof document<"u"?document:null;if(g&&g.visibilityState==="visible"){try{await this.wcProviderProxy.request?.({method:"eth_requestAccounts"})}catch{}try{await this.wcProviderProxy.connect?.()}catch{}try{let A=await this.wcProviderProxy.request?.({method:"eth_accounts"}),h=!(Array.isArray(A)&&A.length>0)}catch{}}}catch{}};this.wcProviderProxy.on?.("accountsChanged",w);try{document.addEventListener("visibilitychange",y)}catch{}for(;!l&&Date.now()-M<s;){try{let g=await this.wcProviderProxy.request?.({method:"eth_accounts"});if(Array.isArray(g)&&g.length>0){this.wcProviderProxy.removeListener?.("accountsChanged",w);try{document.removeEventListener("visibilitychange",y)}catch{}return u(g)}}catch{}await new Promise(g=>setTimeout(g,500))}this.wcProviderProxy.removeListener?.("accountsChanged",w);try{document.removeEventListener("visibilitychange",y)}catch{}u(null,new Error("Timed out waiting for WalletConnect approval"))}catch(w){u(null,w)}})})(),c=Array.isArray(n)&&n[0]||"";if(!c)throw new Error("No account returned by WalletConnect");return{owner:c,principal:c,connected:!0}}let r=this.getAdapterConfig();throw!(r?.projectId||r?.projectID)?new Error("WalletConnect projectId is not configured. Set plugNPlay.adapters.walletconnect.config.projectId to enable WalletConnect."):new Error("WalletConnect provider not available. Ensure the self-hosted EthereumProvider UMD is available (dist/wc/index.umd.js) or provide plugNPlay.adapters.walletconnect.config.umdUrls.")}async disconnect(){try{let t=this.getEvmProvider();try{await t?.disconnect?.()}catch{}try{await t?.disconnectSession?.()}catch{}try{I()}catch{}this.preGeneratedQrDataUrl=null,this.preGeneratedUri=null,this.pendingConnectPromise=null,this._wcProviderFromPreGenerate=null;try{let e=[];for(let r=0;r<localStorage.length;r++){let i=localStorage.key(r);i&&(i==="walletconnect"||i.startsWith("wc@")||i.startsWith("@walletconnect/")||i.includes("WALLETCONNECT"))&&e.push(i)}e.forEach(r=>{try{localStorage.removeItem(r)}catch{}})}catch{}try{t?.removeAllListeners?.("accountsChanged")}catch{}try{t?.removeAllListeners?.("chainChanged")}catch{}try{t?.removeAllListeners?.("disconnect")}catch{}this.wcProvider=null}catch{}}async getPrincipal(){try{let t=this.getEvmProvider();if(!t)return null;let e=await t.request?.({method:"eth_accounts"});return Array.isArray(e)&&e[0]||""||null}catch{return null}}getActor(t){throw new Error("EVM wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};function Mt(){try{let a=typeof navigator<"u"?navigator:window?.navigator,t=String(a?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(t)}catch{return!1}}function N(){try{let a=typeof window<"u"?window:{};if(a.coinbaseWalletExtension)return a.coinbaseWalletExtension;let t=a.ethereum;if(t&&Array.isArray(t.providers)){let e=t.providers.find(r=>r&&(r.isCoinbaseWallet||r?.provider?.isCoinbaseWallet));if(e)return e}return t&&(t.isCoinbaseWallet||t?.provider?.isCoinbaseWallet)||Mt()&&t&&typeof t.request=="function"?t:null}catch{return null}}var U=class{constructor(t){this.id="coinbase";this.label="Coinbase Wallet";this.config=t.config||{}}getEvmProvider(){return N()}async isInstalled(){try{return!!N()}catch{return!1}}async isConnected(){try{let t=N();if(!t)return!1;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e.length>0}catch{return!1}}async connect(){let t=N();if(!t){if(typeof window<"u"&&Mt()){try{let n=String(window.location?.href||""),c=`cbwallet://dapp?url=${encodeURIComponent(n)}`;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-deeplink",{detail:{wallet:"coinbase",url:c}}))}catch{}try{window.location.href=c}catch{try{window.open(c,"_self","noopener,noreferrer")}catch{}}}catch{}throw new Error("Opening Coinbase Wallet\u2026 If nothing happens, install Coinbase Wallet and try again.")}throw new Error("Coinbase Wallet not available")}let e=n=>new Promise(c=>setTimeout(c,n)),r=async()=>{try{let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}try{let n=await t.request?.({method:"eth_requestAccounts"});if(Array.isArray(n)&&n.length>0)return n}catch(n){if(n&&(n.code===4001||n.code==="4001"))throw new Error("Connection request was rejected")}try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]});let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}return[]},i=[];for(let n=0;n<3&&i.length===0;n++)t=N()||t,i=await r(),i.length===0&&await e(300);let o=Array.isArray(i)&&i[0]||"";if(!o)throw new Error("No account returned by Coinbase Wallet");return{owner:o,principal:o,connected:!0}}async disconnect(){try{let t=N();if(!t)return;try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]})}catch{}try{t.removeAllListeners?.("accountsChanged")}catch{}try{t.removeAllListeners?.("chainChanged")}catch{}try{t.removeAllListeners?.("disconnect")}catch{}}catch{}}async getPrincipal(){try{let t=N();if(!t)return null;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e[0]||""||null}catch{return null}}getActor(t){throw new Error("EVM wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};function gt(){try{let a=typeof navigator<"u"?navigator:window?.navigator;return!!(a&&(a.brave||String(a.userAgent||"").toLowerCase().includes("brave")))}catch{return!1}}function Vt(a){try{let t=typeof window<"u"?window:{};if(t.brave?.ethereum)return t.brave.ethereum;let e=t.ethereum;if(!e)return null;if(Array.isArray(e.providers)&&e.providers.length){let i=e.providers.find(o=>o&&(o.isBraveWallet||o?.walletMeta?.name&&String(o.walletMeta.name).toLowerCase().includes("brave")));if(i)return i;if(a&>()){let o=e.providers.find(n=>n&&typeof n.request=="function"&&!n.isMetaMask&&!n.isCoinbaseWallet&&!n.isRabby&&!n.isOkxWallet&&!n.isOKExWallet&&!n.isPhantom);return o||e.providers[0]||null}return null}return e.isBraveWallet||(e?.walletMeta?.name?String(e.walletMeta.name).toLowerCase():"").includes("brave")||a&>()&&typeof e.request=="function"&&!e.isMetaMask&&!e.isCoinbaseWallet&&!e.isRabby&&!e.isOkxWallet&&!e.isOKExWallet&&!e.isPhantom?e:null}catch{return null}}var Q=class{constructor(t){this.id="brave";this.label="Brave Wallet";this.config=t.config||{}}getProvider(){return Vt(!0)}getEvmProvider(){return this.getProvider()}async isInstalled(){try{return!!this.getProvider()}catch{return!1}}async isConnected(){try{let t=this.getProvider();if(!t)return!1;let e=await t.request?.({method:"eth_accounts"});return Array.isArray(e)&&e.length>0&&typeof e[0]=="string"&&e[0]?!0:!!(t?.selectedAddress||Array.isArray(t?.accounts)&&t.accounts[0])}catch{return!1}}async connect(){let t=this.getProvider();if(!t)throw new Error("Brave Wallet not available");let e=await t.request?.({method:"eth_requestAccounts"}),r=Array.isArray(e)&&e[0]||"";if(!r)throw new Error("No account returned by Brave Wallet");return{owner:r,principal:r,connected:!0}}async disconnect(){try{let t=this.getProvider();if(!t)return;try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]})}catch{}try{t.removeAllListeners?.("accountsChanged")}catch{}try{t.removeAllListeners?.("chainChanged")}catch{}try{t.removeAllListeners?.("disconnect")}catch{}}catch{}}async getPrincipal(){try{let t=this.getProvider();if(!t)return null;let e=await t.request?.({method:"eth_accounts"});if(Array.isArray(e)&&e.length>0&&typeof e[0]=="string"&&e[0])return e[0];let r=t?.selectedAddress||Array.isArray(t?.accounts)&&t.accounts[0];return typeof r=="string"&&r?r:null}catch{return null}}getActor(t){throw new Error("EVM wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};function wt(){try{let a=typeof navigator<"u"?navigator:window?.navigator,t=String(a?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(t)}catch{return!1}}function m(){try{let t=(typeof window<"u"?window:{}).ethereum;if(t&&Array.isArray(t.providers)){let e=t.providers.find(r=>r&&r.isRainbow);if(e)return e}return t&&t.isRainbow||wt()&&t&&typeof t.request=="function"?t:null}catch{return null}}var W=class{constructor(t){this.id="rainbow";this.label="Rainbow";this.config=t.config||{}}getEvmProvider(){return m()}async isInstalled(){try{return!!m()}catch{return!1}}async isConnected(){try{let t=m();if(!t)return!1;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e.length>0}catch{return!1}}async connect(){let t=m();if(!t){if(typeof window<"u"&&wt()){try{let n=String(window.location?.href||""),c=`https://rnbwapp.com/browse/${encodeURIComponent(n)}`;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-deeplink",{detail:{wallet:"rainbow",url:c}}))}catch{}try{window.location.href=c}catch{try{window.open(c,"_self","noopener,noreferrer")}catch{}}}catch{}throw new Error("Opening Rainbow\u2026 If nothing happens, install Rainbow and try again.")}throw new Error("Rainbow not available")}let e=n=>new Promise(c=>setTimeout(c,n)),r=async()=>{try{let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}try{let n=await t.request?.({method:"eth_requestAccounts"});if(Array.isArray(n)&&n.length>0)return n}catch(n){if(n&&(n.code===4001||n.code==="4001"))throw new Error("Connection request was rejected")}try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]});let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}return[]},i=[];for(let n=0;n<3&&i.length===0;n++)t=m()||t,i=await r(),i.length===0&&await e(300);let o=Array.isArray(i)&&i[0]||"";if(!o)throw new Error("No account returned by Rainbow");return{owner:o,principal:o,connected:!0}}async disconnect(){try{let t=m();if(!t)return;try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]})}catch{}try{t.removeAllListeners?.("accountsChanged")}catch{}try{t.removeAllListeners?.("chainChanged")}catch{}try{t.removeAllListeners?.("disconnect")}catch{}}catch{}}async getPrincipal(){try{let t=m();if(!t)return null;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e[0]||""||null}catch{return null}}getActor(t){throw new Error("EVM wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};function At(){try{let a=typeof navigator<"u"?navigator:window?.navigator,t=String(a?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(t)}catch{return!1}}function D(){try{let t=(typeof window<"u"?window:{}).ethereum;if(t&&Array.isArray(t.providers)){let e=t.providers.find(r=>r&&r.isRabby);if(e)return e}return t&&t.isRabby||At()&&t&&typeof t.request=="function"?t:null}catch{return null}}var Y=class{constructor(t){this.id="rabby";this.label="Rabby";this.config=t.config||{}}getEvmProvider(){return D()}async isInstalled(){try{return!!D()}catch{return!1}}async isConnected(){try{let t=D();if(!t)return!1;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e.length>0}catch{return!1}}async connect(){let t=D();if(!t){if(typeof window<"u"&&At()){try{let n=String(window.location?.href||""),c=`rabby://browser?url=${encodeURIComponent(n)}`;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-deeplink",{detail:{wallet:"rabby",url:c}}))}catch{}try{window.location.href=c}catch{try{window.open(c,"_self","noopener,noreferrer")}catch{}}}catch{}throw new Error("Opening Rabby\u2026 If nothing happens, install Rabby and try again.")}throw new Error("Rabby not available")}let e=n=>new Promise(c=>setTimeout(c,n)),r=async()=>{try{let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}try{let n=await t.request?.({method:"eth_requestAccounts"});if(Array.isArray(n)&&n.length>0)return n}catch(n){if(n&&(n.code===4001||n.code==="4001"))throw new Error("Connection request was rejected")}try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]});let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}return[]},i=[];for(let n=0;n<3&&i.length===0;n++)t=D()||t,i=await r(),i.length===0&&await e(300);let o=Array.isArray(i)&&i[0]||"";if(!o)throw new Error("No account returned by Rabby");return{owner:o,principal:o,connected:!0}}async disconnect(){try{let t=D();if(!t)return;try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]})}catch{}try{t.removeAllListeners?.("accountsChanged")}catch{}try{t.removeAllListeners?.("chainChanged")}catch{}try{t.removeAllListeners?.("disconnect")}catch{}}catch{}}async getPrincipal(){try{let t=D();if(!t)return null;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e[0]||""||null}catch{return null}}getActor(t){throw new Error("EVM wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};function pt(){try{let a=typeof navigator<"u"?navigator:window?.navigator,t=String(a?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(t)}catch{return!1}}function L(){try{let a=typeof window<"u"?window:{};return a.phantom&&a.phantom.solana?a.phantom.solana:a.solana?a.solana:null}catch{return null}}var Z=class{constructor(t){this.id="phantom";this.label="Phantom";this.config=t.config||{}}getEvmProvider(){return null}getSolanaProvider(){return L()}async isInstalled(){try{return pt()?!0:!!L()}catch{return!1}}async isConnected(){try{let t=L();if(!t)return!1;if(t.isConnected&&t.publicKey)return!0;try{return await t.connect(),!!t.publicKey}catch{return!1}}catch{return!1}}async connect(){let t=L();if(!t){if(typeof window<"u"&&pt()){let e=String(window.location?.href||""),r=String(window.location?.origin||e.replace(/\/[^/]*$/,"")||""),i=`https://phantom.app/ul/browse/${encodeURIComponent(e)}?ref=${encodeURIComponent(r)}`;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-deeplink",{detail:{wallet:"phantom",url:i}}))}catch{}try{window.location.href=i}catch{try{window.open(i,"_self","noopener,noreferrer")}catch{}}throw new Error("Opening Phantom\u2026 If nothing happens, install Phantom and try again.")}throw new Error("Phantom (Solana) not available")}try{let e=await t.connect(),r=String(e?.publicKey||t.publicKey||"");if(!r)throw new Error("No account returned by Phantom");return{owner:r,principal:r,connected:!0}}catch(e){throw e&&(e.code===4001||e.code==="4001")?new Error("Connection request was rejected"):new Error(e?.message||"Phantom connection failed")}}async disconnect(){try{let t=L();if(!t)return;try{await t.disconnect?.()}catch{}try{t.removeAllListeners?.("accountChanged")}catch{}try{t.removeAllListeners?.("connect")}catch{}try{t.removeAllListeners?.("disconnect")}catch{}}catch{}}async getPrincipal(){try{let t=L();return t&&t?.publicKey?String(t.publicKey):null}catch{return null}}getActor(t){throw new Error("EVM wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};function ft(){try{let a=typeof navigator<"u"?navigator:window?.navigator,t=String(a?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(t)}catch{return!1}}function j(){try{let a=typeof window<"u"?window:{},t=a.okxwallet;if(t&&(t.isOkxWallet||t.ethereum))return t.ethereum||t;let e=a.ethereum;if(e&&Array.isArray(e.providers)){let r=e.providers.find(i=>i&&(i.isOkxWallet||i?.provider?.isOkxWallet));if(r)return r}return e&&(e.isOkxWallet||e?.provider?.isOkxWallet)||ft()&&e&&typeof e.request=="function"?e:null}catch{return null}}var G=class{constructor(t){this.id="okx";this.label="OKX Wallet";this.config=t.config||{}}getEvmProvider(){return j()}async isInstalled(){try{return!!j()}catch{return!1}}async isConnected(){try{let t=j();if(!t)return!1;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e.length>0}catch{return!1}}async connect(){let t=j();if(!t){if(typeof window<"u"&&ft()){try{let n=String(window.location?.href||""),c=`okx://wallet/dapp/url?dappUrl=${encodeURIComponent(n)}`,s=`https://web3.okx.com/download?deeplink=${encodeURIComponent(c)}`;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-deeplink",{detail:{wallet:"okx",url:s}}))}catch{}try{window.location.href=s}catch{try{window.open(s,"_self","noopener,noreferrer")}catch{}}}catch{}throw new Error("Opening OKX Wallet\u2026 If nothing happens, install OKX Wallet and try again.")}throw new Error("OKX Wallet not available")}let e=n=>new Promise(c=>setTimeout(c,n)),r=async()=>{try{let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}try{let n=await t.request?.({method:"eth_requestAccounts"});if(Array.isArray(n)&&n.length>0)return n}catch(n){if(n&&(n.code===4001||n.code==="4001"))throw new Error("Connection request was rejected")}try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]});let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}return[]},i=[];for(let n=0;n<3&&i.length===0;n++)t=j()||t,i=await r(),i.length===0&&await e(300);let o=Array.isArray(i)&&i[0]||"";if(!o)throw new Error("No account returned by OKX Wallet");return{owner:o,principal:o,connected:!0}}async disconnect(){try{let t=j();if(!t)return;try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]})}catch{}try{t.removeAllListeners?.("accountsChanged")}catch{}try{t.removeAllListeners?.("chainChanged")}catch{}try{t.removeAllListeners?.("disconnect")}catch{}}catch{}}async getPrincipal(){try{let t=j();if(!t)return null;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e[0]||""||null}catch{return null}}getActor(t){throw new Error("EVM wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};function ht(){try{let a=typeof navigator<"u"?navigator:window?.navigator,t=String(a?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(t)}catch{return!1}}function z(){try{let a=typeof window<"u"?window:{};if(a.trustwallet?.ethereum)return a.trustwallet.ethereum;if(a.trustWallet?.ethereum)return a.trustWallet.ethereum;if(a.trustwallet&&typeof a.trustwallet.request=="function")return a.trustwallet;if(a.trustWallet&&typeof a.trustWallet.request=="function")return a.trustWallet;let t=a.ethereum;if(t&&Array.isArray(t.providers)){let r=t.providers.find(i=>i&&(i.isTrust||i?.isTrustWallet));if(r)return r}if(t&&(t.isTrust||t?.isTrustWallet))return t;let e=String((typeof navigator<"u"?navigator:a?.navigator)?.userAgent||"").toLowerCase();return ht()&&(e.includes("trust")||e.includes("trustwallet"))&&t&&typeof t.request=="function"?t:null}catch{return null}}var R=class{constructor(t){this.id="trust";this.label="Trust Wallet";this.config=t.config||{}}getEvmProvider(){return z()}async isInstalled(){try{return!!z()}catch{return!1}}async isConnected(){try{let t=z();if(!t)return!1;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e.length>0}catch{return!1}}async connect(){let t=z();if(!t){if(typeof window<"u"&&ht()){try{let n=String(window.location?.href||""),c=`https://link.trustwallet.com/open_url?coin_id=60&url=${encodeURIComponent(n)}`;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-deeplink",{detail:{wallet:"trust",url:c}}))}catch{}try{window.location.href=c}catch{try{window.open(c,"_self","noopener,noreferrer")}catch{}}}catch{}throw new Error("Opening Trust Wallet\u2026 If nothing happens, install Trust Wallet and try again.")}throw new Error("Trust Wallet not available")}let e=n=>new Promise(c=>setTimeout(c,n)),r=async()=>{try{let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}try{let n=await t.request?.({method:"eth_requestAccounts"});if(Array.isArray(n)&&n.length>0)return n}catch(n){if(n&&(n.code===4001||n.code==="4001"))throw new Error("Connection request was rejected")}try{await t.request?.({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]});let n=await t.request?.({method:"eth_accounts"});if(Array.isArray(n)&&n.length>0)return n}catch{}return[]},i=[];for(let n=0;n<3&&i.length===0;n++)t=z()||t,i=await r(),i.length===0&&await e(300);let o=Array.isArray(i)&&i[0]||"";if(!o)throw new Error("No account returned by Trust Wallet");return{owner:o,principal:o,connected:!0}}async disconnect(){try{let t=z();if(!t)return;try{t.removeAllListeners?.("accountsChanged")}catch{}try{t.removeAllListeners?.("chainChanged")}catch{}try{t.removeAllListeners?.("disconnect")}catch{}}catch{}}async getPrincipal(){try{let t=z();if(!t)return null;let e=await t.request({method:"eth_accounts"});return Array.isArray(e)&&e[0]||""||null}catch{return null}}getActor(t){throw new Error("EVM wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};function It(){try{let a=typeof navigator<"u"?navigator:window?.navigator,t=String(a?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(t)}catch{return!1}}function T(){try{let a=typeof window<"u"?window:{},t=r=>{try{let n=globalThis.Buffer;if(n)return new Uint8Array(n.from(r,"base64"))}catch{}let i=globalThis?.atob?globalThis.atob(r):"",o=new Uint8Array(i.length);for(let n=0;n<i.length;n++)o[n]=i.charCodeAt(n);return o};if(a.backpack?.solana){let r=a.backpack.solana;return{isBackpack:!0,get publicKey(){return r.publicKey},get isConnected(){return r.isConnected},connect:(...o)=>r.connect?r.connect(...o):Promise.resolve(),disconnect:(...o)=>r.disconnect?r.disconnect(...o):Promise.resolve(),on:(...o)=>r.on?r.on(...o):void 0,off:(...o)=>r.off?r.off(...o):void 0,removeAllListeners:(...o)=>r.removeAllListeners?r.removeAllListeners(...o):void 0,request:async o=>{if(o&&o.method==="signAndSendTransaction"&&typeof r.signAndSendTransaction=="function"){let n=o.params||{};if(n&&n.transaction!=null){let c=typeof n.transaction=="string"?t(n.transaction):n.transaction,s={serialize:()=>c};return await r.signAndSendTransaction(s)}if(typeof r.request=="function")return r.request(o);throw new Error("Unsupported method")}if(typeof r.request=="function")return r.request(o);throw new Error("Unsupported method")}}}if(a.xnft?.solana)return a.xnft.solana;let e=a.solana;if(e&&(e.isBackpack===!0||e?.provider?.isBackpack===!0)){let r=e;return{isBackpack:!0,get publicKey(){return r.publicKey},get isConnected(){return r.isConnected},connect:(...o)=>r.connect?r.connect(...o):Promise.resolve(),disconnect:(...o)=>r.disconnect?r.disconnect(...o):Promise.resolve(),on:(...o)=>r.on?r.on(...o):void 0,off:(...o)=>r.off?r.off(...o):void 0,removeAllListeners:(...o)=>r.removeAllListeners?r.removeAllListeners(...o):void 0,request:async o=>{if(o&&o.method==="signAndSendTransaction"&&typeof r.signAndSendTransaction=="function"){let n=o.params||{};if(n&&n.transaction!=null){let c=typeof n.transaction=="string"?t(n.transaction):n.transaction,s={serialize:()=>c};return await r.signAndSendTransaction(s)}if(typeof r.request=="function")return r.request(o);throw new Error("Unsupported method")}if(typeof r.request=="function")return r.request(o);throw new Error("Unsupported method")}}}return It()&&e&&typeof e.connect=="function"?e:null}catch{return null}}var B=class{constructor(t){this.id="backpack";this.label="Backpack";this.config=t.config||{}}getSolanaProvider(){return T()}async isInstalled(){try{return!!T()}catch{return!1}}async isConnected(){try{let t=T();if(!t)return!1;if(t.isConnected&&t.publicKey)return!0;try{return await t.connect(),!!t.publicKey}catch{return!1}}catch{return!1}}async connect(){let t=T();if(!t){if(typeof window<"u"&&It())try{if(t=T(),!t)throw new Error("Backpack (Solana) not available")}catch{throw new Error("Backpack (Solana) not available")}throw new Error("Backpack (Solana) not available")}try{let e=await t.connect(),r=String(e?.publicKey||t.publicKey||"");if(!r)throw new Error("No account returned by Backpack");return{owner:r,principal:r,connected:!0}}catch(e){throw e&&(e.code===4001||e.code==="4001")?new Error("Connection request was rejected"):new Error(e?.message||"Backpack connection failed")}}async disconnect(){try{let t=T();if(!t)return;try{await t.disconnect?.()}catch{}try{t.removeAllListeners?.("accountChanged")}catch{}try{t.removeAllListeners?.("connect")}catch{}try{t.removeAllListeners?.("disconnect")}catch{}}catch{}}async getPrincipal(){try{let t=T();return t&&t?.publicKey?String(t.publicKey):null}catch{return null}}getActor(t){throw new Error("Solana wallets cannot provide IC actors. Use IC adapters for IC canister interactions.")}};function Jt(a){if(!a)return null;if(typeof a=="string")return a;try{let t=a;if(typeof t.toText=="function")return t.toText();if(typeof t.toString=="function")return t.toString()}catch{}return null}function Xt(a){let t={};return a&&(t.host=a),t}function Kt(a){return a&&typeof a=="string"&&a.trim()?a:"https://icp-api.io"}var J=class{constructor(t){this._activeAdapter=null;this._account=null;this._walletConnectAdapter=null;this._config=t||{};let e={};e.metamask={id:"metamask",label:"MetaMask",icon:null,enabled:!0,adapter:P},e.coinbase={id:"coinbase",label:"Coinbase Wallet",icon:null,enabled:!0,adapter:U},e.walletconnect={id:"walletconnect",label:"WalletConnect",icon:null,enabled:!1,adapter:b},e.phantom={id:"phantom",label:"Phantom",icon:null,enabled:!0,adapter:Z},e.backpack={id:"backpack",label:"Backpack",icon:null,enabled:!0,adapter:B},e.rainbow={id:"rainbow",label:"Rainbow",icon:null,enabled:!1,adapter:W},e.rabby={id:"rabby",label:"Rabby",icon:null,enabled:!0,adapter:Y},e.brave={id:"brave",label:"Brave Wallet",icon:null,enabled:!0,adapter:Q},e.okx={id:"okx",label:"OKX Wallet",icon:null,enabled:!0,adapter:G},e.trust={id:"trust",label:"Trust Wallet",icon:null,enabled:!0,adapter:R},e.oisy={id:"oisy",label:"Oisy",icon:null,enabled:!0,adapter:S},e.nfid={id:"nfid",label:"NFID",icon:null,enabled:!1,adapter:O},e.ii={id:"ii",label:"Internet Identity",icon:null,enabled:!1,adapter:E},e.plug={id:"plug",label:"Plug",icon:null,enabled:!0,adapter:x};let r=this._config.adapters=this._config.adapters||{},i=Kt(this._config.icHost);this._config.icHost||(this._config.icHost=i),r.nfid=r.nfid||{},r.nfid.config={signerUrl:r.nfid.config?.signerUrl||"https://nfid.one/rpc",hostUrl:r.nfid.config?.hostUrl||i,transport:{...r.nfid.config?.transport||{}}},r.oisy=r.oisy||{},r.oisy.config={signerUrl:r.oisy.config?.signerUrl||"https://oisy.com/sign",hostUrl:r.oisy.config?.hostUrl||i,transport:{...r.oisy.config?.transport||{}}},r.walletconnect=r.walletconnect||{},r.walletconnect.config={...r.walletconnect.config||{},projectId:r.walletconnect.config?.projectId||"",chains:r.walletconnect.config?.chains||[8453,84532]};try{let o=r.walletconnect?.enabled!==!1,n=String(r.walletconnect?.config?.projectId||"").trim();o&&!n&&(e.walletconnect.enabled=!1)}catch{}r.plug=r.plug||{},r.ii=r.ii||{},Object.keys(e).forEach(o=>{let n=r[o];n&&typeof n.enabled=="boolean"&&(e[o].enabled=!!n.enabled)}),this._adapters=e}isMobileBrowser(){try{let t=typeof navigator<"u"?navigator:globalThis?.navigator,e=String(t?.userAgent||"").toLowerCase();return/iphone|ipad|ipod|android|mobile|windows phone/.test(e)}catch{return!1}}get config(){return this._config}get account(){return this._account}getEnabledWallets(){let t=Array.isArray(this._config.chainTypes)?this._config.chainTypes.map(c=>String(c).toLowerCase()):null,e={oisy:"ic",nfid:"ic",ii:"ic",plug:"ic",metamask:"evm",walletconnect:"evm",coinbase:"evm",brave:"evm",rainbow:"evm",rabby:"evm",okx:"evm",trust:"evm",phantom:"sol",backpack:"sol"},r=Object.values(this._adapters).map((c,s)=>({a:c,idx:s})).filter(({a:c})=>{if(c.enabled===!1)return!1;if(c.id==="walletconnect")try{if(!String(this._config?.adapters?.walletconnect?.config?.projectId||"").trim())return!1}catch{return!1}if(c.id==="rabby"&&this.isMobileBrowser()||c.id==="backpack"&&this.isMobileBrowser()||c.id==="brave"&&this.isMobileBrowser()||c.id==="plug"&&this.isMobileBrowser())return!1;if(Array.isArray(t)&&t.length>0){let s=e[c.id];if(!s||!t.includes(s))return!1}return!0}),i=["sol","evm","ic"],o=t&&t.length>0?t:i,n={};return o.forEach((c,s)=>{n[c]=s}),r.sort((c,s)=>{let M=e[c.a.id],d=e[s.a.id],p=M in n?n[M]:Number.MAX_SAFE_INTEGER,l=d in n?n[d]:Number.MAX_SAFE_INTEGER;return p!==l?p-l:c.idx-s.idx}),r.map(({a:c})=>({id:c.id,label:c.label,icon:this.resolveIcon(c.id,c.icon),enabled:c.enabled,adapter:c.adapter,config:this._config.adapters&&this._config.adapters[c.id]?.config||{}}))}resolveIcon(t,e){return k(t,e||null)}getEvmProvider(){try{let t=this._activeAdapter;if(t&&typeof t.getEvmProvider=="function"){let e=t.getEvmProvider();if(e)return e;if(t.id==="walletconnect")return null}}catch{}try{return(typeof window<"u"?window.ethereum:null)||null}catch{return null}}getSolanaProvider(){try{let t=this._activeAdapter;if(t&&typeof t.getSolanaProvider=="function"){let e=t.getSolanaProvider();if(e)return e}}catch{}try{let t=typeof window<"u"?window:{};return t?.backpack?.solana?t.backpack.solana:t?.xnft?.solana?t.xnft.solana:t?.solana&&(t.solana.isBackpack===!0||t?.solana?.provider?.isBackpack===!0)?t.solana:t?.phantom?.solana?t.phantom.solana:t?.solana||null}catch{return null}}async generateWalletConnectQr(t){let e=this._adapters.walletconnect;if(!e||e.enabled===!1)return null;this._walletConnectAdapter||(this._walletConnectAdapter=new b({config:this._config}));let r=t?.onConnected;return this._walletConnectAdapter.getOrCreateQrDataUrl({onConnected:i=>{this._activeAdapter=this._walletConnectAdapter,this._account={owner:i?.principal??i?.owner??null,principal:i?.principal??i?.owner??null,connected:!0};try{r?.(i)}catch{}}})}async hasCoinbaseAccounts(){try{let t=this._adapters.coinbase;if(!t||t.enabled===!1)return!1;let r=new t.adapter({config:this._config}).getEvmProvider?.();if(!r||typeof r.request!="function")return!1;let i=await r.request({method:"eth_accounts"});return Array.isArray(i)&&i.length>0}catch{return!1}}connect(t){let e=(t||"").toLowerCase(),r=e?this._adapters[e]:void 0;if(!r||r.enabled===!1)throw new Error("No wallets available");let i=e==="walletconnect"&&this._walletConnectAdapter?this._walletConnectAdapter:new r.adapter({config:this._config});return this._activeAdapter=i,i.connect().then(o=>{let n=Jt(o?.principal||o?.owner);return this._account={owner:n,principal:n,connected:!0},this._account})}async disconnect(){try{await this._activeAdapter?.disconnect()}catch{}this._activeAdapter?.id==="walletconnect"&&(this._walletConnectAdapter=null),this._activeAdapter=null,this._account=null}getActor(t){if(!this._activeAdapter){let e=new Ht(Xt(this._config.icHost));return Ft.createActor(t.idl,{agent:e,canisterId:t.canisterId})}return this._activeAdapter.getActor(t)}},fn=a=>new J(a);export{J as a,fn as b};
|
|
2
|
+
//# sourceMappingURL=chunk-QEOLHVOE.js.map
|