Repository: cashubtc/eNuts Branch: master Commit: c5fe87f1aa65 Files: 176 Total size: 1.1 MB Directory structure: gitextract_io1ldjbk/ ├── .gitignore ├── .prettierignore ├── .prettierrc ├── AGENTS.md ├── TODO.md ├── app.json ├── assets/ │ ├── lottie/ │ │ ├── confetti.json │ │ └── success.json │ └── translations/ │ ├── de.json │ ├── en.json │ ├── es.json │ ├── it.json │ ├── ru.json │ └── th.json ├── eas.json ├── expo-router-implementation-steps.md ├── expo-router-migration-issues.md ├── expo-router-migration-plan.md ├── index.ts ├── package.json ├── src/ │ ├── components/ │ │ ├── ActionButtons.tsx │ │ ├── AmountInput.tsx │ │ ├── AnimatedSpinner.tsx │ │ ├── App.tsx │ │ ├── Balance.tsx │ │ ├── Blank.tsx │ │ ├── Button.tsx │ │ ├── Card.tsx │ │ ├── Copy.tsx │ │ ├── DashboardTopBar.tsx │ │ ├── Empty.tsx │ │ ├── Icons.tsx │ │ ├── InputAndLabel.tsx │ │ ├── Loading.tsx │ │ ├── Logo.tsx │ │ ├── MintBalance.tsx │ │ ├── MintHeaderSelector.tsx │ │ ├── MintSelectionSheet.tsx │ │ ├── MintSelector.tsx │ │ ├── Option.tsx │ │ ├── OverviewRow.tsx │ │ ├── Progress.tsx │ │ ├── QR.tsx │ │ ├── RadioBtn.tsx │ │ ├── Screen.tsx │ │ ├── Separator.tsx │ │ ├── SwipeButton.tsx │ │ ├── Toaster.tsx │ │ ├── Toggle.tsx │ │ ├── Txt.tsx │ │ ├── TxtInput.tsx │ │ ├── animation/ │ │ │ └── Shake.ts │ │ ├── hooks/ │ │ │ ├── AnimatedQr.ts │ │ │ ├── Copy.tsx │ │ │ ├── Loading.tsx │ │ │ ├── useCashuClaimFlow.ts │ │ │ ├── useDiscoverMints.ts │ │ │ ├── useNfcPayment.ts │ │ │ └── useUrDecoder.ts │ │ ├── modal/ │ │ │ ├── ConfirmBottomSheet.tsx │ │ │ ├── ConfirmationModal.tsx │ │ │ ├── MeltConfirmationModal.tsx │ │ │ ├── NfcPaymentModal.tsx │ │ │ ├── OperationMintPanel.tsx │ │ │ ├── SendConfirmationModal.tsx │ │ │ ├── TrustMintBottomSheet.tsx │ │ │ ├── TrustMintProvider.tsx │ │ │ └── index.tsx │ │ └── nav/ │ │ ├── Navigator.tsx │ │ ├── TopNav.tsx │ │ └── utils.ts │ ├── config/ │ │ ├── config.base.ts │ │ ├── config.dev.ts │ │ ├── config.prod.ts │ │ └── index.ts │ ├── consts/ │ │ ├── env.ts │ │ ├── index.ts │ │ ├── time.ts │ │ └── urls.ts │ ├── context/ │ │ ├── Balance.tsx │ │ ├── Currency.tsx │ │ ├── KnownMints.tsx │ │ ├── Linking.tsx │ │ ├── Manager.tsx │ │ ├── NfcAmountLimits.tsx │ │ ├── Npc.tsx │ │ ├── Privacy.tsx │ │ ├── Prompt.tsx │ │ └── Theme.tsx │ ├── i18n.ts │ ├── i18next.d.ts │ ├── logger/ │ │ ├── AppLogger.ts │ │ └── index.ts │ ├── model/ │ │ ├── env.ts │ │ ├── i18n.ts │ │ ├── index.ts │ │ └── nav.ts │ ├── nav/ │ │ ├── HistoryNavigator.tsx │ │ ├── MintNavigator.tsx │ │ ├── RestoreNavigator.tsx │ │ ├── SettingsNavigator.tsx │ │ └── navTypes.ts │ ├── screens/ │ │ ├── Dashboard.tsx │ │ ├── DashboardActionSheet.tsx │ │ ├── ErrorScreen/ │ │ │ ├── ErrorBoundary.tsx │ │ │ └── ErrorDetails.tsx │ │ ├── History/ │ │ │ ├── Details.tsx │ │ │ ├── components/ │ │ │ │ ├── DetailsSection.tsx │ │ │ │ ├── HistoryDetailsScreen.tsx │ │ │ │ ├── HistoryOverview.tsx │ │ │ │ ├── LatestHistory.tsx │ │ │ │ ├── LatestHistoryMeltEntry.tsx │ │ │ │ ├── LatestHistoryMintEntry.tsx │ │ │ │ ├── LatestHistoryReceiveEntry.tsx │ │ │ │ ├── LatestHistorySendEntry.tsx │ │ │ │ ├── LatestHistoryWrapper.tsx │ │ │ │ ├── MeltHistoryDetails.tsx │ │ │ │ ├── MintHistoryDetails.tsx │ │ │ │ ├── ReceiveHistoryDetails.tsx │ │ │ │ ├── SendHistoryDetails.tsx │ │ │ │ └── TokenSection.tsx │ │ │ ├── entryTime.tsx │ │ │ └── index.tsx │ │ ├── Mints/ │ │ │ ├── AddMintScreen.tsx │ │ │ ├── MintHomeScreen.tsx │ │ │ ├── MintSettingsScreen.tsx │ │ │ ├── components/ │ │ │ │ ├── MetadataItem.tsx │ │ │ │ └── MintItem.tsx │ │ │ └── index.ts │ │ ├── Onboarding.tsx │ │ ├── Payment/ │ │ │ ├── MeltInput.tsx │ │ │ ├── MintSelectAmount.tsx │ │ │ ├── Processing.tsx │ │ │ ├── ProcessingError.tsx │ │ │ ├── Receive/ │ │ │ │ └── Invoice.tsx │ │ │ ├── Send/ │ │ │ │ ├── CoinSelection.tsx │ │ │ │ └── EncodedToken.tsx │ │ │ ├── SendSelectAmount.tsx │ │ │ ├── Success.tsx │ │ │ └── SuccessScreen.tsx │ │ ├── QRScan/ │ │ │ ├── QrScannerScreen.tsx │ │ │ ├── components/ │ │ │ │ └── CameraPermission.tsx │ │ │ └── hooks/ │ │ │ └── useScanResult.ts │ │ ├── Restore/ │ │ │ ├── Recover.tsx │ │ │ ├── Recovering.tsx │ │ │ └── SelectRecoveryMint.tsx │ │ └── Settings/ │ │ ├── Currency.tsx │ │ ├── Display.tsx │ │ ├── Language.tsx │ │ ├── MenuItem.tsx │ │ ├── NfcSettings.tsx │ │ ├── NpcSettings.tsx │ │ ├── ViewMnemonic.tsx │ │ └── index.tsx │ ├── services/ │ │ ├── ExchangeRateService.ts │ │ ├── NFCService.ts │ │ ├── NpcService.ts │ │ └── SeedService.ts │ ├── shim.ts │ ├── storage/ │ │ ├── DbProvider.ts │ │ ├── dev.ts │ │ └── store/ │ │ ├── SecureStore.ts │ │ ├── consts.ts │ │ ├── index.ts │ │ └── theme.ts │ ├── styles/ │ │ ├── colors.ts │ │ ├── globals.ts │ │ └── index.ts │ └── util/ │ ├── index.ts │ ├── lnurl.ts │ ├── localization.ts │ ├── lud16.ts │ ├── paymentStringParser.ts │ └── typeguards.ts ├── tsconfig.json └── zapstore.yaml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files # dependencies node_modules/ # Expo .expo/ dist/ web-build/ expo-env.d.ts /android/ /ios/ # Native .kotlin/ *.orig.* *.jks *.p8 *.p12 *.key *.mobileprovision # Metro .metro-health-check* # debug npm-debug.* yarn-debug.* yarn-error.* # macOS .DS_Store *.pem # local env files .env*.local # typescript *.tsbuildinfo ================================================ FILE: .prettierignore ================================================ # Dependencies node_modules # Build outputs dist build .expo # Native builds android ios # Lock files package-lock.json yarn.lock pnpm-lock.yaml # Coverage coverage # Generated files *.generated.* .expo-shared # Misc .git *.log ================================================ FILE: .prettierrc ================================================ { "semi": true, "singleQuote": false, "tabWidth": 2, "useTabs": false, "trailingComma": "all", "bracketSpacing": true, "arrowParens": "always", "printWidth": 100, "jsxSingleQuote": false } ================================================ FILE: AGENTS.md ================================================ # AGENTS.md — eNuts ## Overview - Expo + React Native app written in TypeScript. - `strict` TypeScript enabled in `tsconfig.json`. - Entry is `index.ts`; app config in `app.json`. - Source lives in `src/` with components, screens, services, context, storage, util. - Styling uses `react-native-size-matters` and shared `@styles` theme helpers. - i18n uses `react-i18next` with translations in `assets/translations`. ## Commands ### Install - `npm install` ### Run (Expo) - `npm run start` (Expo dev server) - `npm run android` (run Android device/emulator) - `npm run ios` (run iOS simulator) ### Formatting - `npm run format` (Prettier, repo-wide) ### Build (EAS) - `npx eas build --profile development` - `npx eas build --profile preview` - `npx eas build --profile production` - Profiles are defined in `eas.json`; requires EAS auth. ### Linting - No lint script configured in `package.json`. - If adding lint, keep it opt-in and align with Prettier. ### Tests - No test runner configured in `package.json`. - No single-test command available yet. - If you introduce Jest later, use `npx jest path/to/test -t "name"` (convention only). ## Project layout - `src/components/` reusable UI components and hooks. - `src/screens/` screen-level components and flows. - `src/context/` React context providers and hooks. - `src/services/` app services (seed, NFC, exchange rates). - `src/storage/` persistence and database helpers. - `src/styles/` theme colors and globals. - `src/util/` shared utilities. - `assets/` images, lottie, translations. ## Imports and modules - Prefer path aliases from `tsconfig.json` (`@src`, `@comps`, `@styles`, `@model`, etc.). - Keep alias imports grouped together at the top. - Follow with external packages, then relative imports. - Use `import type` for type-only imports. - Avoid unused imports; rely on TypeScript to catch issues. ## Formatting and structure - Prettier settings: semicolons, double quotes, `printWidth: 100`, trailing commas. - Indentation is 2 spaces; no tabs. - Keep JSX props each on new line when long. - Keep objects and arrays trailing commas for easier diffs. - Prefer `const` and `function` declarations over `let`. - Avoid inline comments unless requested. ## Types and naming - Use TypeScript everywhere; avoid `any` unless unavoidable. - Prefer `interface` for props and object shapes; prefix with `I` (e.g., `IButtonProps`). - Use `type` for unions/utility types; prefix with `T` for nav props (e.g., `TDisplaySettingsPageProps`). - Component names are `PascalCase`; hooks are `useCamelCase`. - Constants are `SCREAMING_SNAKE_CASE` in `consts/`. - File names are `PascalCase` for components, `camelCase` for utilities. ## Components and styling - Components generally use `export default function ComponentName(...)`. - Use `useThemeContext` for theme colors and highlight selection. - Prefer `globals(...)` and `@styles` helpers over hard-coded values. - Size spacing with `s()` / `ScaledSheet` from `react-native-size-matters`. - Use `TouchableOpacity` with `accessibilityRole="button"` where appropriate. - Include `testID` attributes when there is an existing pattern. ## State and context - Context providers live in `src/context/` and are exported as hooks. - Keep derived values memoized (`useMemo`) when depending on theme or context. - Persist preferences via `@src/storage` helpers. - Avoid side effects in render; use `useEffect`. ## Error handling and logging - Use `try/catch` for async boundaries; log errors via `l` from `@log`. - Return `null`/fallback values when a feature can gracefully degrade. - Throw errors in services only for unrecoverable state (e.g., missing mnemonic). - Avoid swallowing errors without logging. ## i18n and strings - Use `useTranslation` and `NS` namespaces for UI strings. - Add translations to `assets/translations/*.json` when new keys are introduced. - Keep user-visible strings out of services/utilities where possible. ## Data and storage - Sensitive data uses `expo-secure-store` abstractions in `src/storage`. - Keep data models in `src/model/` and re-export via `@model`. - Prefer typed storage accessors over raw `SecureStore` calls. ## Networking - Use `fetch` with typed responses where possible. - Validate input strings before network calls (e.g., LNURL parsing). - Handle `.onion` domains via `http` when required. ## Navigation - Navigation types live in `src/model/nav.ts` and `src/nav/navTypes.ts`. - Screen components should accept typed nav props. ## Testing notes - There are currently no test files or test scripts. - If you add tests, keep them colocated with features or in a `__tests__` folder. - Prefer deterministic tests and avoid network calls; mock where needed. ## Formatting quick check - Run `npm run format` before submitting changes. - If format changes are large, scope to touched files when possible. ## Cursor/Copilot rules - No `.cursor/rules/`, `.cursorrules`, or `.github/copilot-instructions.md` found. - If added later, follow them as higher priority. ## PR hygiene (if contributing) - Keep commits focused and small. - Avoid unrelated refactors during feature work. - Note any missing tests in PR description. ## Common pitfalls - Don’t hard-code colors; use theme helpers. - Don’t bypass `SecureStore` for secrets. - Ensure `await` is used for async storage calls. - Avoid using `any` to silence type errors. ## File references - `package.json` for scripts. - `.prettierrc` for formatting. - `tsconfig.json` for path aliases and strict mode. - `app.json` and `eas.json` for Expo/EAS config. ## Notes for agents - Respect existing patterns and naming. - Keep changes minimal and localized. - Ask before adding new dependencies. - Avoid writing new docs unless requested. - Use `edit` tool for modifications. - Re-run formatting after structural refactors. - Update translation files for any new UI string. - Ensure navigation types stay in sync. - Keep sample data localized to dev builds. ================================================ FILE: TODO.md ================================================ # TODO ## Typecheck cleanup These are the best next targets because they block `npx tsc --noEmit` from being useful as a regression check. - [x] Remove stale `selectMintToSwapTo` route. - Removed the unreachable route registration, route type, screen prop type, and screen file. - [ ] Fix stale route types in `src/components/Empty.tsx`. - Current type references old routes: `"nostrReceive"` and `"qr scan"`. - Replace with a generic `NativeStackNavigationProp` or a narrower current route type. - [ ] Clean up payment overview residue in `src/screens/Payment/Send/CoinSelection.tsx`. - Remove the missing `_testmintUrl` import from `@consts`. - Check whether `url`, `scanned`, and `trustMintRef` are still needed. - [ ] Fix utility module type errors in `src/util/index.ts`. - Import or remove the `IContact` dependency used by `uniqByIContacts`. - Fix `decodeLnInvoice`, which currently calls `decodeInvoice` without an import/provider. - [ ] Fix environment typing in `src/consts/env.ts`. - TypeScript cannot resolve the `expo-constants` import from the root dependency graph. - Add declarations or remove direct global references for `__TEST__` and `jest`. - [ ] Fix i18n key typing errors. - `src/components/MintSelectionSheet.tsx` has a union key call for `"selectMint" | "selectMints"` that does not satisfy the typed `t` overload. - `src/screens/Payment/Processing.tsx` has a similar dynamic key issue for processing status strings. ## Parser/payment follow-ups - [ ] Add a QR chooser for unified requests with multiple supported candidates. - Current QR policy chooses by priority. - A chooser is better when a unified request contains both a Cashu payment request and a Lightning invoice. - [ ] Implement Cashu payment request execution from QR. - QR currently recognizes `cashuPaymentRequest` candidates but shows an unsupported prompt. - NFC already extracts and executes Cashu payment requests through `manager.paymentRequests`. - [ ] Add focused parser coverage once a test runner exists. - Direct Cashu token. - Direct Lightning invoice. - Lightning address. - LNURL. - Direct `creq...`. - `bitcoin:` with address plus `lightning=...`. - `bitcoin:` with `creq=...`. - `bitcoin:` with multiple supported fallbacks. ## Lower-priority cleanup - [ ] Reduce noisy debug logging in `src/shim.ts`. - It logs crypto polyfill setup details on startup. - [ ] Review `src/screens/Payment/MeltInput.tsx` for extraction opportunities. - The file is large and still owns request parsing, LNURL amount flow, mint selection, operation preparation, confirmation, cancellation, and success routing. - Do this after typecheck is cleaner, so behavior changes are easier to validate. - [ ] Review broad `any` and modal backdrop types. - Several bottom-sheet components type backdrop props as `any`. - This is lower priority than the current typecheck blockers. ================================================ FILE: app.json ================================================ { "expo": { "name": "eNuts", "slug": "enuts", "version": "1.0.0", "orientation": "portrait", "icon": "./assets/app-icon-all.png", "userInterfaceStyle": "automatic", "newArchEnabled": true, "splash": { "image": "./assets/splash.png", "resizeMode": "contain", "backgroundColor": "#5DB075" }, "ios": { "supportsTablet": true, "bundleIdentifier": "com.cypherbase.eNuts", "entitlements": { "com.apple.developer.nfc.readersession.formats": ["TAG"] }, "infoPlist": { "ITSAppUsesNonExemptEncryption": false } }, "android": { "adaptiveIcon": { "foregroundImage": "./assets/app-icon-android-adaptive-foreground.png", "backgroundImage": "./assets/app-icon-android-adaptive-background.png", "backgroundColor": "#ffffff" }, "edgeToEdgeEnabled": true, "permissions": ["android.permission.CAMERA", "android.permission.NFC"], "package": "com.cypherbase.eNuts" }, "plugins": [ "expo-sqlite", "expo-secure-store", "expo-localization", [ "expo-camera", { "cameraPermission": "Allow $(PRODUCT_NAME) to access your camera to scan QR codes", "microphonePermission": "Allow $(PRODUCT_NAME) to access your microphone for video recording", "recordAudioAndroid": false } ], [ "react-native-nfc-manager", { "selectIdentifiers": ["D2760000850101", "D2760000850100"], "includeNdefEntitlement": false } ] ], "extra": { "eas": { "projectId": "3cc1ef51-5bef-42a4-8b6b-a1bb802d46a4" } }, "owner": "egge" } } ================================================ FILE: assets/lottie/confetti.json ================================================ { "v": "5.5.6", "fr": 60, "ip": 0, "op": 300, "w": 609, "h": 812, "nm": "lottie (mobile)", "ddd": 0, "assets": [ { "id": "comp_0", "layers": [ { "ddd": 0, "ind": 1, "ty": 0, "nm": "_small-side", "refId": "comp_1", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [218, 320, 0], "ix": 2 }, "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } }, "ao": 0, "w": 800, "h": 800, "ip": 15, "op": 234, "st": 15, "bm": 0 } ] }, { "id": "comp_1", "layers": [ { "ddd": 0, "ind": 1, "ty": 4, "nm": "streamer b", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 166, "ix": 10 }, "p": { "a": 0, "k": [554, 664, 0], "ix": 2 }, "a": { "a": 0, "k": [-157, -245, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-1.685, -13.314], [0, -14.907], [0, -15.206], [0, -14.907], [0, -14.907], [0, -15.206], [1.754, -14.206], [-3.934, -9.465] ], "o": [ [-3.895, 8.562], [1.872, 14.789], [0, 15.206], [0, 14.907], [0, 14.907], [0, 15.206], [0, 14.314], [-1.803, 14.605], [0, 0] ], "v": [ [-156.5, -406], [-166.5, -367], [-146.5, -327], [-166.5, -286], [-146.5, -246], [-166.5, -206], [-146.5, -165], [-166.5, -127], [-156.5, -84] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 9, "s": [4] }, { "t": 57, "s": [0.5] } ], "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 14, "s": [0] }, { "t": 57, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 9, "s": [0] }, { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 14, "s": [35] }, { "t": 57, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 9, "op": 58, "st": 9, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 4, "nm": "streamer a", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 167, "ix": 10 }, "p": { "a": 0, "k": [532, 582, 0], "ix": 2 }, "a": { "a": 0, "k": [-157, -245, 0], "ix": 1 }, "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-1.685, -13.314], [0, -14.907], [0, -15.206], [0, -14.907], [0, -14.907], [0, -15.206], [1.754, -14.206], [-3.934, -9.465] ], "o": [ [-3.895, 8.562], [1.872, 14.789], [0, 15.206], [0, 14.907], [0, 14.907], [0, 15.206], [0, 14.314], [-1.803, 14.605], [0, 0] ], "v": [ [-156.5, -406], [-166.5, -367], [-146.5, -327], [-166.5, -286], [-146.5, -246], [-166.5, -206], [-146.5, -165], [-166.5, -127], [-156.5, -84] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 5, "s": [4] }, { "t": 48, "s": [0.5] } ], "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 10, "s": [0] }, { "t": 48, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 5, "s": [0] }, { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 10, "s": [35] }, { "t": 48, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 5, "op": 49, "st": 5, "bm": 0 }, { "ddd": 0, "ind": 3, "ty": 4, "nm": "circle a", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 1, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 29, "s": [321.019] }, { "t": 158, "s": [1800] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 1, "s": [599.5, 838, 0], "to": [-30, -106.667, 0], "ti": [46.667, 0, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 29, "s": [419.5, 198, 0], "to": [-46.667, 0, 0], "ti": [0, 0, 0] }, { "t": 158, "s": [319.5, 838, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, "t": 1, "s": [50, 100, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 29, "s": [100, 100, 100] }, { "t": 128, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "nm": "Ellipse Path 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Ellipse 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 1, "op": 159, "st": 1, "bm": 0 }, { "ddd": 0, "ind": 4, "ty": 4, "nm": "circle b", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 3, "s": [0] }, { "t": 128, "s": [1440] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 3, "s": [599.5, 838, 0], "to": [-26.667, -93.333, 0], "ti": [66.667, 0, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 21, "s": [439.5, 278, 0], "to": [-66.667, 0, 0], "ti": [0, 0, 0] }, { "t": 128, "s": [199.5, 838, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, "t": 3, "s": [50, 100, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 21, "s": [100, 100, 100] }, { "t": 98, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "nm": "Ellipse Path 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Ellipse 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 3, "op": 129, "st": 3, "bm": 0 }, { "ddd": 0, "ind": 5, "ty": 4, "nm": "star a", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 1, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 31, "s": [343.949] }, { "t": 158, "s": [1800] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 1, "s": [596.087, 836.292, 0], "to": [-36.098, -100, 0], "ti": [52.765, 0, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 31, "s": [379.5, 236.292, 0], "to": [-52.765, 0, 0], "ti": [0, 0, 0] }, { "t": 158, "s": [279.5, 836.292, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, "t": 1, "s": [50, 100, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 31, "s": [100, 100, 100] }, { "t": 128, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "sr", "sy": 1, "d": 1, "pt": { "a": 0, "k": 5, "ix": 3 }, "p": { "a": 0, "k": [0, 0], "ix": 4 }, "r": { "a": 0, "k": 0, "ix": 5 }, "ir": { "a": 0, "k": 5, "ix": 6 }, "is": { "a": 0, "k": 0, "ix": 8 }, "or": { "a": 0, "k": 12, "ix": 7 }, "os": { "a": 0, "k": 0, "ix": 9 }, "ix": 1, "nm": "Polystar Path 1", "mn": "ADBE Vector Shape - Star", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Polystar 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 1, "op": 159, "st": 1, "bm": 0 }, { "ddd": 0, "ind": 6, "ty": 4, "nm": "star b", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 3, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 23, "s": [288] }, { "t": 128, "s": [1800] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 3, "s": [596.087, 836.292, 0], "to": [-39.431, -113.333, 0], "ti": [66.098, 1.667, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 23, "s": [359.5, 156.292, 0], "to": [-66.098, -1.667, 0], "ti": [0, 0, 0] }, { "t": 128, "s": [199.5, 826.292, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, "t": 3, "s": [50, 100, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 23, "s": [100, 100, 100] }, { "t": 98, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "sr", "sy": 1, "d": 1, "pt": { "a": 0, "k": 5, "ix": 3 }, "p": { "a": 0, "k": [0, 0], "ix": 4 }, "r": { "a": 0, "k": 0, "ix": 5 }, "ir": { "a": 0, "k": 5, "ix": 6 }, "is": { "a": 0, "k": 0, "ix": 8 }, "or": { "a": 0, "k": 12, "ix": 7 }, "os": { "a": 0, "k": 0, "ix": 9 }, "ix": 1, "nm": "Polystar Path 1", "mn": "ADBE Vector Shape - Star", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0, 0.5215686274509804, 0.27058823529411763, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Polystar 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 3, "op": 129, "st": 3, "bm": 0 }, { "ddd": 0, "ind": 7, "ty": 4, "nm": "rec a", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 0, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 33, "s": [381.468] }, { "t": 218, "s": [2520] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 0, "s": [599.5, 842, 0], "to": [-23.333, -100, 0], "ti": [41.333, 1.333, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 33, "s": [459.5, 242, 0], "to": [-41.333, -1.333, 0], "ti": [0, 0, 0] }, { "t": 218, "s": [351.5, 834, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, "t": 0, "s": [50, 100, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 33, "s": [100, 100, 100] }, { "t": 188, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 8], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 219, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 8, "ty": 4, "nm": "rec b", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 2, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 25, "s": [262.857] }, { "t": 191, "s": [2160] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 2, "s": [599.5, 842, 0], "to": [-23.333, -113.333, 0], "ti": [74, 5, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 25, "s": [459.5, 162, 0], "to": [-74, -5, 0], "ti": [0, 0, 0] }, { "t": 191, "s": [155.5, 812, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, "t": 2, "s": [50, 100, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 25, "s": [100, 100, 100] }, { "t": 161, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 8], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 2, "op": 192, "st": 2, "bm": 0 }, { "ddd": 0, "ind": 9, "ty": 4, "nm": "square a", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 0, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 35, "s": [462.385] }, { "t": 218, "s": [2880] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 0, "s": [599.5, 838, 0], "to": [-43.333, -123.333, 0], "ti": [60, 0, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 35, "s": [339.5, 98, 0], "to": [-60, 0, 0], "ti": [0, 0, 0] }, { "t": 218, "s": [239.5, 838, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, "t": 0, "s": [50, 100, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 35, "s": [100, 100, 100] }, { "t": 188, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 219, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 10, "ty": 4, "nm": "square b", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 2, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 27, "s": [285.714] }, { "t": 191, "s": [2160] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 2, "s": [599.5, 838, 0], "to": [-30, -120, 0], "ti": [75, 3.333, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 27, "s": [419.5, 118, 0], "to": [-75, -3.333, 0], "ti": [0, 0, 0] }, { "t": 191, "s": [149.5, 818, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0, 0] }, "t": 2, "s": [50, 100, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 27, "s": [100, 100, 100] }, { "t": 161, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 2, "op": 192, "st": 2, "bm": 0 }, { "ddd": 0, "ind": 11, "ty": 4, "nm": "streamer b 2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 171, "ix": 10 }, "p": { "a": 0, "k": [543, 427, 0], "ix": 2 }, "a": { "a": 0, "k": [-157, -245, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-1.685, -13.314], [0, -14.907], [0, -15.206], [0, -14.907], [0, -14.907], [0, -15.206], [1.754, -14.206], [-3.934, -9.465] ], "o": [ [-3.895, 8.562], [1.872, 14.789], [0, 15.206], [0, 14.907], [0, 14.907], [0, 15.206], [0, 14.314], [-1.803, 14.605], [0, 0] ], "v": [ [-156.5, -406], [-166.5, -367], [-146.5, -327], [-166.5, -286], [-146.5, -246], [-166.5, -206], [-146.5, -165], [-166.5, -127], [-156.5, -84] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 13, "s": [4] }, { "t": 61, "s": [0.5] } ], "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 18, "s": [0] }, { "t": 61, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 13, "s": [0] }, { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 18, "s": [35] }, { "t": 61, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 13, "op": 62, "st": 13, "bm": 0 }, { "ddd": 0, "ind": 12, "ty": 4, "nm": "streamer a 2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 151, "ix": 10 }, "p": { "a": 0, "k": [454, 444, 0], "ix": 2 }, "a": { "a": 0, "k": [-157, -245, 0], "ix": 1 }, "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-1.685, -13.314], [0, -14.907], [0, -15.206], [0, -14.907], [0, -14.907], [0, -15.206], [1.754, -14.206], [-3.934, -9.465] ], "o": [ [-3.895, 8.562], [1.872, 14.789], [0, 15.206], [0, 14.907], [0, 14.907], [0, 15.206], [0, 14.314], [-1.803, 14.605], [0, 0] ], "v": [ [-156.5, -406], [-166.5, -367], [-146.5, -327], [-166.5, -286], [-146.5, -246], [-166.5, -206], [-146.5, -165], [-166.5, -127], [-156.5, -84] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 10, "s": [4] }, { "t": 53, "s": [0.5] } ], "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 15, "s": [0] }, { "t": 53, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 10, "s": [0] }, { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 15, "s": [35] }, { "t": 53, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 10, "op": 54, "st": 10, "bm": 0 }, { "ddd": 0, "ind": 13, "ty": 4, "nm": "circle a 2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 1, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 29, "s": [-371.368] }, { "t": 191, "s": [-2520] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 1, "s": [599.5, 838, 0], "to": [-53.333, -113.333, 0], "ti": [56.667, -3.333, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 29, "s": [279.5, 158, 0], "to": [-56.667, 3.333, 0], "ti": [0, 0, 0] }, { "t": 191, "s": [259.5, 858, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, "t": 1, "s": [100, 50, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 29, "s": [100, 100, 100] }, { "t": 161, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "nm": "Ellipse Path 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Ellipse 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 1, "op": 192, "st": 1, "bm": 0 }, { "ddd": 0, "ind": 14, "ty": 4, "nm": "circle b 2", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 3, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 21, "s": [-250.839] }, { "t": 158, "s": [-2160] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 3, "s": [599.5, 838, 0], "to": [-53.333, -100, 0], "ti": [63, -7, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 21, "s": [279.5, 238, 0], "to": [-63, 7, 0], "ti": [0, 0, 0] }, { "t": 158, "s": [221.5, 880, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, "t": 3, "s": [100, 50, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 21, "s": [100, 100, 100] }, { "t": 128, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "nm": "Ellipse Path 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0, 0.5215686274509804, 0.27058823529411763, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Ellipse 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 3, "op": 159, "st": 3, "bm": 0 }, { "ddd": 0, "ind": 15, "ty": 4, "nm": "star a 2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 1, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 31, "s": [-397.895] }, { "t": 191, "s": [-2520] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 1, "s": [596.087, 836.292, 0], "to": [-9.431, -113.333, 0], "ti": [42.765, -3.333, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 31, "s": [539.5, 156.292, 0], "to": [-42.765, 3.333, 0], "ti": [0, 0, 0] }, { "t": 191, "s": [339.5, 856.292, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, "t": 1, "s": [100, 50, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 31, "s": [100, 100, 100] }, { "t": 161, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "sr", "sy": 1, "d": 1, "pt": { "a": 0, "k": 5, "ix": 3 }, "p": { "a": 0, "k": [0, 0], "ix": 4 }, "r": { "a": 0, "k": 0, "ix": 5 }, "ir": { "a": 0, "k": 5, "ix": 6 }, "is": { "a": 0, "k": 0, "ix": 8 }, "or": { "a": 0, "k": 12, "ix": 7 }, "os": { "a": 0, "k": 0, "ix": 9 }, "ix": 1, "nm": "Polystar Path 1", "mn": "ADBE Vector Shape - Star", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Polystar 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 1, "op": 192, "st": 1, "bm": 0 }, { "ddd": 0, "ind": 16, "ty": 4, "nm": "star b 2", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 3, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 23, "s": [-278.71] }, { "t": 158, "s": [-2160] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 3, "s": [596.087, 836.292, 0], "to": [-12.765, -96.667, 0], "ti": [52.765, -3.333, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 23, "s": [519.5, 256.292, 0], "to": [-52.765, 3.333, 0], "ti": [0, 0, 0] }, { "t": 158, "s": [279.5, 856.292, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, "t": 3, "s": [100, 50, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 23, "s": [100, 100, 100] }, { "t": 128, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "sr", "sy": 1, "d": 1, "pt": { "a": 0, "k": 5, "ix": 3 }, "p": { "a": 0, "k": [0, 0], "ix": 4 }, "r": { "a": 0, "k": 0, "ix": 5 }, "ir": { "a": 0, "k": 5, "ix": 6 }, "is": { "a": 0, "k": 0, "ix": 8 }, "or": { "a": 0, "k": 12, "ix": 7 }, "os": { "a": 0, "k": 0, "ix": 9 }, "ix": 1, "nm": "Polystar Path 1", "mn": "ADBE Vector Shape - Star", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Polystar 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 3, "op": 159, "st": 3, "bm": 0 }, { "ddd": 0, "ind": 17, "ty": 4, "nm": "rec a 2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 0, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 33, "s": [-556.875] }, { "t": 128, "s": [-2160] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 0, "s": [599.5, 842, 0], "to": [-16.667, -120, 0], "ti": [66.667, 0, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 33, "s": [499.5, 122, 0], "to": [-66.667, 0, 0], "ti": [0, 0, 0] }, { "t": 128, "s": [199.5, 842, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, "t": 0, "s": [100, 50, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.833, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 33, "s": [100, 100, 100] }, { "t": 98, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 8], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 129, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 18, "ty": 4, "nm": "rec b 2", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 2, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 25, "s": [-306.667] }, { "t": 218, "s": [-2880] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 2, "s": [599.5, 842, 0], "to": [-22.62, -109.87, 0], "ti": [2.877, -2.055, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 25, "s": [339.5, 262, 0], "to": [-51.333, 36.667, 0], "ti": [0, 0, 0] }, { "t": 218, "s": [219.5, 862, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, "t": 2, "s": [100, 50, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 25, "s": [100, 100, 100] }, { "t": 188, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 8], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 2, "op": 219, "st": 2, "bm": 0 }, { "ddd": 0, "ind": 19, "ty": 4, "nm": "square a 2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 0, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 35, "s": [-590.625] }, { "t": 128, "s": [-2160] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 0, "s": [599.5, 838, 0], "to": [-20, -90, 0], "ti": [36.667, 0, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 35, "s": [479.5, 298, 0], "to": [-36.667, 0, 0], "ti": [0, 0, 0] }, { "t": 128, "s": [379.5, 838, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, "t": 0, "s": [100, 50, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 35, "s": [100, 100, 100] }, { "t": 98, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 129, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 20, "ty": 4, "nm": "square b 2", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 2, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.333], "y": [0] }, "t": 27, "s": [-333.333] }, { "t": 218, "s": [-2880] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 2, "s": [599.5, 838, 0], "to": [-10, -103.333, 0], "ti": [50, 0, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 27, "s": [539.5, 218, 0], "to": [-50, 0, 0], "ti": [0, 0, 0] }, { "t": 218, "s": [299.5, 838, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.167, 0] }, "t": 2, "s": [100, 50, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 27, "s": [100, 100, 100] }, { "t": 188, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 2, "op": 219, "st": 2, "bm": 0 } ] }, { "id": "comp_2", "layers": [ { "ddd": 0, "ind": 1, "ty": 0, "nm": "_small-side", "refId": "comp_1", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [260, 320, 0], "ix": 2 }, "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "w": 800, "h": 800, "ip": 0, "op": 219, "st": 0, "bm": 0 } ] }, { "id": "comp_3", "layers": [ { "ddd": 0, "ind": 1, "ty": 0, "nm": "left", "refId": "comp_4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [400, 400, 0], "ix": 2 }, "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "w": 800, "h": 800, "ip": 13, "op": 313, "st": 13, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 0, "nm": "right", "refId": "comp_4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [400, 400, 0], "ix": 2 }, "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } }, "ao": 0, "w": 800, "h": 800, "ip": 30, "op": 330, "st": 30, "bm": 0 } ] }, { "id": "comp_4", "layers": [ { "ddd": 0, "ind": 1, "ty": 4, "nm": "streamer a 4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 14, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 13, "s": [219.178, -190.096, 0], "to": [-95.333, 426.667, 0], "ti": [167.333, -560.667, 0] }, { "t": 173, "s": [179.178, 989.904, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [-157, -245, 0], "ix": 1 }, "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-1.685, -13.314], [0, -14.907], [0, -15.206], [0, -14.907], [0, -14.907], [0, -15.206], [1.754, -14.206], [-3.934, -9.465] ], "o": [ [-3.895, 8.562], [1.872, 14.789], [0, 15.206], [0, 14.907], [0, 14.907], [0, 15.206], [0, 14.314], [-1.803, 14.605], [0, 0] ], "v": [ [-156.5, -406], [-166.5, -367], [-146.5, -327], [-166.5, -286], [-146.5, -246], [-166.5, -206], [-146.5, -165], [-166.5, -127], [-156.5, -84] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 13, "s": [4] }, { "t": 176, "s": [0.5] } ], "ix": 5 }, "lc": 1, "lj": 1, "ml": 4, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 18, "s": [0] }, { "t": 176, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 13, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 18, "s": [40] }, { "t": 176, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 13, "op": 174, "st": 13, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 4, "nm": "streamer b 4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": -1.458, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 5, "s": [269.863, -175.455, 0], "to": [-110, 415.333, 0], "ti": [216, -599.333, 0] }, { "t": 173, "s": [69.863, 984.545, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [-157, -245, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-1.685, -13.314], [0, -14.907], [0, -15.206], [0, -14.907], [0, -14.907], [0, -15.206], [1.754, -14.206], [-3.934, -9.465] ], "o": [ [-3.895, 8.562], [1.872, 14.789], [0, 15.206], [0, 14.907], [0, 14.907], [0, 15.206], [0, 14.314], [-1.803, 14.605], [0, 0] ], "v": [ [-156.5, -406], [-166.5, -367], [-146.5, -327], [-166.5, -286], [-146.5, -246], [-166.5, -206], [-146.5, -165], [-166.5, -127], [-156.5, -84] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 5, "s": [4] }, { "t": 173, "s": [0.5] } ], "ix": 5 }, "lc": 1, "lj": 1, "ml": 4, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 10, "s": [0] }, { "t": 173, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 5, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 10, "s": [40] }, { "t": 173, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 5, "op": 174, "st": 5, "bm": 0 }, { "ddd": 0, "ind": 3, "ty": 4, "nm": "circle a 4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 8, "s": [0] }, { "t": 155, "s": [1800] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 8, "s": [325.643, -26.292, 0], "to": [-101.333, 75.667, 0], "ti": [15.333, -507.667, 0] }, { "t": 155, "s": [125.643, 835.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 8, "s": [50, 100, 100] }, { "t": 155, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "nm": "Ellipse Path 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Ellipse 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 8, "op": 156, "st": -7, "bm": 0 }, { "ddd": 0, "ind": 4, "ty": 4, "nm": "circle b 4", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 2, "s": [0] }, { "t": 215, "s": [2520] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 2, "s": [619.5, -26.292, 0], "to": [-138, 77.667, 0], "ti": [-2, -497.667, 0] }, { "t": 215, "s": [259.5, 835.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 2, "s": [50, 100, 100] }, { "t": 215, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "nm": "Ellipse Path 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Ellipse 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 2, "op": 216, "st": -13, "bm": 0 }, { "ddd": 0, "ind": 5, "ty": 4, "nm": "star a 4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 6, "s": [0] }, { "t": 245, "s": [2880] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 6, "s": [376.929, -28, 0], "to": [-213.333, 157.667, 0], "ti": [173.333, -127.667, 0] }, { "t": 245, "s": [116.929, 834, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 6, "s": [50, 100, 100] }, { "t": 245, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "sr", "sy": 1, "d": 1, "pt": { "a": 0, "k": 5, "ix": 3 }, "p": { "a": 0, "k": [0, 0], "ix": 4 }, "r": { "a": 0, "k": 0, "ix": 5 }, "ir": { "a": 0, "k": 5, "ix": 6 }, "is": { "a": 0, "k": 0, "ix": 8 }, "or": { "a": 0, "k": 12, "ix": 7 }, "os": { "a": 0, "k": 0, "ix": 9 }, "ix": 1, "nm": "Polystar Path 1", "mn": "ADBE Vector Shape - Star", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Polystar 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 6, "op": 246, "st": -9, "bm": 0 }, { "ddd": 0, "ind": 6, "ty": 4, "nm": "star b 4", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 2, "s": [0] }, { "t": 125, "s": [1800] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 2, "s": [171.786, -28, 0], "to": [0, 0, 0], "ti": [-161.333, -275.667, 0] }, { "t": 125, "s": [251.786, 834, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 2, "s": [50, 100, 100] }, { "t": 125, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "sr", "sy": 1, "d": 1, "pt": { "a": 0, "k": 5, "ix": 3 }, "p": { "a": 0, "k": [0, 0], "ix": 4 }, "r": { "a": 0, "k": 0, "ix": 5 }, "ir": { "a": 0, "k": 5, "ix": 6 }, "is": { "a": 0, "k": 0, "ix": 8 }, "or": { "a": 0, "k": 12, "ix": 7 }, "os": { "a": 0, "k": 0, "ix": 9 }, "ix": 1, "nm": "Polystar Path 1", "mn": "ADBE Vector Shape - Star", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0, 0.5215686274509804, 0.27058823529411763, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Polystar 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 2, "op": 126, "st": -13, "bm": 0 }, { "ddd": 0, "ind": 7, "ty": 4, "nm": "rec a 4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 4, "s": [0] }, { "t": 185, "s": [2520] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 4, "s": [428.214, -22.292, 0], "to": [-167.333, 119.667, 0], "ti": [-130.667, -315.667, 0] }, { "t": 185, "s": [228.214, 839.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 4, "s": [50, 100, 100] }, { "t": 185, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 8], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 4, "op": 186, "st": -11, "bm": 0 }, { "ddd": 0, "ind": 8, "ty": 4, "nm": "rec b 4", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 6, "s": [0] }, { "t": 245, "s": [2880] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 6, "s": [223.071, -22.292, 0], "to": [0, 0, 0], "ti": [-92.571, -383.708, 0] }, { "t": 245, "s": [223.071, 839.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 6, "s": [50, 100, 100] }, { "t": 245, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 8], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 6, "op": 246, "st": -9, "bm": 0 }, { "ddd": 0, "ind": 9, "ty": 4, "nm": "square a 4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 4, "s": [0] }, { "t": 217, "s": [2520] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 4, "s": [120.5, -26.292, 0], "to": [13, 430.305, 0], "ti": [52.221, -418.892, 0] }, { "t": 217, "s": [198.5, 833.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 4, "s": [50, 100, 100] }, { "t": 217, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 4, "op": 218, "st": -11, "bm": 0 }, { "ddd": 0, "ind": 10, "ty": 4, "nm": "square b 4", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 8, "s": [0] }, { "t": 215, "s": [2520] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 8, "s": [274.357, -26.292, 0], "to": [157.333, 415.667, 0], "ti": [22.667, -253.667, 0] }, { "t": 215, "s": [114.357, 835.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 8, "s": [50, 100, 100] }, { "t": 215, "s": [100, 50, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 8, "op": 216, "st": -7, "bm": 0 }, { "ddd": 0, "ind": 11, "ty": 4, "nm": "streamer a 3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 3, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 0, "s": [275.178, -173.096, 0], "to": [-87.333, 413.333, 0], "ti": [177.333, -643.333, 0] }, { "t": 185, "s": [219.178, 974.904, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [-157, -245, 0], "ix": 1 }, "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-1.685, -13.314], [0, -14.907], [0, -15.206], [0, -14.907], [0, -14.907], [0, -15.206], [1.754, -14.206], [-3.934, -9.465] ], "o": [ [-3.895, 8.562], [1.872, 14.789], [0, 15.206], [0, 14.907], [0, 14.907], [0, 15.206], [0, 14.314], [-1.803, 14.605], [0, 0] ], "v": [ [-156.5, -406], [-166.5, -367], [-146.5, -327], [-166.5, -286], [-146.5, -246], [-166.5, -206], [-146.5, -165], [-166.5, -127], [-156.5, -84] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 0, "s": [4] }, { "t": 177, "s": [0.5] } ], "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 5, "s": [0] }, { "t": 177, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 0, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 5, "s": [40] }, { "t": 177, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 0, "op": 186, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 12, "ty": 4, "nm": "streamer b 3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 9, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 11, "s": [199.863, 74.545, 0], "to": [-13.363, 405.455, 0], "ti": [179.333, -430.667, 0] }, { "t": 217, "s": [139.863, 834.545, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [-157, -245, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-1.685, -13.314], [0, -14.907], [0, -15.206], [0, -14.907], [0, -14.907], [0, -15.206], [1.754, -14.206], [-3.934, -9.465] ], "o": [ [-3.895, 8.562], [1.872, 14.789], [0, 15.206], [0, 14.907], [0, 14.907], [0, 15.206], [0, 14.314], [-1.803, 14.605], [0, 0] ], "v": [ [-156.5, -406], [-166.5, -367], [-146.5, -327], [-166.5, -286], [-146.5, -246], [-166.5, -206], [-146.5, -165], [-166.5, -127], [-156.5, -84] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 11, "s": [4] }, { "t": 199, "s": [0.5] } ], "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 16, "s": [0] }, { "t": 199, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 11, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 16, "s": [40] }, { "t": 199, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 11, "op": 218, "st": 11, "bm": 0 }, { "ddd": 0, "ind": 13, "ty": 4, "nm": "circle a 3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 2, "s": [0] }, { "t": 125, "s": [-1800] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 2, "s": [365.643, -26.292, 0], "to": [-101.333, 75.667, 0], "ti": [15.333, -507.667, 0] }, { "t": 125, "s": [165.643, 835.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 2, "s": [100, 50, 100] }, { "t": 125, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "nm": "Ellipse Path 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Ellipse 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 2, "op": 126, "st": -13, "bm": 0 }, { "ddd": 0, "ind": 14, "ty": 4, "nm": "circle b 3", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 8, "s": [0] }, { "t": 245, "s": [-2880] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 8, "s": [519.5, -26.292, 0], "to": [-138, 77.667, 0], "ti": [-2, -497.667, 0] }, { "t": 245, "s": [159.5, 835.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 8, "s": [100, 50, 100] }, { "t": 245, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "d": 1, "ty": "el", "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "nm": "Ellipse Path 1", "mn": "ADBE Vector Shape - Ellipse", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0, 0.5215686274509804, 0.27058823529411763, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Ellipse 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 8, "op": 246, "st": -7, "bm": 0 }, { "ddd": 0, "ind": 15, "ty": 4, "nm": "star a 3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 6, "s": [0] }, { "t": 245, "s": [-2880] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 6, "s": [416.929, -28, 0], "to": [-213.333, 157.667, 0], "ti": [173.333, -127.667, 0] }, { "t": 245, "s": [156.929, 834, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 6, "s": [100, 50, 100] }, { "t": 245, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "sr", "sy": 1, "d": 1, "pt": { "a": 0, "k": 5, "ix": 3 }, "p": { "a": 0, "k": [0, 0], "ix": 4 }, "r": { "a": 0, "k": 0, "ix": 5 }, "ir": { "a": 0, "k": 5, "ix": 6 }, "is": { "a": 0, "k": 0, "ix": 8 }, "or": { "a": 0, "k": 12, "ix": 7 }, "os": { "a": 0, "k": 0, "ix": 9 }, "ix": 1, "nm": "Polystar Path 1", "mn": "ADBE Vector Shape - Star", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Polystar 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 6, "op": 246, "st": -9, "bm": 0 }, { "ddd": 0, "ind": 16, "ty": 4, "nm": "star b 3", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 8, "s": [0] }, { "t": 155, "s": [-2160] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 8, "s": [211.786, -28, 0], "to": [0, 0, 0], "ti": [-161.333, -275.667, 0] }, { "t": 155, "s": [291.786, 834, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 8, "s": [100, 50, 100] }, { "t": 155, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "sr", "sy": 1, "d": 1, "pt": { "a": 0, "k": 5, "ix": 3 }, "p": { "a": 0, "k": [0, 0], "ix": 4 }, "r": { "a": 0, "k": 0, "ix": 5 }, "ir": { "a": 0, "k": 5, "ix": 6 }, "is": { "a": 0, "k": 0, "ix": 8 }, "or": { "a": 0, "k": 12, "ix": 7 }, "os": { "a": 0, "k": 0, "ix": 9 }, "ix": 1, "nm": "Polystar Path 1", "mn": "ADBE Vector Shape - Star", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Polystar 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 8, "op": 156, "st": -7, "bm": 0 }, { "ddd": 0, "ind": 17, "ty": 4, "nm": "rec a 3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 4, "s": [0] }, { "t": 185, "s": [-2160] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 4, "s": [468.214, -22.292, 0], "to": [-167.333, 119.667, 0], "ti": [-130.667, -315.667, 0] }, { "t": 185, "s": [268.214, 839.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 4, "s": [100, 50, 100] }, { "t": 185, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 8], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.2627450980392157, 0.2, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 4, "op": 186, "st": -11, "bm": 0 }, { "ddd": 0, "ind": 18, "ty": 4, "nm": "rec b 3", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 6, "s": [0] }, { "t": 245, "s": [-2880] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 6, "s": [263.071, -22.292, 0], "to": [0, 143.667, 0], "ti": [-114.571, -267.708, 0] }, { "t": 245, "s": [263.071, 839.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 6, "s": [100, 50, 100] }, { "t": 245, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 8], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 6, "op": 246, "st": -9, "bm": 0 }, { "ddd": 0, "ind": 19, "ty": 4, "nm": "square a 3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 2, "s": [0] }, { "t": 217, "s": [-2520] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 2, "s": [160.5, -26.292, 0], "to": [13, 430.305, 0], "ti": [52.221, -418.892, 0] }, { "t": 217, "s": [238.5, 833.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 2, "s": [100, 50, 100] }, { "t": 217, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.12156862745098039, 0.8431372549019608, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 2, "op": 218, "st": -13, "bm": 0 }, { "ddd": 0, "ind": 20, "ty": 4, "nm": "square b 3", "sr": 1, "ks": { "o": { "a": 0, "k": 50, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 4, "s": [0] }, { "t": 185, "s": [-2160] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 4, "s": [314.357, -26.292, 0], "to": [157.333, 415.667, 0], "ti": [22.667, -253.667, 0] }, { "t": 185, "s": [154.357, 835.708, 0] } ], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 4, "s": [100, 50, 100] }, { "t": 185, "s": [50, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ty": "rc", "d": 1, "s": { "a": 0, "k": [16, 16], "ix": 2 }, "p": { "a": 0, "k": [0, 0], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 4 }, "nm": "Rectangle Path 1", "mn": "ADBE Vector Shape - Rect", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.12156862745098039, 0.5647058823529412, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Rectangle 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 4, "op": 186, "st": -11, "bm": 0 } ] } ], "layers": [ { "ddd": 0, "ind": 1, "ty": 0, "nm": "cannon (small - left)", "refId": "comp_0", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [76, 451.99999999999994, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 360, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "w": 480, "h": 720, "ip": 0, "op": 300, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 0, "nm": "cannon (small - right)", "refId": "comp_2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [533, 451.99999999999994, 0], "ix": 2 }, "a": { "a": 0, "k": [479.994, 360, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "w": 480, "h": 720, "ip": 0, "op": 300, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 3, "ty": 0, "nm": "cannon (small - top)", "refId": "comp_3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [304, 408, 0], "ix": 2 }, "a": { "a": 0, "k": [400, 400, 0], "ix": 1 }, "s": { "a": 0, "k": [102, 102, 100], "ix": 6 } }, "ao": 0, "w": 800, "h": 800, "ip": 0, "op": 300, "st": 0, "bm": 0 } ], "markers": [] } ================================================ FILE: assets/lottie/success.json ================================================ { "v": "5.7.1", "fr": 30, "ip": 0, "op": 60, "w": 300, "h": 300, "nm": "Comp 1", "ddd": 0, "assets": [], "layers": [ { "ddd": 0, "ind": 1, "ty": 4, "nm": "4", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [151, 151, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-22.5, -7.5], [0, 0] ], "o": [ [0, 0], [22.5, 7.5], [0, 0] ], "v": [ [61, 78.5], [78, 100.5], [94, 115.5] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.12941176470588237, 0.19607843137254902, 0.3843137254901961, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 5, "ix": 5 }, "lc": 2, "lj": 1, "ml": 4, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 28.254, "s": [0] }, { "t": 51, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 17, "s": [0] }, { "t": 46.2109375, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 17, "op": 617, "st": 17, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 4, "nm": "3", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 203, "ix": 10 }, "p": { "a": 0, "k": [251.408, 59.449, 0], "ix": 2 }, "a": { "a": 0, "k": [-103.936, 89.696, 0], "ix": 1 }, "s": { "a": 0, "k": [91.456, 89.381, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [29.459, 25.084], [5, -25.75], [5.75, -0.75] ], "o": [ [0, 0], [-25.25, -21.5], [-5.515, 28.405], [-5.75, 0.75] ], "v": [ [-75, 68.75], [-107.25, 86.5], [-94, 84], [-128.75, 113] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [1, 0.713725490196, 0.211764720842, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 5, "ix": 5 }, "lc": 2, "lj": 1, "ml": 4, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 28.254, "s": [0] }, { "t": 51, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 17, "s": [0] }, { "t": 46.2109375, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 17, "op": 617, "st": 17, "bm": 0 }, { "ddd": 0, "ind": 3, "ty": 4, "nm": "2", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [-21, 347, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [20.5, 4.5], [0, 0], [18.25, 9.25], [3.5, -3.25] ], "o": [ [0, 0], [-20.5, -4.5], [0, 0], [-18.25, -9.25], [-3.5, 3.25] ], "v": [ [90.75, -122.25], [83.5, -110.5], [81.25, -97.25], [69.75, -93.25], [61, -75.75] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.745098039216, 0.643137254902, 1, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 5, "ix": 5 }, "lc": 2, "lj": 1, "ml": 4, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 28.254, "s": [0] }, { "t": 51, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 17, "s": [0] }, { "t": 46.2109375, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 17, "op": 617, "st": 17, "bm": 0 }, { "ddd": 0, "ind": 4, "ty": 4, "nm": "1", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [147, 146, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, "s": { "a": 0, "k": [109.756, 101.856, 100], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [33.75, 1] ], "o": [ [0, 0], [-33.75, -1] ], "v": [ [-57.75, -75.75], [-90.75, -107.5] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [1, 0.431372578939, 0.513725490196, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 5, "ix": 5 }, "lc": 2, "lj": 1, "ml": 4, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [-1.5, -0.25], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Shape 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 28.254, "s": [0] }, { "t": 51, "s": [100] } ], "ix": 1 }, "e": { "a": 1, "k": [ { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 17, "s": [0] }, { "t": 46.2109375, "s": [100] } ], "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 17, "op": 617, "st": 17, "bm": 0 }, { "ddd": 0, "ind": 5, "ty": 4, "nm": "checkmark/success Outlines", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [150.06, 150.061, 0], "ix": 2 }, "a": { "a": 0, "k": [99, 99, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 0, "s": [100, 100, 100] }, { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, "t": 12, "s": [27, 27, 100] }, { "t": 21, "s": [100, 100, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0.831, 1.409], [0, 0], [-0.622, 2.004], [-1.844, 1.043], [-2.083, -0.474], [-1.215, -1.74], [0, 0], [-0.949, 0.537], [0, 0], [-2.041, -0.632], [-1.075, -1.826], [0.463, -2.047], [1.756, -1.181] ], "o": [ [-1.424, 0.805], [0, 0], [-0.93, -1.899], [0.622, -2.006], [1.844, -1.042], [2.084, 0.474], [0, 0], [0.553, 0.939], [0, 0], [1.921, -0.899], [2.042, 0.631], [1.076, 1.823], [-0.463, 2.047], [0, 0] ], "v": [ [-26.138, 30.587], [-30.199, 29.498], [-58.899, -19.189], [-59.378, -25.261], [-55.542, -30.001], [-49.433, -30.884], [-44.302, -27.441], [-23.618, 7.647], [-20.911, 8.371], [47.571, -30.344], [53.736, -30.76], [58.584, -26.94], [59.537, -20.918], [56.086, -15.898] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [99.943, 103.024], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [83.631, 83.631], "ix": 3 }, "r": { "a": 0, "k": -12.6, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-47.479, -12.722], [12.721, -47.478], [47.478, 12.722], [-12.723, 47.478] ], "o": [ [47.479, 12.722], [-12.723, 47.479], [-47.478, -12.723], [12.721, -47.479] ], "v": [ [23.036, -85.967], [85.969, 23.035], [-23.035, 85.967], [-85.966, -23.035] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 0, "s": [0.901960790157, 0.901960790157, 0.901960790157, 1] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 10, "s": [0.901960790157, 0.901960790157, 0.901960790157, 1] }, { "t": 29, "s": [0.262745112181, 0.823529422283, 0.588235318661, 1] } ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [98.939, 98.939], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 600, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 6, "ty": 4, "nm": "large-circles/success Outlines", "sr": 1, "ks": { "o": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 42, "s": [100] }, { "t": 52, "s": [2] } ], "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [148, 146, 0], "ix": 2 }, "a": { "a": 0, "k": [95.5, 98, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.009, 0.009, 0.333], "y": [1.621, 1.621, 0] }, "t": 17, "s": [62, 62, 100] }, { "t": 50, "s": [124, 124, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-6.209, 1.338], [-1.337, -6.209], [6.209, -1.337], [1.338, 6.209] ], "o": [ [6.208, -1.337], [1.338, 6.209], [-6.209, 1.338], [-1.337, -6.209] ], "v": [ [-2.421, -11.243], [11.242, -2.422], [2.421, 11.241], [-11.243, 2.421] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.745000023935, 0.642999985639, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [173.998, 145.423], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [71, 71], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-6.209, 1.337], [-1.338, -6.209], [6.209, -1.338], [1.338, 6.209] ], "o": [ [6.209, -1.338], [1.337, 6.209], [-6.209, 1.337], [-1.337, -6.208] ], "v": [ [-2.421, -11.242], [11.242, -2.422], [2.422, 11.242], [-11.243, 2.422] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.011764705882352941, 0.45098039215686275, 0.8901960784313725, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [63.997, 183.011], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [70, 70], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-6.209, 1.337], [-1.337, -6.208], [6.209, -1.337], [1.338, 6.209] ], "o": [ [6.209, -1.337], [1.338, 6.209], [-6.209, 1.338], [-1.337, -6.209] ], "v": [ [-2.421, -11.243], [11.242, -2.423], [2.421, 11.242], [-11.243, 2.421] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.713999968884, 0.211999990426, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [103.291, 12.83], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [70, 70], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-6.208, 1.337], [-1.337, -6.209], [6.209, -1.338], [1.338, 6.209] ], "o": [ [6.209, -1.337], [1.338, 6.209], [-6.209, 1.337], [-1.337, -6.209] ], "v": [ [-2.423, -11.242], [11.241, -2.422], [2.421, 11.242], [-11.243, 2.422] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.011764705882352941, 0.45098039215686275, 0.8901960784313725, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [178.004, 59.795], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [67, 67], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 2, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-6.209, 1.337], [-1.338, -6.208], [6.209, -1.337], [1.338, 6.209] ], "o": [ [6.209, -1.337], [1.337, 6.209], [-6.209, 1.338], [-1.337, -6.209] ], "v": [ [-2.421, -11.243], [11.243, -2.423], [2.422, 11.242], [-11.243, 2.421] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.430999995213, 0.513999968884, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [12.829, 84.352], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [68, 68], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 5", "np": 2, "cix": 2, "bm": 0, "ix": 5, "mn": "ADBE Vector Group", "hd": false } ], "ip": 17, "op": 617, "st": 17, "bm": 0 }, { "ddd": 0, "ind": 7, "ty": 4, "nm": "checkmark/success Outlines", "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [150.073, 150.073, 0], "ix": 2 }, "a": { "a": 0, "k": [99, 99, 0], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.203, 0.203, 0.667], "y": [0.507, 0.507, 1] }, "o": { "x": [0.915, 0.915, 0.333], "y": [0.651, 0.651, 0] }, "t": 50, "s": [93.357, 93.357, 100] }, { "t": 59, "s": [121.357, 121.357, 100] } ], "ix": 6 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0.831, 1.409], [0, 0], [-0.622, 2.004], [-1.844, 1.043], [-2.083, -0.474], [-1.215, -1.74], [0, 0], [-0.949, 0.537], [0, 0], [-2.041, -0.632], [-1.075, -1.826], [0.463, -2.047], [1.756, -1.181] ], "o": [ [-1.424, 0.805], [0, 0], [-0.93, -1.899], [0.622, -2.006], [1.844, -1.042], [2.084, 0.474], [0, 0], [0.553, 0.939], [0, 0], [1.921, -0.899], [2.042, 0.631], [1.076, 1.823], [-0.463, 2.047], [0, 0] ], "v": [ [-26.138, 30.587], [-30.199, 29.498], [-58.899, -19.189], [-59.378, -25.261], [-55.542, -30.001], [-49.433, -30.884], [-44.302, -27.441], [-23.618, 7.647], [-20.911, 8.371], [47.571, -30.344], [53.736, -30.76], [58.584, -26.94], [59.537, -20.918], [56.086, -15.898] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [98.943, 102.024], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-47.479, -12.722], [12.721, -47.478], [47.478, 12.722], [-12.723, 47.478] ], "o": [ [47.479, 12.722], [-12.723, 47.479], [-47.478, -12.723], [12.721, -47.479] ], "v": [ [23.036, -85.967], [85.969, 23.035], [-23.035, 85.967], [-85.966, -23.035] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.2235294117647059, 0.7843137254901961, 0.32941176470588235, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [98.939, 98.939], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false } ], "ip": 50, "op": 650, "st": 50, "bm": 0 } ], "markers": [] } ================================================ FILE: assets/translations/de.json ================================================ { "addrBook": { "addOwnNpub": "Füge dein NPUB hinzu", "favorite": "Favorisieren", "removeFav": "Favorit entfernen", "copyNpub": "NPUB kopieren", "npubCopied": "NPUB kopiert!", "receiverNoLnurl": "Empfänger hat keine LNURL", "noResults": "Keine Ergebnisse" }, "auth": { "confirmAction": "Bitte bestätigen Sie die Aktion.", "createPin": "PIN erstellen", "editPin": "PIN ändern", "pinMismatch": "PIN inkorrekt!", "pinSetup": "Sie können optional eine PIN erstellen um Ihre App zu schützen.", "pleaseConfirm": "Bitte bestätigen Sie Ihre PIN.", "pleaseConfirmNewPin": "Bitte bestätigen Sie Ihre neue PIN.", "pleaseEnter": "Bitte geben Sie Ihre PIN ein.", "pleaseNewPin": "Bitte geben Sie eine neue PIN ein.", "removePin": "PIN löschen", "welcome": "Willkommen", "welcomeBack": "Willkommen zurück!" }, "bottomNav": { "wallet": "Wallet", "contacts": "Kontakte" }, "common": { "confirmReset": "Wallet zurücksetzen", "copy": "Kopieren", "cycle": "Zyklus", "findMint": "Eine Mint finden", "manualCounterIncrease": "Zähler erhöhen", "manualCounterIncreaseHint": "Die Zähler erhöhen sich automatisch nach jeder Transaktion, aber in seltenen Fällen kann dies fehlschlagen, was zu Fehlern während des Wiederherstellungsprozesses führt. Das manuelle Erhöhen der Zähler kann den Zustand beheben.", "increaseCounterHint": "Sind Sie sicher, dass Sie die Zähler erhöhen möchten? Dies sollte nur geschehen, wenn Sie sicher sind, dass die Zähler nicht synchron sind.", "noMintForCounter": "Sie haben keine Mints, für die Sie die Zähler erhöhen könnten.", "counterIncreased": "Zähler um {{counterIncreased}} erhöht!", "doneSafety": "Fast fertig... Sicherheitsüberprüfung", "noProofsRestored": "Keine Beweise gefunden, um deine Wallet wiederherzustellen.", "restoreErr": "Ein Fehler ist aufgetreten bei der Wiederherstellung Ihrer Wallet.", "dontClose": "Bitte schließen Sie die App während des Vorgangs nicht.", "recoveryHint": "Schreiben oder fügen Sie Ihren 12-Wort-Mnemonic in der richtigen Reihenfolge ein, getrennt durch Leerzeichen.", "walletRecovery": "Wallet-Wiederherstellung", "walletRecoveryHint": "Verwenden Sie ein Seed-Backup, um Ihre Wallet wiederherzustellen.", "seedBackup": "Seed-Backup", "12WordMnemonic": "12-Wort Mnemonic", "secureWallet": "Sichere Wallet", "secureWalletHint": "Generieren Sie und notieren Sie ein Seed-Backup, um Ihre Wallet zu sichern.", "quickWallet": "Schnelle Wallet", "quickWalletHint": "Erstellen Sie sofort eine neue Wallet. Der Seed-Backup kann später generiert werden.", "skipSeedHint": "Sie können diesen Prozess überspringen und später ein Seed-Backup generieren.", "mnemonicHint": "Die Seed-Phrase wird nie wieder angezeigt. Schreiben Sie sie auf und teilen Sie sie niemals mit jemandem.", "confirmMnemonicErr": "Falsches Wort! Stellen Sie sicher, dass Sie Ihre Seed-Phrase korrekt und in der richtigen Reihenfolge aufschreiben.", "selectRestoreMint": "Bitte wählen Sie die Mint aus, die zur Wiederherstellung Ihrer Mittel verwendet wird.", "recoveringWallet": "Die Mint stellt Ihr Guthaben wieder her...", "seedEnabled": "Seed-Wiederherstellung aktiviert!", "confirmSeed": "Bestätigen Sie bitte Ihren Seed, indem Sie das richtige Wort eingeben.", "about": "Über", "aboutToLeaveTo": "Sie sind im Begriff die App zu verlassen", "accept": "Annehmen", "amount": "Betrag", "back": "Zurück", "backToDashboard": "Zurück zu Wallet", "balance": "Guthaben", "balanceAfterTX": "Mint Guthaben nach Zahlung", "balTooLow": "Nicht genug Guthaben", "bigQrMsg": "Die Datenmenge ist zu groß für einen QR-Code.", "calculateFeeEst": "Gebühr wird geschätzt", "cancel": "Abbrechen", "cashOut": "Auszahlen", "cashOutFromMint": "Mint Auszahlung", "change": "Rückgeld", "claimed": "beansprucht", "restored": "wiederhergestellt", "claimSuccess": "{{amount}} Sats erhalten:\n{{mintUrl}}\nMemo: {{memo}}", "claimToken": "Token in Anspruch nehmen", "clear": "Löschen", "clipboardInvalid": "Deine Zwischenablage beinhaltet einen invaliden Cashu Token", "coinSelection": "Coin-Auswahl", "confirm": "Bestätigen", "contact": "Kontakt", "mintDelErr": "Eine Mint mit verbleibendem Guthaben zu entfernen ist nicht möglich", "continue": "Fortfahren", "copied": "Kopiert", "shareInvoice": "Rechnung teilen", "copyToken": "Token kopieren", "createInvoice": "Rechnung erstellen", "createToken": "Token Erstellen", "createTokenErr": "Es konnte kein Cashu-Token erstellt werden. Bitte versuchen Sie es später noch einmal.", "eventError": "Ein Fehler ist aufgetreten während dem veröffentlichen der Nachricht.", "createViaLn": "Rechnung Erstellen", "darkMode": "Dunkler Modus", "lightMode": "Heller Modus", "autoMode": "Automatischer Modus", "dbErr": "Etwas ist schief gelaufen während der Initialisierung der Datenbank!", "deepLinkErr": "Link konnte nicht geöffnet werden", "default": "Standard", "delHistory": "Verlauf löschen", "factoryReset": "Wallet zurücksetzen", "delHistoryErr": "Verlauf konnte nicht gelöscht werden", "delHistoryQ": "Verlauf löschen?", "resetQ": "Wallet zurücksetzen?", "delHistoryTxt": "Die Daten können nachträglich nicht wiederhergestellt werden.", "display": "Anzeige", "disclaimer": "Haftungsausschluss", "restoreBattery": "Mindestens 20% Batterie.", "restoreBatteryHint": "Wir empfehlen, dass Sie mindestens 20% Batterie haben, bevor Sie den Wiederherstellungsprozess starten. Je nach Datenmenge kann der Prozess eine Weile dauern.", "restoreWifi": "Verwenden Sie Wi-Fi.", "restoreWifiHint": "Wir empfehlen, dass Sie für den Wiederherstellungsprozess eine stabile Wi-Fi-Verbindung verwenden, um Unterbrechungen zu vermeiden und eine schnelle und sichere Wiederherstellung zu gewährleisten.", "restoreForeground": "Halten Sie die App im Vordergrund.", "restoreForegroundHint": "Bitte halten Sie die App im Vordergrund und schließen Sie sie während des Wiederherstellungsprozesses nicht, um Unterbrechungen zu vermeiden.", "seedMigrationHint": "Der Seed gilt für alle Mints, allerdings können diese nur einzeln wiederhergestellt werden, notieren Sie also häufig verwendete Mint-URLs. Wenn Sie bereits Guthaben haben, jedoch noch kein Seed, erstellen Sie nach dem Generieren eines neuen Seeds einen Token und beanspruchen Sie ihn selbst mit der gewünschten Mint. Wiederholen Sie diesen Vorgang für jede Mint, die Sie sichern möchten.", "ecashPayment": "Ecash Zahlung", "english": "Englisch", "spanish": "Spanisch", "swahili": "Suaheli", "hungarian": "Ungarisch", "italian": "Italienisch", "russian": "Russisch", "thai": "Thailändisch", "chinese simplified": "Chinesisch (Vereinfacht)", "chinese traditional": "Chinesisch (Traditionell)", "enutsRandD": "eNuts Telegram", "estimatedFees": "Geschätzte Gebühr", "estimateFee": "Gebühren schätzen", "expired": "Abgelaufen", "fee": "Gebühr", "swapFee": "Tauschgebühr", "feeErr": "Gebühr kann nicht geschätzt werden. Ist \"{{input}}\" eine valide LNURL?", "foundCashuClipboard": "Cashu-Token gefunden", "french": "Französisch", "from": "von", "fromMint": "von folgende Mint", "sendingFrom": "Senden von", "german": "Deutsch", "github": "GitHub", "githubIssues": "Melden Sie Fehler auf Github", "reportIssue": "Problem melden", "shareOrReport": "Feedback teilen oder Fehler melden", "historyDeleted": "Verlauf gelöscht", "invalidInvoice": "Rechnung invalid", "invalidOrSpent": "Invalider Token oder bereits ausgegeben", "invalidToken": "Token invalid", "invoice": "Rechnung", "invoiceExpired": "Rechnung abgelaufen", "invoiceInclFee": "Rechnung inkl. Gebühr", "invoiceOrLnurl": "LN Rechnung oder LNURL", "invoiceOrLnAddress": "Rechnung oder Adresse", "keysetID": "Schlüsselsatz", "language": "Sprache", "currency": "Währung", "currencyConversion": "Währungsumrechnung", "showFiatBalance": "Fiat-Guthaben anzeigen", "showFiatBalanceDesc": "Zeige dein Guthaben und Beträge in deiner gewählten Fiat-Währung an", "selectCurrency": "Währung auswählen", "lastUpdate": "Aktualisiert", "loadingRates": "Wechselkurse werden geladen...", "ratesUnavailable": "Wechselkurse nicht verfügbar", "ratesUnavailableDesc": "Wechselkurse konnten nicht geladen werden. Bitte überprüfe deine Internetverbindung und versuche es erneut.", "ratesRequiredForFiat": "Wechselkurse erforderlich um Fiat-Anzeige zu aktivieren", "noCurrenciesAvailable": "Keine Währungen verfügbar. Bitte versuche die Wechselkurse erneut zu laden.", "retry": "Erneut versuchen", "lnInvoice": "Lightning Rechnung", "lnPayment": "Lightning Zahlung", "mint": "Mint", "minted": "erhalten", "multimintSwap": "Multimint-Tausch", "n/a": "Nicht verfügbar", "name": "Name", "no": "Nein", "noCamAccess": "Kein Zugriff auf die Kamera", "noFunds": "Nicht genügend Guthaben", "noFundsForFee": "Nicht genug Guthaben, bitte lassen Sie Platz für eventuelle Gebühren: ~{{fee}} Sats", "noMint": "Keine Mint gefunden", "notQrCode": "Kein QR-Code!", "noTX": "Noch keine Transaktionen", "activity": "Aktivität", "allHistory": "Alle", "optionalMemo": "Optionales Memo", "paste": "Einfügen", "paymentPending": "Zahlung ausstehend", "paymentSuccess": "Zahlung erfolgreich!", "nostrPaymentSuccess": "versendet!", "paymentType": "Zahlungstyp", "payWithLn": "Zahle mit deiner LN wallet", "preferences": "Einstellungen", "readme": "Lies mich", "sender": "Absender", "recipient": "Empfänger", "reqTimeout": "Timeout für Netzwerkanfragen", "restore": "Wiederherstellen", "save": "Speichern", "scanAgain": "Erneut scannen", "scan": "Scannen", "scanQR": "QR scannen", "qrScanHint": "QR-Code im Rahmen ausrichten", "qrScanFormats": "Cashu, Lightning, LNURL oder Bitcoin", "qrScanReady": "Bereit zum Scannen", "qrScanPaused": "Scan pausiert", "animatedQrProgress": "Animierter QR-Fortschritt", "receivingAnimatedQr": "Empfange animierten QR-Code", "unsupportedFormat": "Nicht unterstütztes Format", "cashuPaymentRequestQrUnsupported": "Cashu-Zahlungsanfragen werden per QR noch nicht unterstützt", "bitcoinAddressPaymentsUnsupported": "Bitcoin-Adresszahlungen werden nicht unterstützt", "cameraAccessRequired": "Kamerazugriff erforderlich", "cameraAccessDenied": "Kamerazugriff verweigert", "cameraAccessRequiredHint": "Wir benötigen Kamerazugriff, um QR-Codes für Zahlungen und Token zu scannen.", "cameraAccessDeniedHint": "Aktiviere den Kamerazugriff in den Geräteeinstellungen, um QR-Codes zu scannen.", "allowCameraAccess": "Kamerazugriff erlauben", "openSettings": "Einstellungen öffnen", "seconds": "Sekunden", "selectAmount": "Betrag auswählen", "selected": "Ausgewählt", "selectMint": "Mint für Zahlung auswählen", "selectMints": "Mints auswählen", "sendEcash": "Ecash senden", "share": "Teilen", "submitPaymentReq": "Auszahlen", "to": "bis", "today": "Heute", "tokenInfoErr": "Ein Fehler ist aufgetreten während der Token-Info-Abfrage", "totalInclFee": "Gesamt inkl. Gebühr", "reservedTotal": "Reservierte Summe", "trustMint": "Mint vertrauen?", "tryLater": "Bitte versuchen Sie es später noch einmal.", "unknownType": "Unbekannter Code-Typ", "version": "Version", "viewMnemonic": "Mnemonic anzeigen", "wallet": "Wallet", "willDoLater": "Mache ich später", "yes": "Ja", "invalidPubKey": "Invalider öffentlicher Schlüssel!", "walletLocked": "Wallet gesperrt", "explainer1": "eNuts ist eine treuhänderische Lightning-Wallet, die private und sofortige Transaktionen mit dem Cashu-Protokoll ermöglicht. Ihre Gelder werden von Mints verwaltet, mit denen Sie interagieren, und Ecash wird lokal auf Ihrem Gerät gespeichert.", "explainer2": "Cashu ist ein neues Ecash-Protokoll für treuhänderische Bitcoin-Apps, bei denen Mints nur Lightning-Knoten sind, die Bitcoin-Transaktionen durchführen und Ihnen Ecash zur Verfügung stellen. Seien Sie versichert, die Mints bleiben unwissend über Ihre Ecash-Zahlungen.", "explainer3": "Fügen Sie einfach eine Mint über die URL hinzu und zahlen Sie eine Lightning-Rechnung, um Ecash zu erhalten. eNuts führt Sie, ermöglicht Ihnen sofortiges Empfangen von jedem und fügt automatisch verbundene Mints hinzu – mit Ihrer Zustimmung. Tauschen Sie Guthaben zwischen Mints aus und senden Sie Ecash, sobald Sie ein Guthaben haben.", "send&receive": "Senden & Empfangen", "contactsNostr": "Kontakte & Nostr", "nostrExplainer": "Die Nostr-Implementierung ermöglicht eine reibungslose Synchronisierung Ihrer Kontakte, ohne dass Sie Ihren privaten Schlüssel eingeben müssen, da wir einen neuen für Sie generieren. Ihre Daten werden mithilfe des öffentlichen Schlüssels angezeigt, während der neue private Schlüssel Ihre Nachrichten verschlüsselt/entschlüsselt.", "send": "Senden", "sendEcashDashboard": "Erstellen Sie ein Cashu-Token und senden Sie es an jeden beliebigen.", "payInvoiceDashboard": "Senden Sie Ihr Guthaben von einer Mint an eine Lightning-Node.", "receiveEcashDashboard": "Fügen Sie ein Cashu-Token aus Ihrer Zwischenablage ein.", "receiveEcashNostr": "Nostr Nachrichten", "receiveEcashNostrHint": "Überprüfen Sie Ihre Nostr Nachrichten auf eingehende Cashu-Token.", "createInvoiceDashboard": "Empfangen Sie Ecash von einer Mint, indem Sie eine Lightning-Rechnung bezahlen.", "hideNuts": "Gesamtsaldo verbergen", "checkingDms": "Ihre Nachrichten werden auf Ecash überprüft...", "clearOverHere": "Sie sind auf dem neusten Stand!", "totalDmsReceived": "Sie haben {{totalDms}} Cashu token erhalten.", "swapNow": "Jetzt tauschen", "swap": "Tausch", "emptyMint": "Kein Guthaben vorhanden", "zapSoon": "Zaps werden bald hinzugefügt...", "enutsPub": "eNuts: ", "seeFullHistory": "Gesamter Transaktionsverlauf", "next": "Weiter", "skip": "Überspringen", "donateLn": "Spenden", "supportHint": "Jeder Beitrag, ganz gleich in welcher Höhe, hat eine bedeutende Auswirkung. Die Bestätigungsseite befindet sich in der Entwicklung.", "newToken": "Neuer Cashu Token", "disclaimerHint": "Dieser Haftungsausschluss sollte ernst genommen und nicht ignoriert oder unterschätzt werden. Wir schätzen Ihr Interesse an diesem Projekt und werden weiterhin daran arbeiten, es zu verbessern.", "searchContacts": "Suchen oder NPUB eingeben", "submit": "Hinzufügen", "clearMetadataCache": "Metadata Cache bereinigen", "clearMetadataCacheHint": "Metadatencache löschen?", "clearImageCache": "Bilder Cache bereinigen", "clearImageCacheHint": "Bildercache löschen?", "pullRefresh": "Zum Aktualisieren ziehen", "processTestPay": "Testzahlung wird ausgeführt...", "confirmMint": "Mint bestätigen", "confirmMintHint": "Sind Sie sicher, dass Sie diese Mint hinzufügen möchten?", "npubAlreadyAdded": "NPUB bereits hinzugefügt", "replaceNpub": "NPUB ersetzen", "replaceNpubTxt": "Ein NPUB ist bereits vorhanden. Möchten Sie ihn ersetzen?", "npubAdded": "NPUB hinzugefügt!", "showContacts": "Kontakte ansehen", "topUpNow": "Jetzt Ecash anfordern", "scanAnother": "Weiteren QR-Code scannen", "deleteNpub": "NPUB löschen?", "delNpubHint": "Alle Kontakte und zugehörigen Daten werden gelöscht.", "addNewNpub": "Neuen NPUB hinzufügen?", "addNpubHint": "Dadurch werden alle Daten, die mit Ihrem aktuellen NPUB verbunden sind, gelöscht.", "zap": "Zap", "zapNow": "Zap", "meltNostrProfileHint": "Senden Sie Ihr Guthaben zu der LN-Adresse, die mit Ihrem Nostr-Profil verknüpft ist.", "nostrDmHint": "eNuts kann nicht auf Ihre Nostr-Nachrichten zugreifen, da es keinen Zugriff auf Ihren privaten Schlüssel hat. Stattdessen generiert es einen neuen Schlüssel zum Senden von Ecash. Wenn Sie Ecash über Nostr senden, erhält der Empfänger es mit Ihrem neuen öffentlichen eNuts-Schlüssel. Wenn der Empfänger auf die Nachricht mit einem Ecash-Token antwortet, wird es hier angezeigt. Wir arbeiten aktiv an einer sicheren Lösung für private Schlüssel.", "nostrIssueHeader": "Nostr-Kontaktproblem", "nostrIssueHint": "Wenn Sie Schwierigkeiten haben, Ihre Nostr-Kontakte zu öffnen, klicken Sie auf die Schaltfläche unten oder setzen Sie die Nostr-Daten zurück in \"Optionen > Kontakte > Daten zurücksetzen\", um das Problem zu lösen.", "submitNostrIssue": "Daten zurücksetzen", "nostrIssueSuccess": "Nostr-Daten erfolgreich zurückgesetzt!", "createLnInvoice": "Lightning Rechnung erstellen", "metadataCacheCleared": "Metadatencache gelöscht!", "imageCacheCleared": "Bildercache gelöscht!", "leaveGithubStar": "Mit GitHub-Stern unterstützen", "alreadySpentHint": "Einige Beweise in Ihrem Guthaben wurden anderswo ausgegeben oder beansprucht. Beheben Sie dies, indem Sie sie die betroffenen Beweise unter 'Optionen' > 'Mint-Management' > 'Beweise überprüfen' löschen.", "useNpub": "NPUB verwenden", "autoSwapToDefaulMint": "Auto-Tausch zu Standard-Mint", "trustMintOpt": "Mint vertrauen", "swapHint": "Diese Option erfordert eine Lightning-Zahlung, bringt Gebühren mit sich und kann die unbekannte Mint dennoch zur Liste hinzufügen, wenn eine Gebühren-Rückzahlung erfolgt.", "trustHint": "Die mit dem Token verbundene Mint wird zu Ihrer Vertrauensliste hinzugefügt.", "noDefaultHint": "Sie müssen eine Standard-Mint einrichten, um einen automatischen Tausch durchzuführen.", "autoSwapSuccess": "Tausch erfolgreich!", "paidInvoice": "{{ count }} Rechnung wurde mit einem Gesamtbetrag von {{ total }} Sats bezahlt", "paidInvoices": "{{ count }} Rechnungen wurden mit einem Gesamtbetrag von {{ total }} Sats bezahlt", "checkPayment": "Zahlung überprüfen", "lnPaymentSpamHint": "Bitte warten Sie {{ remainingSeconds }} Sekunden um die Mint zu entlasten.", "supportUs": "Unterstütze uns", "shareEnuts": "Teile eNuts mit jemandem", "justNow": "Gerade eben", "hoursAgo": "vor {{count}} Stunden", "yesterday": "Gestern", "awaitingPayment": "Warte auf Zahlung", "receivedFromMint": "Von Mint erhalten", "status": "Status", "unit": "Einheit", "quoteId": "Angebots-ID", "nfcPaymentLimits": "Zahlungslimits", "nfcPaymentLimitsDesc": "Standard- und benutzerdefinierte Beträge für NFC-Zahlungen festlegen", "amountLimits": "Betragsgrenzwerte", "amountLimitsDesc": "Tippen um Standard zu setzen, lange drücken zum Löschen", "noLimit": "Kein Limit", "noLimitDesc": "Jeden Betrag bestätigen", "deleteAmount": "Betrag löschen", "deleteAmountConfirm": "Möchten Sie {{amount}} Sats wirklich aus Ihren Schnellauswahlbeträgen entfernen?", "delete": "Löschen", "resetToDefaults": "Auf Standard zurücksetzen" }, "error": { "checkSpendableErr": "Fehler beim Überprüfen, ob der Token ausgegeben werden kann", "claimTokenErr": "Fehler beim Beanspruchen des Tokens", "sendTokenErr": "Fehler beim Senden des Tokens", "header": "Ein Fehler ist aufgetreten", "msg": "Es tut uns leid, dass dieses Problem bei Ihnen aufgetreten ist. Sie können uns helfen, die Software zu verbessern, indem Sie einen Screenshot machen und einen kurzen Fehlerbericht erstellen.", "reportBug": "Fehler melden", "requestMintErr": "Fehler beim Abrufen der Rechnung von der Mint.", "stackNA": "Ursprung des Fehlers nicht verfügbar", "generalMeltingErr": "Die Mint konnte keine geeignete Lightning-Zahlungsroute zu Ihrer Node finden.", "invoiceFromLnurlError": "Es konnte keine Rechnung erstellt werden mit deiner LNURL.", "invoiceScanError": "Die gescannte Rechnung konnte nicht bearbeitet werden." }, "history": { "checkSpent": "Überprüfen ob Token ausgegeben wurde", "isPending": "Token steht aus", "isSpent": "Token wurde ausgegeben", "justNow": "Gerade eben", "hoursAgo": "vor {{count}} Stunden", "yesterday": "Gestern", "memo": "Memo", "nHrsAgo": "Vor {{hrs}} Stunden", "nMinsAgo": "Vor {{mins}} Minuten", "noMemo": "Keine Memo", "oneHrAgo": "Vor einer Stunde", "oneMinAgo": "Vor 1 Minute", "paymentHash": "Zahlungs-Hash", "settleTime": "Zeitpunkt", "showQr": "QR-Code anzeigen", "receive": "Empfangen", "send": "Senden", "melt": "Schmelzen", "receivedEcash": "Ecash empfangen", "sentEcash": "Ecash gesendet", "paidInvoice": "Rechnung bezahlt", "details": "Details", "date": "Datum", "amount": "Betrag", "token": "Token" }, "mints": { "addCustomName": "Benutzerdefinierten Namen hinzufügen", "additionalInfo": "Zusätzliche Informationen", "addMintBtn": "Mint hinzufügen", "addNewMint": "Neue Mint hinzufügen", "atLeast2Mints": "Sie brauchen mindestens 2 Mints um einen Multimint-Tausch auszuführen.", "awaitingInvoice": "Rechnung ausstehend.", "cashOutAmountHint": "Es können Lightning-Gebühren anfallen, daher wird eine geschätzte Gebühr hinzugefügt und eventuell zu viel gezahlte Gebühren werden erstattet.", "checkProofs": "Beweise überprüfen", "checkProofsQ": "Alle Beweise überprüfen?", "checkProofsTxt": "Dadurch wird überprüft, ob Ihre Token ausgegeben werden können und werden andernfalls gelöscht.", "chooseMeltMintHint": "Wählen Sie eine Mint aus, von der aus Sie Ihre Gelder abheben möchten.", "chooseMintHint": "Wählen Sie eine Mint aus, von der Sie Ecash erhalten möchten. Die Mint wird zum Verwalter Ihrer Gelder.", "chooseTarget": "Wählen Sie den Empfänger der Zahlung aus.", "coinSelectionHint": "Ihr Ecash-Guthaben ist im Wesentlichen eine Sammlung von Coin-sets. Die Coin Auswahl ermöglicht es Ihnen, die Coins auszuwählen, die Sie ausgeben möchten. Coin-sets erhalten von der Mint eine Schlüsselsatz-ID, die sich im Laufe der Zeit ändern kann. Neu hinzugefügte Sets werden grün hervorgehoben. Es wird empfohlen, zuerst ältere Sets auszugeben.", "creatingEcashToken": "Der Cashu-Token wird erstellt.", "sendingEcashViaNostr": "Der Cashu-Token wird via Nostr versendet!", "customName": "Benutzerdefinierter Name", "cutomNameAdded": "Benutzerdefinierter Name hinzugefügt", "dangerZone": "Gefahrenzone", "deletedProofs": "{{proofsToDel}} Beweise gelöscht.", "delMint": "Mint löschen", "delMintSure": "Mint löschen?", "ecashAmountHint": "Wählen Sie den Betrag an Ecash aus, den Sie senden möchten.", "editMintName": "Mint Name bearbeiten", "errDelProofs": "Etwas ist schief gelaufen während dem Löschen der Beweise.", "funds": "Guthaben", "general": "Allgemein", "importantNotice": "Wichtiger Hinweis", "inputField": "Lightning-Rechnung oder LNURL", "invalidUrl": "URL invalid", "invoiceAmountHint": "Wählen Sie den Betrag an Ecash aus, den Sie erhalten möchten. Die Mint wird eine Rechnung erstellen, die Sie mit einer Lightning-Wallet bezahlen müssen.", "invoiceHint": "Das kann einige Sekunden dauern...", "lowBal": "Kein Guthaben verfügbar", "metadata": "Metadaten", "meltAddressbookHint": "Wählen Sie Ihre eigene LNURL oder einen anderen Kontakt als Zahlungsempfänger aus.", "meltInputHint": "Fügen Sie eine Lightning-Rechnung, LNURL oder Lightning Adresse ein.", "meltScanQRHint": "Erstellen Sie eine Lightning-Rechnung mit einem anderen Gerät und scannen Sie sie einfach.", "meltSwapHint": "Wählen Sie eine andere Mint aus Ihrer vertrauenswürdigen Liste als Zahlungsempfänger aus.", "copyShareToken": "Kopieren & teilen", "copyShareTokenHint": "Kopieren Sie den Ecash-Token und teilen Sie ihn über eine Messenger App.", "sendNostr": "Senden via Nostr", "sendNostrHint": "Senden Sie Ecash ohne Umwege an eins Ihrer Kontakte in Nostr.", "meltToken": "Auszahlen", "mintConnectionFail": "Verbindung zu Mint fehlgeschlagen", "mintInfo": "Mint Info", "mintNewTokens": "Erhalte Ecash", "mintNoContact": "Diese Mint verfügt über keine Kontakt Informationen", "mntAlreadyAdded": "Mint bereits vorhanden", "noAdditional": "Diese Mint verfügt über keine zusätzlichen Informationen", "noInfo": "Keine Informationen verfügbar", "noProofs": "Diese Mint verfügt über keine Beweise.", "paymentOverview": "Zahlungsübersicht", "processingPaymentByMint": "Die Mint bearbeitet die Zahlung gemäß Ihrem Antrag", "processingSwap": "Verarbeitung eines Multimint-Swaps gemäß Ihrem Antrag", "pubKey": "Öffentlicher Schlüssel", "removeDefault": "Standard zurücksetzen", "scanQR": "QR-Code scannen", "sendEcashHint": "Wählen Sie eine Mint aus, aus der Sie gerne einen Cashu-Token erstellen möchten.", "setDefault": "Als Standard-Mint festlegen", "supportedNuts": "Unterstütze NUTs", "swapNotAllowed": "Multimint-Tausch von einer Test-Mint ist nicht möglich.", "zapNotAllowed": "Zap von einer Test-Mint ist nicht möglich.", "testMintHint": "Dies ist eine Test-Mint für Simulationszwecke. Trotzdem hinzufügen?", "trustMintSure": "Mint vertrauen?", "updatedDefault": "Änderungen gespeichert", "newMintAdded": "Mint hinzugefügt!", "newMintAddedQuestion": "Möchten Sie jetzt Ecash empfangen?", "selectSwapReceiver": "Wählen Sie eine Mint als Zahlungsempfänger aus.", "prepairZapData": "Transaktionsdaten werden vorbereitet...", "lastUpdated": "Zuletzt aktualisiert", "mintInfoUpdated": "Mint-Info aktualisiert!", "mintInfoUpdateFailed": "Fehler beim Aktualisieren der Mint-Info", "npcSettings": "Lightning address", "npcDefaultAccount": "Default", "npcTapToCopy": "Tap to copy", "npcUsernameLabel": "Custom username", "npcUsernamePlaceholder": "optional username", "npcPurchaseUsername": "Save username", "npcSetUsername": "Set Username", "npcRequestUsername": "Request username", "npcUsernameFeePrompt": "Do you want to set this username for a fee of {{amount}} sats?", "npcReceiveTitle": "NPC Lightning addresses", "npcReceiveHint": "Receive Lightning payments into your local Cashu wallet.", "npcAccountsLabel": "Accounts", "npcLocalBalance": "Local balance", "npcReceiveAddress": "Receive address", "npcSeedKey": "Seed key", "npcImportedKey": "Imported key", "npcActive": "Active", "npcSyncing": "Syncing", "npcPaused": "Paused", "npcNpubFallback": "Using your npub until a username is saved", "npcSyncAll": "Sync all", "npcSynced": "NPC account synced", "npcAccountAdded": "NPC account added", "npcAccountRemoved": "NPC account removed", "npcUsernameSaved": "Username saved", "npcAddAccountTitle": "Add NPC account", "npcAddAccountHint": "Import an existing Nostr key or derive a new key from your seed.", "npcPrivateKeyLabel": "Private key", "npcPrivateKeyPlaceholder": "nsec or hex", "npcPrivateKeyHint": "Imported keys are stored in secure storage on this device.", "npcPrivateKeyRequired": "Enter an nsec or hex private key.", "npcImportPrivateKey": "Import private key", "npcDeriveAccount": "Derive new key" }, "topNav": { "about": "Über uns", "addressBook": "Adressbuch", "advancedFunctions": "Erweiterte Funktionen", "display": "Anzeige", "history": "Transaktionsverlauf", "language": "Sprache", "currency": "Währung", "mintSettings": "Mint Management", "nfcSettings": "NFC Einstellungen", "npcSettingsTitle": "Lightning address", "security": "Sicherheit", "settings": "Optionen", "privacy": "Privatsphäre", "general": "Allgemein" }, "wallet": { "cashuContent": "Die Autoren von Cashu und eNuts sind keine Kryptografen und das Cashu-Protokoll wird noch überprüft. Es bestehen Bedenken hinsichtlich möglicher schwerwiegender Mängel. Daher ist Cashu noch nicht für den produktiven Einsatz bereit.", "cashuExperiment": "Cashu ist immer noch experimentell.", "claiming": "Überprüft...", "processingInvoice": "Rechnung wird verarbeitet...", "nfcPayment": "NFC-Zahlung", "nfcKeepNearTerminal": "Halten Sie Ihr Telefon in die Nähe des Terminals", "nfcSelectMaxAmount": "Maximalbetrag auswählen", "noLimit": "Kein Limit", "custodialRisk": "Verwahrrisiko, Mints halten die Schlüssel.", "custodialRiskContent": "Mit eNuts haben Sie nicht die Kontrolle über die Bitcoin-Schlüssel; die Mint fungiert als Verwahrer. Wenn Sie einer Mint nicht vertrauen, ist es ratsam, nicht mit ihr zu interagieren.", "disclaimer": "Bitte beachten Sie, dass es sich hierbei um eine Beta-Version in einem frühen Stadium handelt und diese noch vor der offiziellen Veröffentlichung getestet wird. Die Software und alle darauf enthaltenen Inhalte werden als „wie besehen“ und „wie verfügbar“ bereitgestellt. Wir geben keine Garantien, ob ausdrücklich oder stillschweigend, hinsichtlich der Eignung oder Verwendbarkeit der Software oder deren Inhalte.", "enutsDisclaimer": "eNuts ist unvollendete Beta-Software.", "lossContent": "Cashu-Token sind Inhabertoken, was bedeutet, dass es derzeit keine Möglichkeit zur Wiederherstellung gibt, wenn Sie den Zugriff darauf verlieren. eNuts speichert Ihre Token auf Ihrem Gerät. Stellen Sie vor dem Löschen der App sicher, dass Sie Ihre Token gesichert haben.", "lossOfTokens": "Verlust von Geldern.", "enutsMint": "Die standardmäßige eNuts-Mint", "mintDisclaimer": "Die Verwendung der standardmäßigen eNuts-Mint erfolgt vollständig auf eigenes Risiko. Wir empfehlen dringend, Vorsicht walten zu lassen und sie nur für experimentelle oder Bildungszwecke zu nutzen. Es gibt keine Garantien hinsichtlich ihrer Funktionalität, Sicherheit oder Verfügbarkeit, und sie kann ohne Vorankündigung verschwinden. Einlagen, die in diese Mint getätigt werden, sollten als Spenden betrachtet werden und können möglicherweise nicht zurückgegeben werden, sondern eventuell für die Weiterentwicklung verwendet werden. Seien Sie sich der mit Beta-Software verbundenen Risiken bewusst, und es liegt in Ihrer Verantwortung, Ihre Vermögenswerte beim Gebrauch dieser Mint zu schützen.", "paidOut": "Ausbezahlt", "pasteToken": "Ecash einlösen", "payInvoice": "Rechnung bezahlen", "payLNInvoice": "Lightning Rechnung bezahlen", "receive": "Empfangen", "send": "Senden", "sent": "Ausgezahlt", "proofs": "Beweise", "swapped": "Getauscht" } } ================================================ FILE: assets/translations/en.json ================================================ { "addrBook": { "addOwnNpub": "Add your NPUB", "favorite": "Favorite", "removeFav": "Remove favorite", "copyNpub": "Copy NPUB", "npubCopied": "NPUB copied!", "receiverNoLnurl": "Recipient has no LNURL", "noResults": "No results" }, "auth": { "confirmAction": "Please confirm the action.", "createPin": "Create PIN", "editPin": "Edit PIN", "pinMismatch": "Incorrect PIN!", "pinSetup": "You can optionally setup a PIN to secure your app.", "pleaseConfirm": "Please confirm your PIN.", "pleaseConfirmNewPin": "Please confirm your new PIN.", "pleaseEnter": "Please enter your PIN now.", "pleaseNewPin": "Please enter a new PIN now.", "removePin": "Delete PIN", "welcome": "Welcome", "welcomeBack": "Welcome back!" }, "bottomNav": { "wallet": "Wallet", "contacts": "Contacts" }, "common": { "confirmReset": "Reset wallet", "copy": "Copy", "cycle": "Cycle", "findMint": "Find a mint", "manualCounterIncrease": "Increase counters", "manualCounterIncreaseHint": "The counters increment automatically after each transaction, but in rare cases, this may fail, leading to errors during the restoration process. Manually raising the counters can resolve the state.", "increaseCounterHint": "Are you sure you want to increase the counters? This should only be done if you are sure that the counters are out of sync.", "noMintForCounter": "You have no mints to increase the counters for.", "counterIncreased": "Counters increased by {{counterIncreased}}!", "doneSafety": "Almost done... Safety check", "noProofsRestored": "Found no proofs to restore your wallet.", "restoreErr": "Something went wrong while restoring your wallet.", "dontClose": "Please do not close the app during the process.", "recoveryHint": "Write or paste your 12-word mnemonic in the right order, separated by blank spaces.", "walletRecovery": "Wallet Recovery", "walletRecoveryHint": "Use a backup seed to restore your wallet.", "seedBackup": "Seed Backup", "12WordMnemonic": "12-word mnemonic", "secureWallet": "Secure wallet", "secureWalletHint": "Generate and write down a seed backup to secure your wallet.", "quickWallet": "Quick wallet", "quickWalletHint": "Create a new wallet instantly. Backup seed can be generated later.", "skipSeedHint": "You can skip this process and generate a seed backup later.", "mnemonicHint": "The seed phrase will never be shown again. Write it down and never share it with anyone.", "confirmMnemonicErr": "Wrong word! Please make sure to write down your seed phrase correctly in the right order.", "selectRestoreMint": "Please select the mint that will be used to restore your funds.", "recoveringWallet": "The mint is restoring your funds...", "seedEnabled": "Seed recovery enabled!", "confirmSeed": "Please confirm your seed by typing the correct word.", "about": "About", "aboutToLeaveTo": "You are about to leave", "accept": "Accept", "amount": "Amount", "back": "Back", "backToDashboard": "Back to dashboard", "balance": "Balance", "balanceAfterTX": "Mint balance after TX", "balTooLow": "Balance too low", "bigQrMsg": "The amount of data is too big for a QR code.", "calculateFeeEst": "Calculating fee", "cancel": "Cancel", "cashOut": "Cash out", "cashOutFromMint": "Cash out from mint", "change": "Change", "claimed": "claimed", "restored": "restored", "claimSuccess": "Claimed {{amount}} Sats:\n{{mintUrl}}\nMemo: {{memo}}", "claimToken": "Claim token", "clear": "Clear", "clipboardInvalid": "Your clipboard contains an invalid Cashu token!", "coinSelection": "Coin selection", "confirm": "Confirm", "contact": "Contact", "mintDelErr": "Unable to remove a mint with remaining balance", "continue": "Continue", "copied": "Copied", "shareInvoice": "Share invoice", "copyToken": "Copy token", "createInvoice": "Create invoice", "createToken": "Create Token", "createTokenErr": "Could not create a cashu token. Please try again later.", "eventError": "Something went wrong while publishing the event.", "createViaLn": "Create Invoice", "darkMode": "Dark mode", "lightMode": "Light mode", "autoMode": "Auto mode", "dbErr": "Something went wrong while initializing the DB!", "deepLinkErr": "Link could not be opened", "default": "Default", "delHistory": "Delete history", "factoryReset": "Factory reset", "delHistoryErr": "Could not delete the history.", "delHistoryQ": "Delete history?", "resetQ": "Reset your wallet?", "delHistoryTxt": "The data can not be retrieved afterwards.", "display": "Display", "disclaimer": "Disclaimer", "restoreBattery": "At least 20% battery.", "restoreBatteryHint": "We recommend that you have at least 20% battery before starting the recovery process. Depending on the amount of data, the process may take a while.", "restoreWifi": "Use Wi-Fi.", "restoreWifiHint": "We recommend that you use a stable Wi-Fi connection for the recovery process to avoid any interruptions and to ensure a fast and secure recovery.", "restoreForeground": "Keep the app in the foreground.", "restoreForegroundHint": "Please keep the app in the foreground and do not close it during the recovery process to avoid any interruptions.", "seedMigrationHint": "The seed applies to all mints, but each needs an individual restore, so note down frequently used mint URLs. If you have a balance but no seed yet, create a token from a desired mint and self-claim it after generating a new seed. Repeat for each mint you wish to backup.", "ecashPayment": "Ecash payment", "english": "English", "swahili": "Swahili", "spanish": "Spanish", "hungarian": "Hungarian", "italian": "Italian", "russian": "Russian", "thai": "Thai", "chinese simplified": "Chinese (Simplified)", "chinese traditional": "Chinese (Traditional)", "enutsRandD": "eNuts Telegram", "estimatedFees": "Estimated fees", "estimateFee": "Estimate fee", "expired": "Expired", "fee": "Fee", "swapFee": "Swap fee", "feeErr": "Unable to estimate fee. Is \"{{input}}\" a valid LNURL?", "foundCashuClipboard": "Cashu token detected", "french": "French", "from": "from", "fromMint": "from the following mint", "sendingFrom": "Sending from", "german": "German", "github": "GitHub", "githubIssues": "Report bugs on Github", "reportIssue": "Report an issue", "shareOrReport": "Share feedback or report bugs", "historyDeleted": "History deleted", "invalidInvoice": "Invalid invoice", "invalidOrSpent": "Token invalid or already claimed", "invalidToken": "Invalid token", "invoice": "Invoice", "invoiceExpired": "Invoice expired", "invoiceInclFee": "Invoice incl. fee", "invoiceOrLnurl": "LN invoice or LNURL", "invoiceOrLnAddress": "Invoice or Address", "keysetID": "Keyset ID", "language": "Language", "currency": "Currency", "currencyConversion": "Currency Conversion", "showFiatBalance": "Show fiat balance", "showFiatBalanceDesc": "Display your balance and amounts in your selected fiat currency", "selectCurrency": "Select Currency", "lastUpdate": "Updated", "loadingRates": "Loading exchange rates...", "ratesUnavailable": "Exchange rates unavailable", "ratesUnavailableDesc": "Unable to load exchange rates. Please check your internet connection and try again.", "ratesRequiredForFiat": "Exchange rates required to enable fiat display", "noCurrenciesAvailable": "No currencies available. Please retry loading exchange rates.", "retry": "Retry", "lnInvoice": "Lightning invoice", "lnPayment": "Lightning payment", "mint": "Mint", "minted": "minted", "multimintSwap": "Multimint swap", "n/a": "Not available", "name": "Name", "no": "No", "noCamAccess": "No access to camera", "noFunds": "Not enough funds", "noFundsForFee": "Not enough funds, please leave room for potential fees: ~{{fee}} Sats", "noMint": "Found no mint", "notQrCode": "Not a QR code!", "noTX": "No transactions yet", "activity": "Activity", "allHistory": "All", "optionalMemo": "Optional memo", "paste": "Paste", "paymentPending": "Payment pending", "paymentSuccess": "Payment successful!", "nostrPaymentSuccess": "sent!", "paymentType": "Payment type", "payWithLn": "Pay with your LN wallet", "preferences": "Preferences", "readme": "Read me", "sender": "Sender", "recipient": "Recipient", "reqTimeout": "Network request timeout", "restore": "Restore", "save": "Save", "scanAgain": "Scan Again", "scan": "Scan", "scanQR": "Scan QR", "qrScanHint": "Place the QR code inside the frame", "qrScanFormats": "Cashu, Lightning, LNURL, or Bitcoin", "qrScanReady": "Ready to scan", "qrScanPaused": "Scan paused", "animatedQrProgress": "Animated QR progress", "receivingAnimatedQr": "Receiving animated QR", "unsupportedFormat": "Unsupported format", "cashuPaymentRequestQrUnsupported": "Cashu payment requests are not supported from QR yet", "bitcoinAddressPaymentsUnsupported": "Bitcoin address payments are not supported", "cameraAccessRequired": "Camera access required", "cameraAccessDenied": "Camera access denied", "cameraAccessRequiredHint": "We need camera access to scan QR codes for payments and tokens.", "cameraAccessDeniedHint": "Enable camera access in your device settings to scan QR codes.", "allowCameraAccess": "Allow camera access", "openSettings": "Open settings", "seconds": "seconds", "selectAmount": "Select amount", "selected": "Selected", "selectMint": "Select a mint to send from", "selectMints": "Select mints", "noMintsWithBalance": "No mints with balance available", "sendEcash": "Send Ecash", "share": "Share", "submitPaymentReq": "Cash out", "to": "to", "today": "Today", "tokenInfoErr": "Error while getting token info", "totalInclFee": "Total incl. fee", "reservedTotal": "Reserved total", "trustMint": "Trust this mint?", "tryLater": "Please try again later.", "unknownType": "Unknown data", "version": "Version", "viewMnemonic": "View Mnemonic", "wallet": "Wallet", "willDoLater": "Will do later", "yes": "Yes", "invalidPubKey": "Invalid public key!", "walletLocked": "Wallet locked", "explainer1": "eNuts is a custodial Lightning wallet, allowing private and instant transactions using the Cashu protocol. Your funds are held by mints you interact with, and Ecash is stored locally on your device.", "explainer2": "Cashu is a new Ecash protocol for custodial Bitcoin apps, where mints are Lightning nodes performing Bitcoin transactions and offer you Ecash. Rest assured, the mint remains unaware of your Ecash payments.", "explainer3": "Simply add a mint via URL and pay a Lightning invoice to get Ecash. eNuts guides you, lets you receive from anyone instantly and with your permission, automatically adds related mints. Swap funds between mints and send Ecash once you have a balance.", "send&receive": "Send & receive", "contactsNostr": "Contacts & Nostr", "nostrExplainer": "The Nostr implementation enables seamless synchronization of your contacts without the need for you to enter your private key, as we generate a new one for you. Your data is displayed using the public key, while the new private key encrypts/decrypts your messages.", "send": "Send", "sendEcashDashboard": "Create a Cashu token and send it to anyone.", "payInvoiceDashboard": "Send your funds to a Lightning node.", "receiveEcashDashboard": "Paste & redeem a Cashu token from clipboard.", "receiveEcashNostr": "Nostr messages", "receiveEcashNostrHint": "Check your Nostr messages for Ecash.", "createInvoiceDashboard": "Receive Ecash by paying a Lightning invoice.", "hideNuts": "Hide balance", "checkingDms": "Checking your DMs for Ecash...", "clearOverHere": "Everything is clear over here!", "totalDmsReceived": "You received {{totalDms}} Cashu token.", "swapNow": "Swap now", "swap": "Swap", "emptyMint": "Mint has no funds", "zapSoon": "Zaps will be added soon...", "enutsPub": "eNuts public key: ", "seeFullHistory": "See full transaction history", "next": "Next", "skip": "Skip", "donateLn": "Donate", "supportHint": "Every contribution, no matter the size, makes a significant impact. Confirmation screen is under development.", "newToken": "New Cashu token", "disclaimerHint": "This disclaimer should be taken seriously and should not be ignored or underestimated. We appreciate your interest in this project and will continue to work on improving it.", "searchContacts": "Search or type NPUB", "submit": "Submit", "clearMetadataCache": "Clear metadata cache", "clearMetadataCacheHint": "Clear metadata cache?", "clearImageCache": "Clear image cache", "clearImageCacheHint": "Clear image cache?", "pullRefresh": "Pull to refresh", "processTestPay": "Processing test payment...", "confirmMint": "Confirm new mint", "confirmMintHint": "Are you sure that you want to add this mint?", "npubAlreadyAdded": "NPUB already added", "replaceNpub": "Replace NPUB", "replaceNpubTxt": "Are you sure that you want to replace the current NPUB?", "npubAdded": "NPUB added!", "showContacts": "Show contacts", "topUpNow": "Get Ecash now", "scanAnother": "Scan another QR code", "deleteNpub": "Delete NPUB?", "delNpubHint": "All the contacts and related data will be deleted.", "addNewNpub": "Add a new NPUB?", "addNpubHint": "This will delete all the data associated with your current NPUB.", "zap": "Zap", "zapNow": "Zap now", "meltNostrProfileHint": "Transfer funds to the LN address associated with your Nostr profile.", "nostrDmHint": "eNuts can't access your Nostr account DMs due to its lack of access to your private key. Instead, it generates a new key for sending Ecash. When you send Ecash via Nostr, the recipient gets it using your new eNuts public key. If the recipient replies to the DM with an Ecash token, you can view it here. We're actively working on a secure private key solution.", "nostrIssueHeader": "Nostr contacts issue", "nostrIssueHint": "If you're having trouble opening your Nostr contacts, click the button below or reset the Nostr data in 'options' > 'contacts' > 'reset data now' to resolve the issue.", "submitNostrIssue": "Reset data now", "nostrIssueSuccess": "Nostr data reset successfully!", "createLnInvoice": "Create Lightning invoice", "metadataCacheCleared": "Metadata cache cleared!", "imageCacheCleared": "Image cache cleared!", "leaveGithubStar": "Support us with a Github star", "alreadySpentHint": "Some proofs in your balance are spent or claimed elsewhere. Resolve by deleting them in 'Options' > 'Mint Management' > 'Check Proofs'.", "useNpub": "Use NPUB", "autoSwapToDefaulMint": "Auto-swap to default mint", "trustMintOpt": "Trust mint", "swapHint": "This option requires a Lightning payment, involves fees, and may still add the unknown mint to the list if a fee refund occurs.", "trustHint": "The mint associated with the token will be added to your trusted list.", "noDefaultHint": "You need to setup a default mint to perform an auto swap.", "autoSwapSuccess": "Swap successful!", "paidInvoice": "{{ count }} invoice has been paid with a total amount of {{ total }} Sats", "paidInvoices": "{{ count }} invoices have been paid with a total amount of {{ total }} Sats", "checkPayment": "Check payment", "lnPaymentSpamHint": "Please wait {{ remainingSeconds }} seconds to avoid spamming the mint.", "supportUs": "Support us", "shareEnuts": "Share eNuts with someone", "justNow": "Just now", "hoursAgo": "{{count}} hours ago", "yesterday": "Yesterday", "awaitingPayment": "Awaiting payment", "receivedFromMint": "Received from mint", "status": "Status", "unit": "Unit", "quoteId": "Quote ID", "nfcPaymentLimits": "Payment Limits", "nfcPaymentLimitsDesc": "Set default and custom amount limits for NFC tap-to-pay", "amountLimits": "Amount Limits", "amountLimitsDesc": "Tap to set as default, long press to delete", "noLimit": "No Limit", "noLimitDesc": "Confirm any amount", "deleteAmount": "Delete Amount", "deleteAmountConfirm": "Are you sure you want to remove {{amount}} sats from your quick select amounts?", "delete": "Delete", "resetToDefaults": "Reset to Defaults" }, "error": { "checkSpendableErr": "Error while checking if token is spendable", "claimTokenErr": "Error while claiming token", "sendTokenErr": "Error while sending token", "header": "An error occured", "msg": "We are sorry that you encountered this problem. You can help us improve the software by taking a screenshot and creating a short bug report.", "reportBug": "Report the bug", "requestMintErr": "Error while requesting invoice from mint.", "stackNA": "Error stack not available", "generalMeltingErr": "The mint was not able to find a proper Lightning payment route to your node.", "invoiceFromLnurlError": "Could not create an invoice using your LNURL.", "invoiceScanError": "Could not use the invoice from the scanned QR code." }, "history": { "checkSpent": "Check if token has been spent", "isPending": "Token is pending", "isSpent": "Token has been spent", "justNow": "Just now", "hoursAgo": "{{count}} hours ago", "yesterday": "Yesterday", "memo": "Memo", "nHrsAgo": "{{hrs}} hours ago", "nMinsAgo": "{{mins}} minutes ago", "noMemo": "No memo", "oneHrAgo": "1 hour ago", "oneMinAgo": "1 minute ago", "paymentHash": "Payment hash", "settleTime": "Settle time", "showQr": "Show QR code", "receive": "Receive", "send": "Send", "melt": "Melt", "receivedEcash": "Received Ecash", "sentEcash": "Sent Ecash", "paidInvoice": "Paid invoice", "details": "Details", "date": "Date", "amount": "Amount", "token": "Token" }, "mints": { "addCustomName": "Add a custom name", "additionalInfo": "Additional information", "addMintBtn": "Add mint", "addNewMint": "Add a new mint", "atLeast2Mints": "You need at least 2 mints to perform an multimint-swap.", "awaitingInvoice": "Awaiting invoice", "cashOutAmountHint": "Lightning fees may occur, so an estimated fee is added, and any overpaid fees will be refunded.", "checkProofs": "Check proofs", "checkProofsQ": "Check all the proofs?", "checkProofsTxt": "This will check if your token are spendable and will otherwise delete them.", "chooseMeltMintHint": "Choose a mint from which you would like to cash out your funds.", "chooseMintHint": "Choose a mint from which you would like to receive Ecash. The mint becomes custodian of your funds.", "chooseTarget": "Choose the receiver of the payment.", "coinSelectionHint": "Your Ecash balance is essentially a collection of coin-sets. Coin selection allows you to choose the coins you want to spend. Coin-sets are assigned a keyset-ID by the mint, which may change over time. Newly added keysets are highlighted in green. It is advisable to spend older sets first.", "creatingEcashToken": "Cashu token is being created", "sendingEcashViaNostr": "Sending Cashu token via Nostr!", "customName": "Custom name", "cutomNameAdded": "Added a custom name", "dangerZone": "Danger zone", "deletedProofs": "Deleted {{proofsToDel}} proofs.", "delMint": "Delete mint", "delMintSure": "Remove this mint?", "ecashAmountHint": "Select the amount of Ecash you would like to send.", "editMintName": "Edit mint name", "errDelProofs": "Something went wrong while deleting proofs.", "funds": "Funds", "general": "General", "importantNotice": "Important notice", "inputField": "LN invoice or LNURL", "invalidUrl": "Invalid URL", "invoiceAmountHint": "Select the amount of Ecash you would like to receive. The mint will then create an invoice which you will have to pay using a Lightning wallet.", "invoiceHint": "This can take a few seconds...", "lowBal": "Mint balance too low!", "metadata": "Metadata", "meltAddressbookHint": "Choose your own LNURL or any other contact as a payment receiver.", "meltInputHint": "Paste Lightning invoice, LN-URL or Lightning address.", "meltScanQRHint": "Create a Lightning invoice with another device and simply scan it.", "meltSwapHint": "Pick another mint from your trusted list as the payment receiver.", "copyShareToken": "Copy & quickshare", "copyShareTokenHint": "Copy the generated token and share it via any messenger app.", "sendNostr": "Send via Nostr", "sendNostrHint": "Send Ecash directly to one of your Nostr contacts.", "meltToken": "Cash out", "mintConnectionFail": "Connection to mint failed", "mintInfo": "Mint info", "mintNewTokens": "Get Ecash", "mintNoContact": "The mint has no contact info", "mntAlreadyAdded": "Mint already added", "noAdditional": "This mint has no additional info", "noInfo": "Mint has no info", "noProofs": "Found no proofs for this mint.", "paymentOverview": "Payment overview", "processingPaymentByMint": "The mint is processing the payment according to your request", "processingSwap": "Processing multimint-swap according to your request", "pubKey": "Public key", "removeDefault": "Remove from default", "scanQR": "Scan a QR code", "sendEcashHint": "Choose a mint from which you would like to create a Cashu token.", "setDefault": "Set as default mint", "supportedNuts": "Supported NUTs", "swapNotAllowed": "Swap out from a test mint is not possible.", "zapNotAllowed": "Zap from a test mint is not possible.", "testMintHint": "This is a test mint to play around with. Add it anyway?", "trustMintSure": "Trust this mint?", "updatedDefault": "Updated the default mint", "newMintAdded": "Mint added!", "newMintAddedQuestion": "Do you want to receive Ecash now?", "selectSwapReceiver": "Select a mint as the payment receiver.", "prepairZapData": "Preparing the transaction data...", "lastUpdated": "Last updated", "mintInfoUpdated": "Mint info updated!", "mintInfoUpdateFailed": "Failed to update mint info", "npcSettings": "Lightning address", "npcDefaultAccount": "Default", "npcTapToCopy": "Tap to copy", "npcUsernameLabel": "Custom username", "npcUsernamePlaceholder": "optional username", "npcPurchaseUsername": "Save username", "npcSetUsername": "Set Username", "npcRequestUsername": "Request username", "npcUsernameFeePrompt": "Do you want to set this username for a fee of {{amount}} sats?", "npcReceiveTitle": "NPC Lightning addresses", "npcReceiveHint": "Receive Lightning payments into your local Cashu wallet.", "npcAccountsLabel": "Accounts", "npcLocalBalance": "Local balance", "npcReceiveAddress": "Receive address", "npcSeedKey": "Seed key", "npcImportedKey": "Imported key", "npcActive": "Active", "npcSyncing": "Syncing", "npcPaused": "Paused", "npcNpubFallback": "Using your npub until a username is saved", "npcSyncAll": "Sync all", "npcSynced": "NPC account synced", "npcAccountAdded": "NPC account added", "npcAccountRemoved": "NPC account removed", "npcUsernameSaved": "Username saved", "npcAddAccountTitle": "Add NPC account", "npcAddAccountHint": "Import an existing Nostr key or derive a new key from your seed.", "npcPrivateKeyLabel": "Private key", "npcPrivateKeyPlaceholder": "nsec or hex", "npcPrivateKeyHint": "Imported keys are stored in secure storage on this device.", "npcPrivateKeyRequired": "Enter an nsec or hex private key.", "npcImportPrivateKey": "Import private key", "npcDeriveAccount": "Derive new key" }, "topNav": { "about": "About us", "addressBook": "Address book", "advancedFunctions": "Advanced functions", "display": "Display", "history": "Transaction history", "language": "Language", "currency": "Currency", "mintSettings": "Mint management", "nfcSettings": "NFC Settings", "npcSettingsTitle": "Lightning address", "security": "Security", "settings": "Options", "privacy": "Privacy", "general": "General" }, "wallet": { "cashuContent": "The author of Cashu is not a cryptographer and the protocol is still under review. It raises concerns about the potential existence of fatal flaws. As a result, Cashu is not yet production-ready.", "cashuExperiment": "Cashu is still experimental.", "claiming": "Claiming...", "processingInvoice": "Processing invoice...", "nfcPayment": "NFC Payment", "nfcKeepNearTerminal": "Keep your phone near the terminal", "nfcSelectMaxAmount": "Select maximum amount", "noLimit": "No limit", "custodialRisk": "Custodial risk, mints hold the keys.", "custodialRiskContent": "With eNuts, you don't hold the keys to the Bitcoin; the mint acts as the custodian. Therefore, if you lack trust in a mint, it's advisable to avoid interacting with it.", "disclaimer": "Please note that this is beta version in its early stage and is still undergoing testing before its official release. The software and all content found on it are provided on an “as is” and “as available” basis. We do not give any warranties, whether express or implied, as to the suitability or usability of the software or any of its content.", "enutsDisclaimer": "eNuts is unfinished beta software.", "lossContent": "Cashu tokens are bearer tokens, implying that if you lose access to them, there is no recovery option implemented yet. eNuts stores your tokens in your device. Before deleting the app, ensure you back up your tokens.", "lossOfTokens": "Loss of funds.", "enutsMint": "The default eNuts mint", "mintDisclaimer": "The usage of the default eNuts mint is entirely at your own risk. We strongly encourage you to exercise caution and only use it for experimental or educational purposes. There are no guarantees regarding its functionality, security, or availability, and it may vanish without notice. Deposits made to this mint should be considered as donations and may not be returned, potentially used for further development. Be aware of the risks associated with beta software, and it's your responsibility to safeguard your assets while using this mint.", "paidOut": "Paid out", "pasteToken": "Redeem Ecash", "payInvoice": "Pay invoice", "payLNInvoice": "Pay Lightning invoice", "receive": "Receive", "send": "Send", "proofs": "Proofs", "swapped": "Swapped" } } ================================================ FILE: assets/translations/es.json ================================================ { "addrBook": { "addOwnNpub": "Añadir tu NPUB", "favorite": "Favoritos", "removeFav": "Quitar de favoritos", "copyNpub": "Copiar NPUB", "npubCopied": "¡NPUB copiada!", "receiverNoLnurl": "El receptor no tiene LNURL", "noResults": "Sin resultados" }, "auth": { "confirmAction": "Por favor, confirma esta acción.", "createPin": "Crear PIN", "editPin": "Editar PIN", "pinMismatch": "¡PIN incorrecto!", "pinSetup": "Puedes establecer un PIN para proteger la aplicación (opcional).", "pleaseConfirm": "Por favor, confirma tu PIN.", "pleaseConfirmNewPin": "Por favor, confirma tu nuevo PIN.", "pleaseEnter": "Por favor, introduce tu PIN.", "pleaseNewPin": "Por favor, introduce tu nuevo PIN.", "removePin": "Eliminar PIN", "welcome": "Bienvenido", "welcomeBack": "¡Bienvenido de nuevo!" }, "bottomNav": { "wallet": "Cartera", "contacts": "Contactos" }, "common": { "confirmReset": "Restablecer billetera", "copy": "Copiar", "cycle": "Ciclo", "findMint": "Buscar ceca", "manualCounterIncrease": "Incrementar contadores", "manualCounterIncreaseHint": "Los contadores se incrementan automáticamente después de cada transacción, pero en casos raros, esto puede fallar, lo que lleva a errores durante el proceso de restauración. Elevar manualmente los contadores puede resolver el estado.", "increaseCounterHint": "¿Estás seguro de que quieres incrementar los contadores? Esto solo debe hacerse si estás seguro de que los contadores no están sincronizados.", "noMintForCounter": "No tienes cecas para incrementar los contadores.", "counterIncreased": "¡Contadores incrementados en {{counterIncreased}}!", "doneSafety": "Casi terminado... Verificación de seguridad", "restoreErr": "Ocurrió un error al restaurar tu cartera.", "noProofsRestored": "No se encontraron pruebas para restaurar la cartera.", "dontClose": "Por favor, no cierre la aplicación durante el proceso.", "recoveryHint": "Escribe o pega tu mnemotecnia de 12 palabras en el orden correcto, separadas por espacios en blanco.", "walletRecovery": "Recuperación", "walletRecoveryHint": "Utiliza una copia de seguridad de la semilla para restaurar tu cartera.", "seedBackup": "Seguridad de la semilla", "12WordMnemonic": "12 palabras", "secureWallet": "Cartera segura", "secureWalletHint": "Genera y anota una copia de seguridad de la semilla para asegurar tu cartera.", "quickWallet": "Cartera rápida", "quickWalletHint": "Crea una nueva cartera al instante. La copia de seguridad de la semilla se puede generar más tarde.", "skipSeedHint": "Puedes omitir este proceso y generar una copia de seguridad de la semilla más tarde.", "mnemonicHint": "La frase de semilla nunca se mostrará de nuevo. Escríbela y nunca la compartas con nadie.", "confirmMnemonicErr": "¡Palabra incorrecta! Asegúrate de escribir correctamente tu frase de semilla en el orden correcto.", "selectRestoreMint": "Por favor, seleccione la ceca que se utilizará para restaurar sus fondos.", "recoveringWallet": "La ceca está restaurando sus fondos...", "seedEnabled": "¡Recuperación de semilla habilitada!", "confirmSeed": "Por favor, confirma tu semilla escribiendo la palabra correcta.", "about": "Acerca de", "aboutToLeaveTo": "Estás a punto de salir", "accept": "Aceptar", "amount": "Cantidad", "back": "Volver", "backToDashboard": "Volver al panel de control", "balance": "Saldo", "balanceAfterTX": "Mint saldo tras la transacción", "balTooLow": "Saldo insuficiente", "bigQrMsg": "La cantidad de datos es demasiado grande para un código QR.", "calculateFeeEst": "Calculando comisión", "cancel": "Cancelar", "cashOut": "Retirar efectivo", "cashOutFromMint": "Retirar efectivo de la ceca", "change": "Cambiar", "claimed": "reclamado", "restored": "restaurado", "claimSuccess": "Reclamado {{amount}} Sats:\n{{mintUrl}}\nNota: {{memo}}", "claimToken": "Reclamar token", "clear": "Limpiar", "clipboardInvalid": "¡Hay un token Cashu inválido en el portapapeles!", "coinSelection": "Selección de monedas", "confirm": "Confirmar", "contact": "Contactar", "mintDelErr": "No se puede eliminar una ceca con saldo restante", "continue": "Continuar", "copied": "Copiado", "shareInvoice": "Compartir recibo", "copyToken": "Copiar token", "createInvoice": "Crear recibo", "createToken": "Crear token", "createTokenErr": "No se pudo crear un token Cashu. Por favor, reinténtalo más tarde.", "eventError": "Algo falló al publicar el evento.", "createViaLn": "Crear recibo", "darkMode": "Modo Noche", "lightMode": "Modo Claro", "autoMode": "Modo Automático", "dbErr": "¡Algo falló al inicializar la base de datos!", "deepLinkErr": "No se pudo abrir el link", "default": "Por defecto", "delHistory": "Eliminar historial", "factoryReset": "Restablecer configuración de fábrica", "delHistoryErr": "No se pudo eliminar el historial.", "delHistoryQ": "¿Eliminar historial?", "resetQ": "¿Restablecer la cartera?", "delHistoryTxt": "Los datos no podrán recuperarse después.", "display": "Pantalla", "disclaimer": "Advertencia", "restoreBattery": "Al menos 20% de batería.", "restoreBatteryHint": "Recomendamos que tenga al menos un 20% de batería antes de iniciar el proceso de recuperación. Dependiendo de la cantidad de datos, el proceso puede llevar un tiempo.", "restoreWifi": "Usa Wi-Fi.", "restoreWifiHint": "Recomendamos que utilice una conexión Wi-Fi estable para el proceso de recuperación para evitar cualquier interrupción y garantizar una recuperación rápida y segura.", "restoreForeground": "Mantén la aplicación en primer plano.", "restoreForegroundHint": "Por favor, mantenga la aplicación en primer plano y no la cierre durante el proceso de recuperación para evitar cualquier interrupción.", "seedMigrationHint": "La semilla se aplica a todas las acuñaciones con las que interactúas, así que anota las URL de las acuñaciones que usas con frecuencia. Si tienes saldo, crea y reclama un token con la acuñación deseada después de generar una semilla. Repite para cada acuñación que desees respaldar.", "ecashPayment": "Pagar Ecash", "english": "Inglés", "spanish": "Español", "swahili": "Suajili", "hungarian": "Húngaro", "italian": "Italiano", "russian": "Ruso", "thai": "Tailandés", "chinese simplified": "Chino (Simplificado)", "chinese traditional": "Chino (Tradicional)", "enutsRandD": "Telegram eNuts", "estimatedFees": "Comisión estimada", "estimateFee": "Estimar comisión", "expired": "Expirado", "fee": "Comisión", "swapFee": "Comisión de intercambio", "feeErr": "No se pudo estimar la comisión. ¿Es \"{{input}}\" una LNURL valida?", "foundCashuClipboard": "Token Cashu detectado", "french": "Francés", "from": "desde", "fromMint": "desde la siguiente ceca", "sendingFrom": "Enviando desde", "german": "Alemán", "github": "GitHub", "githubIssues": "Reportar bugs en Github", "reportIssue": "Reportar un problema", "shareOrReport": "Compartir opiniones o reportar bugs", "historyDeleted": "Historial eliminado", "invalidInvoice": "Recibo inválido", "invalidOrSpent": "Token inválido o reclamado", "invalidToken": "Token inválido", "invoice": "Recibo", "invoiceExpired": "Recibo expirado", "invoiceInclFee": "Recibo incl. comisión", "invoiceOrLnurl": "Recibo LN o LNURL", "invoiceOrLnAddress": "Factura o Dirección", "keysetID": "Keyset ID", "language": "Idioma", "currency": "Moneda", "currencyConversion": "Conversión de moneda", "showFiatBalance": "Mostrar saldo en fiat", "showFiatBalanceDesc": "Muestra tu saldo y cantidades en tu moneda fiat seleccionada", "selectCurrency": "Seleccionar moneda", "lastUpdate": "Actualizado", "loadingRates": "Cargando tipos de cambio...", "ratesUnavailable": "Tipos de cambio no disponibles", "ratesUnavailableDesc": "No se pudieron cargar los tipos de cambio. Por favor, comprueba tu conexión a internet e inténtalo de nuevo.", "ratesRequiredForFiat": "Se requieren tipos de cambio para habilitar la visualización en fiat", "noCurrenciesAvailable": "No hay monedas disponibles. Por favor, reintenta cargar los tipos de cambio.", "retry": "Reintentar", "lnInvoice": "Recibo Lightning", "lnPayment": "Pago Lightning", "mint": "Ceca", "minted": "acuñado", "multimintSwap": "Intercambio multiceca", "n/a": "No disponible", "name": "Nombre", "no": "No", "noCamAccess": "Sin acceso a la cámara", "noFunds": "No hay fondos suficientes", "noFundsForFee": "No hay fondos suficientes. Por favor, deja margen para posibles comisiones: ~{{fee}} Sats", "noMint": "No se encontró ninguna ceca", "notQrCode": "¡No es un código QR!", "noTX": "No hay transacciones todavía", "activity": "Actividad", "allHistory": "Todo", "optionalMemo": "Nota opcional", "paste": "Pegar", "paymentPending": "Pago pendiente", "paymentSuccess": "¡Pagado con éxito!", "nostrPaymentSuccess": "¡Enviado!", "paymentType": "Tipo de pago", "payWithLn": "Pagar con tu cartera LN", "preferences": "Preferencias", "readme": "Léeme", "sender": "Remitente", "recipient": "Receptor", "reqTimeout": "Tiempo de espera de la solicitud de red agotado", "restore": "Restaurar", "save": "Guardar", "scanAgain": "Escanear de nuevo", "scan": "Escanear", "scanQR": "Escanear QR", "qrScanHint": "Coloca el código QR dentro del marco", "qrScanFormats": "Cashu, Lightning, LNURL o Bitcoin", "qrScanReady": "Listo para escanear", "qrScanPaused": "Escaneo en pausa", "animatedQrProgress": "Progreso del QR animado", "receivingAnimatedQr": "Recibiendo QR animado", "unsupportedFormat": "Formato no compatible", "cashuPaymentRequestQrUnsupported": "Las solicitudes de pago Cashu aún no son compatibles desde QR", "bitcoinAddressPaymentsUnsupported": "Los pagos a direcciones Bitcoin no son compatibles", "cameraAccessRequired": "Se requiere acceso a la cámara", "cameraAccessDenied": "Acceso a la cámara denegado", "cameraAccessRequiredHint": "Necesitamos acceso a la cámara para escanear códigos QR de pagos y tokens.", "cameraAccessDeniedHint": "Activa el acceso a la cámara en los ajustes del dispositivo para escanear códigos QR.", "allowCameraAccess": "Permitir acceso a la cámara", "openSettings": "Abrir ajustes", "seconds": "segundos", "selectAmount": "Seleccionar cantidad", "selected": "Seleccionado", "selectMint": "Seleccionar una ceca desde la que enviar", "selectMints": "Seleccionar cecas", "sendEcash": "Enviar Ecash", "share": "Compartir", "submitPaymentReq": "Retirar efectivo", "to": "para", "today": "Hoy", "tokenInfoErr": "Error al obtener la información del token", "totalInclFee": "Total incl. comisiones", "reservedTotal": "Total reservado", "trustMint": "¿Quieres fiarte de esta ceca?", "tryLater": "Por favor, reinténtalo más tarde.", "unknownType": "Desconocido", "version": "Versión", "viewMnemonic": "Ver Mnemónico", "wallet": "Cartera", "willDoLater": "Dejar para después", "yes": "Sí", "invalidPubKey": "¡Clave pública inválida!", "walletLocked": "Cartera bloqueada", "explainer1": "eNuts es una cartera custodia de Lightning, permite hacer transacciones de forma privada e instantánea usando el protocolo Cashu. Tus fondos son custodiados por las cecas con las que interactúas, y el Ecash se almacena de manera local en tu dispositivo.", "explainer2": "Cashu es un nuevo protocolo de Ecash para aplicaciones custodias de Bitcoin, donde las cecas son nodos Lightning que llevan a cabo transacciones de Bitcoin y te ofrecen Ecash. Estate tranquilo, las cecas no son conscientes de tus pagos en Ecash.", "explainer3": "Simplemente añade una ceca vía URL y paga un recibo Lightning para obtener Ecash. eNuts te guía, te permite recibir desde cualquiera al instante y, con tu permiso, añade automáticamente cecas relacionadas. Intercambia fondos entre cecas y envía Ecash una vez tengas saldo.", "send&receive": "Enviar y recibir", "contactsNostr": "Contactos y Nostr", "nostrExplainer": "La implementación Nostr permite la sincronización perfecta de tus contactos sin tener que ingresar tu clave privada, ya que generamos una nueva para tí. Tus datos se muestran usando tu clave pública, mientras que la nueva clave privada encripta/descifra tus mensajes.", "send": "Enviar", "sendEcashDashboard": "Crear un token Cashu y envíalo a quien quieras.", "payInvoiceDashboard": "Envía tus fondos a un nodo Lightning.", "receiveEcashDashboard": "Pega y redime un token Cashu desde el portapapeles.", "receiveEcashNostr": "Mensajes en Nostr", "receiveEcashNostrHint": "Busca Ecash en tus mensajes personales de Nostr.", "createInvoiceDashboard": "Recibe Ecash pagando un recibo Lightning.", "hideNuts": "Esconder saldo", "checkingDms": "Buscando Ecash en tus mensajes personales...", "clearOverHere": "¡Todo despejado por aquí!", "totalDmsReceived": "Has recibido {{totalDms}} tokens Cashu.", "swapNow": "Intercambiar ahora", "swap": "Intercambiar", "emptyMint": "La ceca no tiene fondos", "zapSoon": "Zaps, disponibles próximamente...", "enutsPub": "Clave pública eNuts: ", "seeFullHistory": "Ver el historial de transacciones completo", "next": "Siguiente", "skip": "Saltar", "donateLn": "Donar", "supportHint": "Cada contribución, no importa el tamaño, tiene un impacto significativo. La pantalla de confirmación está en desarrollo.", "newToken": "Nuevo token Cashu", "disclaimerHint": "Esta advertencia debe ser tomada en serio y no ser ignorada o subestimada. Apreciamos tu interés en este proyecto y continuaremos trabajando en mejorarlo.", "searchContacts": "Busca o escribe una NPUB", "submit": "Enviar", "clearMetadataCache": "Limpiar caché de metadatos", "clearMetadataCacheHint": "¿Limpiar caché de metadatos?", "clearImageCache": "Limpiar caché de imágenes", "clearImageCacheHint": "¿Limpiar caché de imágenes?", "pullRefresh": "Desliza para actualizar", "processTestPay": "Procesando pago de prueba...", "confirmMint": "Confirmar nueva ceca", "confirmMintHint": "¿Seguro que quieres añadir esta ceca?", "npubAlreadyAdded": "La NPUB ya ha sido añadida", "replaceNpub": "Reemplazar NPUB", "replaceNpubTxt": "¿Seguro que quieres reemplazar la NPUB actual?", "npubAdded": "¡NPUB añadida!", "showContacts": "Mostrar contactos", "topUpNow": "Obtener Ecash ahora", "scanAnother": "Escanear otro código QR", "deleteNpub": "¿Eliminar NPUB?", "delNpubHint": "Todos los contactos y datos relacionados serán eliminados.", "addNewNpub": "¿Añadir una nueva NPUB?", "addNpubHint": "Esto eliminará todos los datos asociados con tu NPUB actual.", "zap": "Zap", "zapNow": "Enviar Zap", "meltNostrProfileHint": "Transfiere fondos a la dirección LN asociada con tu perfil de Nostr.", "nostrDmHint": "eNuts no puede acceder a los mensajes directos de tu cuenta de Nostr porque no tiene acceso a tu clave privada. En su lugar, genera una nueva clave para enviar el Ecash. Cuando envías Ecash vía Nostr, el receptor lo recibe con tu nueva clave pública de eNuts. Si el receptor responde al mensaje directo con un token Ecash, lo podrás ver aquí. Estamos trabajando activamente en una solución segura para la clave privada.", "nostrIssueHeader": "Problema en los contactos de Nostr", "nostrIssueHint": "Si estás teniendo problemas al abrir tus contactos de Nostr, haz click en el botón de abajo o restablece los datos de Nostr en \"opciones > contactos > restablecer datos ahora\" para resolver el problema.", "submitNostrIssue": "Restablecer datos ahora", "nostrIssueSuccess": "¡Éxito al restablecer los datos de Nostr!", "createLnInvoice": "Crear un recibo Lightning", "metadataCacheCleared": "Caché de metadatos limpiada", "imageCacheCleared": "Caché de imágenes limpiada", "leaveGithubStar": "Apóyenos con una estrella en Github", "alreadySpentHint": "Algunas pruebas en su saldo han sido gastadas o reclamadas en otro lugar. Resuelva esto eliminando las pruebas en 'Opciones' > 'Gestión de ceca' > 'Comprobar pruebas'.", "useNpub": "Usar NPUB", "autoSwapToDefaulMint": "Cambiar a la ceca por defecto", "trustMintOpt": "Confiar en la ceca", "swapHint": "Esta opción requiere un pago Lightning, implica una tarifa y aún puede agregar la ceca desconocida a la lista si se produce un reembolso de tarifa.", "trustHint": "La ceca asociada al token se añadirá a tu lista de confianza.", "noDefaultHint": "Necesitas configurar una ceca predeterminada para realizar un intercambio automático.", "autoSwapSuccess": "¡Intercambio exitoso!", "paidInvoice": "Se ha pagado {{ count }} factura con un importe total de {{ total }} Sats", "paidInvoices": "Se han pagado {{ count }} facturas con un importe total de {{ total }} Sats", "checkPayment": "Comprobar pago", "lnPaymentSpamHint": "Por favor, espere {{ remainingSeconds }} segundos para aliviar la Mint.", "shareEnuts": "Comparte eNuts con alguien", "supportUs": "Apóyanos", "justNow": "Ahora mismo", "hoursAgo": "hace {{count}} horas", "yesterday": "Ayer", "awaitingPayment": "Esperando pago", "receivedFromMint": "Recibido de la ceca", "status": "Estado", "unit": "Unidad", "quoteId": "ID de cotización", "nfcPaymentLimits": "Límites de pago", "nfcPaymentLimitsDesc": "Establecer límites de cantidad predeterminados y personalizados para pagos NFC", "amountLimits": "Límites de cantidad", "amountLimitsDesc": "Toca para establecer como predeterminado, mantén pulsado para eliminar", "noLimit": "Sin límite", "noLimitDesc": "Confirmar cualquier cantidad", "deleteAmount": "Eliminar cantidad", "deleteAmountConfirm": "¿Estás seguro de que quieres eliminar {{amount}} sats de tus cantidades de selección rápida?", "delete": "Eliminar", "resetToDefaults": "Restablecer valores predeterminados" }, "error": { "checkSpendableErr": "Error al comprobar si el token puede ser gastado", "claimTokenErr": "Error al reclamar el token", "sendTokenErr": "Error al enviar el token", "header": "Ocurrió un error", "msg": "Sentimos que hayas experimentado este problema. Puedes ayudarnos a mejorar el programa realizando una captura de pantalla y creando un pequeño informe de errores.", "reportBug": "Reportar el bug", "requestMintErr": "Error al solicitar el recibo a la ceca.", "stackNA": "Error, proceso no disponible", "generalMeltingErr": "La ceca no pudo encontrar una ruta de pago Lightning funcional hasta tu nodo.", "invoiceFromLnurlError": "No se pudo crear un recibo utilizando tu LNURL.", "invoiceScanError": "No se pudo usar el recibo del código QR escaneado." }, "history": { "checkSpent": "Comprueba si el token ha sido gastado", "isPending": "El token está pendiente", "isSpent": "El token ha sido gastado", "justNow": "Ahora mismo", "hoursAgo": "hace {{count}} horas", "yesterday": "Ayer", "memo": "Nota", "nHrsAgo": "Hace {{hrs}} horas", "nMinsAgo": "Hace {{mins}} minutos", "noMemo": "Sin nota", "oneHrAgo": "Hace 1 hora", "oneMinAgo": "Hace 1 minuto", "paymentHash": "Hash del pago", "settleTime": "Tiempo de resolución", "showQr": "Mostrar código QR", "receive": "Recibir", "send": "Enviar", "melt": "Fundir", "receivedEcash": "Ecash recibido", "sentEcash": "Ecash enviado", "paidInvoice": "Factura pagada", "details": "Detalles", "date": "Fecha", "amount": "Cantidad", "token": "Token" }, "mints": { "addCustomName": "Añadir nombre personalizado", "additionalInfo": "Información adicional", "addMintBtn": "Añadir ceca", "addNewMint": "Añadir nueva ceca", "atLeast2Mints": "Necesitas al menos 2 cecas para realizar un intercambio multiceca.", "awaitingInvoice": "Esperando recibo", "cashOutAmountHint": "Puede acarrear comisiones Lightning, por lo que se añadirá una comisión estimada. Cualquier comisión pagada de más será reembolsada.", "checkProofs": "Comprobar pruebas", "checkProofsQ": "¿Comprobar todas las pruebas?", "checkProofsTxt": "Esto comprobará si tus tokens pueden ser gastados y de lo contrario los eliminará.", "chooseMeltMintHint": "Elige la ceca desde la que quieres retirar tus fondos.", "chooseMintHint": "Elige la ceca desde la que quieres recibir Ecash. La ceca se convertirá en custodia de tus fondos.", "chooseTarget": "Elige el receptor del pago.", "coinSelectionHint": "Tu saldo de Ecash es esencialmente una colección de sets de monedas. La selección de monedas te permite elegir las monedas que quieres utilizar. Los sets de monedas tienen una keyset-ID asignada por la ceca, la cual puede cambiar con el tiempo. Los keysets añadidos recientemente están destacados en verde. Es aconsejable utilizar primero los sets más antiguos.", "creatingEcashToken": "El token Cashu está siendo creado", "sendingEcashViaNostr": "¡Enviando token Cashu vía Nostr!", "customName": "Nombre personalizado", "cutomNameAdded": "Se añadió un nombre personalizado", "dangerZone": "Zona de Peligro", "deletedProofs": "Eliminadas {{proofsToDel}} pruebas.", "delMint": "Eliminar ceca", "delMintSure": "¿Eliminar esta ceca?", "ecashAmountHint": "Selecciona la cantidad de Ecash que quieres enviar.", "editMintName": "Editar nombre de la ceca", "errDelProofs": "Algo salió mal al eliminar las pruebas.", "funds": "Fondos", "general": "General", "importantNotice": "Aviso importante", "inputField": "Recibo LN o LNURL", "invalidUrl": "URL inválida", "invoiceAmountHint": "Selecciona la cantidad de Ecash que deseas recibir. A continuación la ceca creará un recibo que deberás pagar usando una cartera Lightning.", "invoiceHint": "Esto puede llevar unos segundos...", "lowBal": "¡Saldo de la ceca muy bajo!", "metadata": "Metadatos", "meltAddressbookHint": "Elige tu propia LNURL o cualquier otro contacto como receptor del pago.", "meltInputHint": "Pega la factura de Lightning, la LN-URL o la dirección de Lightning.", "meltScanQRHint": "Crea un recibo Lightning con otro dispositivo y simplemente escanéalo.", "meltSwapHint": "Elige otra ceca de tu lista de confianza como receptora del pago.", "copyShareToken": "Copiar y compartir rápido", "copyShareTokenHint": "Copia el token generado y compártelo a través de cualquier aplicación de mensajería.", "sendNostr": "Enviar vía Nostr", "sendNostrHint": "Envía Ecash directamente a uno de tus contactos en Nostr.", "meltToken": "Retirar efectivo", "mintConnectionFail": "Falló la conexión a la ceca", "mintInfo": "Información de la ceca", "mintNewTokens": "Obterner Ecash", "mintNoContact": "La ceca no dispone de información de contacto", "mntAlreadyAdded": "La ceca ya ha sido añadida", "noAdditional": "Esta ceca no dispone de información adicional", "noInfo": "La ceca no dispone de información", "noProofs": "No se encontraron pruebas para esta ceca.", "paymentOverview": "Información general del pago", "processingPaymentByMint": "La ceca está procesando el pago de acuerdo con tu solicitud", "processingSwap": "Procesando intercambio multiceca de acuerdo con tu solicitud", "pubKey": "Clave pública", "removeDefault": "Quitar de por defecto", "scanQR": "Escanear un código QR", "sendEcashHint": "Elige una ceca desde la que te gustaría crear un token Cashu.", "setDefault": "Establecer como ceca por defecto", "supportedNuts": "NUTs compatibles", "swapNotAllowed": "No es posible retirar de una ceca de prueba.", "zapNotAllowed": "No es posible enviar Zaps desde una ceca de prueba.", "testMintHint": "Esta es una ceca de prueba para jugar un poco. ¿Añadir igualmente?", "trustMintSure": "¿Confiar en esta ceca?", "updatedDefault": "Ceca por defecto actualizada", "newMintAdded": "¡Ceca añadida!", "newMintAddedQuestion": "¿Quieres recibir Ecash ahora?", "selectSwapReceiver": "Selecciona una ceca como receptora del pago.", "prepairZapData": "Preparando los datos de la transacción...", "lastUpdated": "Última actualización", "mintInfoUpdated": "¡Información de la ceca actualizada!", "mintInfoUpdateFailed": "Error al actualizar la información de la ceca", "npcSettings": "Lightning address", "npcDefaultAccount": "Default", "npcTapToCopy": "Tap to copy", "npcUsernameLabel": "Custom username", "npcUsernamePlaceholder": "optional username", "npcPurchaseUsername": "Save username", "npcSetUsername": "Set Username", "npcRequestUsername": "Request username", "npcUsernameFeePrompt": "Do you want to set this username for a fee of {{amount}} sats?", "npcReceiveTitle": "NPC Lightning addresses", "npcReceiveHint": "Receive Lightning payments into your local Cashu wallet.", "npcAccountsLabel": "Accounts", "npcLocalBalance": "Local balance", "npcReceiveAddress": "Receive address", "npcSeedKey": "Seed key", "npcImportedKey": "Imported key", "npcActive": "Active", "npcSyncing": "Syncing", "npcPaused": "Paused", "npcNpubFallback": "Using your npub until a username is saved", "npcSyncAll": "Sync all", "npcSynced": "NPC account synced", "npcAccountAdded": "NPC account added", "npcAccountRemoved": "NPC account removed", "npcUsernameSaved": "Username saved", "npcAddAccountTitle": "Add NPC account", "npcAddAccountHint": "Import an existing Nostr key or derive a new key from your seed.", "npcPrivateKeyLabel": "Private key", "npcPrivateKeyPlaceholder": "nsec or hex", "npcPrivateKeyHint": "Imported keys are stored in secure storage on this device.", "npcPrivateKeyRequired": "Enter an nsec or hex private key.", "npcImportPrivateKey": "Import private key", "npcDeriveAccount": "Derive new key" }, "topNav": { "about": "Sobre nosotros", "addressBook": "Agenda de contactos", "advancedFunctions": "Funciones avanzadas", "display": "Visualización", "history": "Historial de transacciones", "language": "Idioma", "currency": "Moneda", "mintSettings": "Gestión de ceca", "nfcSettings": "Configuración NFC", "npcSettingsTitle": "Lightning address", "security": "Seguridad", "settings": "Opciones", "privacy": "Privacidad", "general": "General" }, "wallet": { "cashuContent": "El autor de Cashu no es un criptógrafo y el protocolo está todavía bajo revisión. Esto supone ciertas reservas sobre la posible existencia de fallos críticos. Como resultado, Cashu no está listo todavía para su uso en producción.", "cashuExperiment": "Cashu está todavía en fase experimental.", "claiming": "Reclamando...", "processingInvoice": "Procesando recibo...", "nfcPayment": "Pago NFC", "nfcKeepNearTerminal": "Mantén tu teléfono cerca del terminal", "nfcSelectMaxAmount": "Seleccionar cantidad máxima", "noLimit": "Sin límite", "custodialRisk": "Riesgos custodios, las cecas poseen las claves.", "custodialRiskContent": "Con eNuts, no posees las claves de tus Bitcoins; las cecas actuan como custodias. Por lo tanto, si no confías en una ceca, lo más aconsejable es evitar interactuar con ella.", "disclaimer": "Por favor, ten en cuenta que esto es una verión beta en sus primeros estadios de desarrollo y que todavía está bajo pruebas supervisadas antes de su lanzamiento oficial. El programa y todo su contenido se ofrecen de forma “como está” y “como disponible”. No ofrecemos garantías, ni implícitas ni explícitas, sobre la sostenibilidad o usabilidad del programa ni de ninguno de sus contenidos..", "enutsDisclaimer": "eNuts es un programa en fase beta incompleta.", "lossContent": "Los tokens Cashu son tokens al portador, lo que implica que si pierdes acceso a ellos, no existe posibilidad de recuperación implementada todavía. eNuts guarda tus tokens en tu dispositivo. Antes de eliminar la aplicación, asegúrate de realizar una copia de seguridad de tus tokens.", "lossOfTokens": "Perdida de fondos.", "enutsMint": "La ceca por defecto de eNuts", "mintDisclaimer": "El uso de la ceca por defecto de eNuts es completamente a tu cuenta y riesgo. Recomendamos encarecidamente que ejercites la cautela y la uses únicamente con fines experimentales o educativos. No existen garantías sobre su funcionalidad, seguridad o disponibilidad, y puede desaparecer sin aviso previo. Los depósitos hechos a esta ceca deben ser considerados como donativos y es posible que no sean devueltos, y, potencialmente, sean usados para posterior desarrollo del programa. Sé consciente de los riesgos asociados con programas en fase beta, es tu responsabilidad garantizar la seguridad de tus activos al usar esta ceca.", "paidOut": "Pagado", "pasteToken": "Redimir Ecash", "payInvoice": "Pagar recibo", "payLNInvoice": "Pagar recibo Lightning", "receive": "Recibir", "send": "Enviar", "proofs": "Pruebas", "swapped": "Intercambiado" } } ================================================ FILE: assets/translations/it.json ================================================ { "addrBook": { "addOwnNpub": "Aggiungi la tua NPUB", "favorite": "Preferito", "removeFav": "Rimuovi preferito", "copyNpub": "Copia NPUB", "npubCopied": "NPUB copiata!", "receiverNoLnurl": "Il destinatario non ha un LNURL", "noResults": "Nessun risultato" }, "auth": { "confirmAction": "Confermare l'azione.", "createPin": "Creare PIN", "editPin": "Modifica PIN", "pinMismatch": "PIN non corretto!", "pinSetup": "E' possibile impostare un PIN per mettere in sicurezza l'applicazione (opzionale).", "pleaseConfirm": "Conferma PIN.", "pleaseConfirmNewPin": "Conferma nuovo PIN.", "pleaseEnter": "Inserisci PIN.", "pleaseNewPin": "Inserisi nuovo PIN.", "removePin": "Elimina PIN", "welcome": "Benvenuto", "welcomeBack": "Ben tornato!" }, "bottomNav": { "wallet": "Portafoglio", "contacts": "Contatti" }, "common": { "confirmReset": "Ripristina portafoglio", "copy": "Copia", "cycle": "Cycle", "findMint": "Trova una mint", "manualCounterIncrease": "Incrementa contatori", "manualCounterIncreaseHint": "I contatori aumentano progressivamente in automatico dopo ogni transazione, tuttavia ciò potrebbe fallire in rare occasioni, portando ad errori durante il processo di ripristino del portafoglio. Incrementare manualmente i contatori potrebbe risolvere eventuali errori.", "increaseCounterHint": "Incrementare i contatori? L'incremento manuale dovrebbe essere fatto solo se i contatori non sono sincronizzati", "noMintForCounter": "Non ci sono mint per cui incrementare i contatori.", "counterIncreased": "Contatori incrementati di {{counterIncreased}}!", "doneSafety": "Processo quasi terminato... controllo di sicurezza", "noProofsRestored": "Non ci sono prove utili per ripristinare il portafoglio.", "restoreErr": "Qualcosa è andato storto durante il processo di ripristino del portafoglio.", "dontClose": "Non chiudere l'applicazione durante il processo.", "recoveryHint": "Scrivere o incollare la mnemonica di 12 parole, separate da uno spazio bianco.", "walletRecovery": "Ripristino del portafoglio", "walletRecoveryHint": "Utilizzare la mnemonica di backup per ripristinare il portafoglio", "seedBackup": "Backup della mnemonica", "12WordMnemonic": "Mnemonica di 12 parole", "secureWallet": "Proteggere il portafoglio", "secureWalletHint": "Generare ed annotare un backup della mnemonica per proteggere il portafoglio.", "quickWallet": "Generare portafoglio", "quickWalletHint": "Creare istantaneamente un nuovo portafoglio. La mnemonica di backup può essere generata in un secondo momento.", "skipSeedHint": "E' possibile saltare questi passaggi e generare la mnemonica di backup in un secondo momento.", "mnemonicHint": "La mnemonica verrà rivelata solo una volta. Annotarla e non condividerla con nessuno.", "confirmMnemonicErr": "Parola errata! Assicurarsi di aver annotato le parole corrette e nell'ordine giusto.", "selectRestoreMint": "Selezionare la mint che verrà utilizzata per recuperare i fondi.", "recoveringWallet": "La mint sta ripristinando i fondi....", "seedEnabled": "Mnemonica di recupero abilitata!", "confirmSeed": "Confermare la mnemonica inserendo la parola corretta.", "about": "Informazioni", "aboutToLeaveTo": "Uscita dall'applicazione", "accept": "Accetta", "amount": "Importo", "back": "Indietro", "backToDashboard": "Tornare alla dashboard", "balance": "Saldo", "balanceAfterTX": "Saldo della mint dopo la TX", "balTooLow": "Saldo troppo basso", "bigQrMsg": "Il quantitativo di dati è eccessivo per un codice QR.", "calculateFeeEst": "Calcolo delle commissioni", "cancel": "Cancella", "cashOut": "Preleva fondi", "cashOutFromMint": "Preleva dalla mint", "change": "Resto", "claimed": "riscattato", "restored": "ripristinato", "claimSuccess": "Riscattati {{amount}} Sats::\n{{mintUrl}}\nMemo: {{memo}}", "claimToken": "Riscatta token", "clear": "Cancella", "clipboardInvalid": "Gli appunti del dispositivo contengono un token Cashu non valido!", "coinSelection": "Selezione delle monete", "confirm": "Conferma", "contact": "Contatto", "mintDelErr": "Non è possibile rimuovere una mint con salto residuo", "continue": "Continua", "copied": "Copiato", "shareInvoice": "Condividi richiesta di pagamento", "copyToken": "Copia token", "createInvoice": "Crea richiesta di pagamento", "createToken": "Crea Token", "createTokenErr": "Non è stato possibile creare un token cashu. Per favore, riprovare più tardi.", "eventError": "Qualcosa è andato storto durante la pubblicazione dell'evento.", "createViaLn": "Crea richiesta di pagamento", "darkMode": "Modalità notturna", "lightMode": "Modalità chiara", "autoMode": "Modalità automatica", "dbErr": "Qualcosa è andato storto durante l'inizializzazione del DB!", "deepLinkErr": "Non è stato possibile aprire il link", "default": "Predefinito", "delHistory": "Cancella lo storico", "factoryReset": "Ripristino dati di fabbrica", "delHistoryErr": "Non è stato possibile cancellare lo storico.", "delHistoryQ": "Cancellare lo storico?", "resetQ": "Azzerare il portafoglio?", "delHistoryTxt": "I dati non potranno essere recuperati successivamente.", "display": "Schermo", "disclaimer": "Avviso", "restoreBattery": "Almeno 20% di batteria.", "restoreBatteryHint": "Si raccomanda di avere almeno il 20% della batteria carica prima di inizializzare il ripristino. Il processo potrebbe durare a lungo, in base alla quantità di dati ", "restoreWifi": "Usare il Wi-Fi.", "restoreWifiHint": "Si raccomanda di utilizzare una connessione Wi-Fi stabile durante il ripristino, per evitare qualsiasi interruzione ed assicurare un recupero veloce e sicuro dei fondi.", "restoreForeground": "Mantienere l'applicazione in primo piano.", "restoreForegroundHint": "Per favore mantienere l'app in primo piano e non terminarla durante il processo di ripristino, così da evitare interruzioni.", "seedMigrationHint": "La mnemonica si applica a tutte le mint, tuttavia ogni mint necessita di un ripristino ad-hoc, dunque è consigliato di annotare frequentemente gli URL delle mint in uso. Se si possiedono fondi ma non ancora una mnemonica, creare un token dalla mint desiredata e riscattarlo dopo aveer generato la nuova mnemonica. Ripetere il processo per ogni mint di cui si vuole fare il backup.", "ecashPayment": "Pagamento ecash", "english": "Inglese", "swahili": "Swahili", "spanish": "Spagnolo", "hungarian": "Ungherese", "italian": "Italiano", "russian": "Russo", "thai": "Tailandese", "chinese simplified": "Cinese (Semplificato)", "chinese traditional": "Cinese (Tradizionale)", "enutsRandD": "eNuts Telegram", "estimatedFees": "Commissioni stimate", "estimateFee": "Stimare le commissioni", "expired": "Scaduto", "fee": "Commissioni", "swapFee": "Commissione di swap", "feeErr": "Non è stato possibile stimare le commissioni necessarie. \"{{input}}\" è un LNURL valido?", "foundCashuClipboard": "Token cashu rilevato", "french": "Francese", "from": "da", "fromMint": "dalla seguente mint", "sendingFrom": "Invio da", "german": "Tedesco", "github": "GitHub", "githubIssues": "Segnala bug su Github", "reportIssue": "Segnala un problema", "shareOrReport": "Condividi feedback o segnala bug", "historyDeleted": "Storico eliminato", "invalidInvoice": "richiesta di pagamento non valida", "invalidOrSpent": "Token non valido o già riscattato", "invalidToken": "Token non valido", "invoice": "richiesta di pagamento", "invoiceExpired": "richiesta di pagamento scaduta", "invoiceInclFee": "richiesta di pagamento (commissioni incluse)", "invoiceOrLnurl": "richiesta di pagamento LN o LNURL", "invoiceOrLnAddress": "Fattura o Indirizzo", "keysetID": "Keyset ID", "language": "Lingua", "currency": "Valuta", "currencyConversion": "Conversione valuta", "showFiatBalance": "Mostra saldo in fiat", "showFiatBalanceDesc": "Mostra il saldo e gli importi nella valuta fiat selezionata", "selectCurrency": "Seleziona valuta", "lastUpdate": "Aggiornato", "loadingRates": "Caricamento tassi di cambio...", "ratesUnavailable": "Tassi di cambio non disponibili", "ratesUnavailableDesc": "Impossibile caricare i tassi di cambio. Controlla la connessione internet e riprova.", "ratesRequiredForFiat": "Tassi di cambio necessari per abilitare la visualizzazione in fiat", "noCurrenciesAvailable": "Nessuna valuta disponibile. Riprova a caricare i tassi di cambio.", "retry": "Riprova", "lnInvoice": "richiesta di pagamento lightning", "lnPayment": "Pagamento lightning", "mint": "Mint", "minted": "creato", "multimintSwap": "Scambio tra mint", "n/a": "Non disponibile", "name": "Nome", "no": "No", "noCamAccess": "Nessun accesso alla fotocamera", "noFunds": "Fondi insufficienti", "noFundsForFee": "Fondi insufficienti, si prega di lasciare margine spazio per eventuali commissioni: ~{{fee}} sats.", "noMint": "Nessuna mint trovata", "notQrCode": "Non è un codice QR!", "noTX": "Nessuna transazione", "activity": "Attività", "allHistory": "Tutto", "optionalMemo": "Nota opzionale", "paste": "Incolla", "paymentPending": "Pagamento in sospeso", "paymentSuccess": "Pagamento avvenuto con successo!", "nostrPaymentSuccess": "inviato!", "paymentType": "Modalità di pagamento", "payWithLn": "Pagare con portafoglio LN", "preferences": "Preferenze", "readme": "Leggimi", "sender": "Mittente", "recipient": "Destinatario", "reqTimeout": "Errore di timeout per la richiesta di rete", "restore": "Ripristina", "save": "Salva", "scanAgain": "Scansiona ancora", "scan": "Scansiona", "scanQR": "Scansiona QR", "qrScanHint": "Posiziona il codice QR nel riquadro", "qrScanFormats": "Cashu, Lightning, LNURL o Bitcoin", "qrScanReady": "Pronto per la scansione", "qrScanPaused": "Scansione in pausa", "animatedQrProgress": "Avanzamento QR animato", "receivingAnimatedQr": "Ricezione QR animato", "unsupportedFormat": "Formato non supportato", "cashuPaymentRequestQrUnsupported": "Le richieste di pagamento Cashu da QR non sono ancora supportate", "bitcoinAddressPaymentsUnsupported": "I pagamenti a indirizzi Bitcoin non sono supportati", "cameraAccessRequired": "Accesso alla fotocamera richiesto", "cameraAccessDenied": "Accesso alla fotocamera negato", "cameraAccessRequiredHint": "Serve l'accesso alla fotocamera per scansionare codici QR di pagamenti e token.", "cameraAccessDeniedHint": "Abilita l'accesso alla fotocamera nelle impostazioni del dispositivo per scansionare codici QR.", "allowCameraAccess": "Consenti accesso fotocamera", "openSettings": "Apri impostazioni", "seconds": "secondi", "selectAmount": "Seleziona importo", "selected": "Selezionato", "selectMint": "Selezionare una mint da cui inviare", "selectMints": "Selezionare mint", "sendEcash": "Invia ecash", "share": "Condividi", "submitPaymentReq": "Preleva", "to": "a", "today": "Oggi", "tokenInfoErr": "Errore durante il recupero delle informazioni sul token", "totalInclFee": "Totale (commissioni incluse)", "reservedTotal": "Totale riservato", "trustMint": "Affidarsi a questa mint?", "tryLater": "Riprovare più tardi.", "unknownType": "Dato sconosciuto", "version": "Versione", "viewMnemonic": "Visualizza Mnemonico", "wallet": "Portafoglio", "willDoLater": "Più tardi", "yes": "Sì", "invalidPubKey": "Chiave pubblica non valida!", "walletLocked": "Portafoglio bloccato", "explainer1": "eNuts è un portafoglio lightning custodial, che permette transazioni istantanee e private grazie al protocollo Cashu. I fondi sono detenuti dalle mint con cui l'utente interagisce, i token ecash sono conservati localmente nel dispositivo.", "explainer2": "Cashu è un nuovo protocollo ecash per applicazioni custodial, dove le mint sono nodi lightning che eseguono transazioni bitcoin e forniscono ecash. La mint non è a conoscenza dei pagamenti ecash degli utenti.", "explainer3": "Per ricevere ecash è necessario semplicemente inserire una mint tramite URL e pagare una richiesta di pagamento lightning. eNuts permette di reicevere pagamenti istantanei da chiunque aggiungendo le mint con il permesso dell'utente. Scambiare i fondi tra le mint ed inviare ecash non appena si ha un saldo all'interno del portafoglio.", "send&receive": "Invia & ricevi", "contactsNostr": "Contatti & Nostr", "nostrExplainer": "L'integrazione con Nostr permette di sincronizzare i contatti senza la necessità di inserire la chiave privata, poichè eNuts ne genera una nuova. I dati sono mostrati utilizzando la chiave pubblica dell'utente, mentre la nuova chiave privata viene utilizzata per criptare/decriptare i messaggi.", "send": "Invia", "sendEcashDashboard": "Crea un token Cashu ed invialo a chi preferisci.", "payInvoiceDashboard": "Invia i tuoi fondi ad un nodo lightning.", "receiveEcashDashboard": "Incolla & riscatta un token Cashu dagli appunti.", "receiveEcashNostr": "Messaggi Nostr", "receiveEcashNostrHint": "Controlla i messaggi Nostr alla ricerca di ecash.", "createInvoiceDashboard": "Ricevi ecash pagando un richiesta di pagamento lightning.", "hideNuts": "Nascondere saldo", "checkingDms": "Verificando eventuali token ecash tra i messaggi...", "clearOverHere": "Niente di nuovo!", "totalDmsReceived": "{{totalDms}} token Cashu ricevuti.", "swapNow": "Scambiare adesso", "swap": "Scambiare", "emptyMint": "Mint senza fondi", "zapSoon": "Gli zap verranno aggiunti a breve...", "enutsPub": "Chiave pubblica di eNuts: ", "seeFullHistory": "Visualizzarere lo storico delle transazioni", "next": "Prossimo", "skip": "Salta", "donateLn": "Dona", "supportHint": "Ogni donazione, anche la più piccola, ha un impatto significativo. Grazie per il sostegno.", "newToken": "Nuovo token Cashu", "disclaimerHint": "Questo annuncio ha un'enorme importanza, non deve essere sottovalutato o ignorato. Apprezziamo il tuo interesse in questo progetto e continueremo a lavorare per migliorarlo.", "searchContacts": "Cerca o inserisci NPUB", "submit": "Invia", "clearMetadataCache": "Elimina la cache dei metadati", "clearMetadataCacheHint": "Eliminare la cache dei metadati?", "clearImageCache": "Elimina la cache dell'immagine", "clearImageCacheHint": "Eliminare la cache dell'immagine?", "pullRefresh": "Trascina per aggiornare", "processTestPay": "Processando il pagamento di test...", "confirmMint": "Confermare nuova mint", "confirmMintHint": "Sicuro di voler aggiungere questa mint?", "npubAlreadyAdded": "NPUB già aggiunta", "replaceNpub": "Sostituisci NPUB", "replaceNpubTxt": "Sicuro di voler sostituire l'NPUB attuale?", "npubAdded": "NPUB aggiunta!", "showContacts": "Mostra contatti", "topUpNow": "Ottieni Ecash ora", "scanAnother": "Scannerizza un altro codice QR", "deleteNpub": "Eliminare NPUB?", "delNpubHint": "Tutti i contatti e i dati correlati verranno eliminati.", "addNewNpub": "Aggiungere una nuova NPUB?", "addNpubHint": "Questa procedura cancellerà tutti i dati associati alla NPUB attuale.", "zap": "Zap", "zapNow": "Invia zap", "meltNostrProfileHint": "Trasferire fondi all'indirizzo LN associato al profilo Nostr.", "nostrDmHint": "eNuts non può accedere ai messaggi Nostr poichè non ha accesso alla chiave privata. eNuts genera una nuova chiave per inviare Ecash: quando del Ecash è inviato su Nostr, il destinatario lo riceve tramite la nuova chiave pubblica generata da eNuts. Se il ricevente risponde al messaggio con un token Ecash, sarà possibile visualizzare il token qui. Stiamo lavorando attivamente ad una soluzione sicura per la gestione di chiavi private Nostr", "nostrIssueHeader": "Si è verificato un errore riguardante i contatti Nostr", "nostrIssueHint": "Se non è possibile aprire la lista di contatti Nostr, cliccare il pulsante sotto o eseguire un reset dei dati Nostr in 'opzioni' > 'contatti' > 'ripristina dati' per risolvere il problema.", "submitNostrIssue": "Ripristina dati", "nostrIssueSuccess": "Reset dei dati Nostr terminato con successo!", "createLnInvoice": "Crea richiesta di pagamento Lightning", "metadataCacheCleared": "Cache dei metadati eliminata!", "imageCacheCleared": "Cache dell'immagine eliminata!", "leaveGithubStar": "Supportaci con una stella su Github", "alreadySpentHint": "Alcune prove che compongono il saldo sono state spese o riscattate altrove. Risolvere l'errore cancellando le prove in 'Opzioni' > 'Gestione mint' > 'Controlla prove'", "useNpub": "Usare NPUB", "autoSwapToDefaulMint": "Scambiare automaticamente con la mint di default", "trustMintOpt": "Affidarsi alla mint", "swapHint": "Questa opzione richiede un pagamento Lightning, un pagamento di commissioni e potrebbe aggiungere una mint sconosciuta alla lista mint.", "trustHint": "La mint associata al token verrà aggiunta alla lista di mint affidabili", "noDefaultHint": "Per eseguire un scambio automatico è necessario impostare una mint predefinita.", "autoSwapSuccess": "Scambio eseguito con successo!", "paidInvoice": "{{ count }} richiesta di pagamento pagata con un totale di {{ total }} Sat", "paidInvoices": "{{ count }} richieste di pagamento pagate con un totale di {{ total }} Sat", "checkPayment": "Controllare pagamento", "lnPaymentSpamHint": "Attendere {{ remainingSeconds }} secondi per evitare di sovraccaricare la mint.", "supportUs": "Supportaci", "shareEnuts": "Condividi eNuts con qualcuno", "justNow": "Adesso", "hoursAgo": "{{count}} ore fa", "yesterday": "Ieri", "awaitingPayment": "In attesa del pagamento", "receivedFromMint": "Ricevuto dalla mint", "status": "Stato", "unit": "Unità", "quoteId": "ID preventivo", "nfcPaymentLimits": "Limiti di pagamento", "nfcPaymentLimitsDesc": "Imposta limiti di importo predefiniti e personalizzati per i pagamenti NFC", "amountLimits": "Limiti di importo", "amountLimitsDesc": "Tocca per impostare come predefinito, tieni premuto per eliminare", "noLimit": "Nessun limite", "noLimitDesc": "Conferma qualsiasi importo", "deleteAmount": "Elimina importo", "deleteAmountConfirm": "Sei sicuro di voler rimuovere {{amount}} sats dai tuoi importi di selezione rapida?", "delete": "Elimina", "resetToDefaults": "Ripristina predefiniti" }, "error": { "checkSpendableErr": "Errore di verifica del token", "claimTokenErr": "Errore nel riscatto del token", "sendTokenErr": "Errore durante l'invio del token", "header": "Errore", "msg": "Purtroppo si è verificato un errore. Puoi aiutarci a migliorare eNuts facendo uno screenshot e riportandoci il bug.", "reportBug": "Segnalare il bug", "requestMintErr": "Errore nel recuperare richiesta di pagamento dalla mint.", "stackNA": "Stack di errore non disponibile", "generalMeltingErr": "Non è stato possibile trovare un percorso di pagamento tra la mint e il nodo.", "invoiceFromLnurlError": "Non è stato possibile creare una richiesta di pagamento utilizzando l'LNURL.", "invoiceScanError": "Non è stato possibile utilizzare la richiesta di pagamento fornita dal codice QR." }, "history": { "checkSpent": "Verificare se il token è stato speso", "isPending": "Token in sospeso", "isSpent": "Token speso", "justNow": "Adesso", "hoursAgo": "{{count}} ore fa", "yesterday": "Ieri", "memo": "Memo", "nHrsAgo": "{{hrs}} ore fa", "nMinsAgo": "{{mins}} minuti fa", "noMemo": "Nessuna memo", "oneHrAgo": "1 ora fa", "oneMinAgo": "1 minuto fa", "paymentHash": "Hash del pagamento", "settleTime": "Tempo di transazione", "showQr": "Mostra codice QR", "receive": "Ricevi", "send": "Invia", "melt": "Fondi", "receivedEcash": "Ecash ricevuto", "sentEcash": "Ecash inviato", "paidInvoice": "Fattura pagata", "details": "Dettagli", "date": "Data", "amount": "Importo", "token": "Token" }, "mints": { "addCustomName": "Aggiungi nome personalizzato", "additionalInfo": "Informazioni aggiuntive", "addMintBtn": "Aggiungere mint", "addNewMint": "Aggiungere nuova mint", "atLeast2Mints": "Sono necessarie almeno 2 mint per eseguire uno scambio multi-mint.", "awaitingInvoice": "In attesa di richiesta di pagamento", "cashOutAmountHint": "Un pagamento lightning potrebbe richiedere commissioni: al pagamento verrà aggiunta una fee stimata ed eventuali rimanenze verranno rimborsate.", "checkProofs": "Controlla prove", "checkProofsQ": "Controllare tutte le prove?", "checkProofsTxt": "Questo processo controllerà se i token sono spendibili, altrimenti li cancellerà.", "chooseMeltMintHint": "Scegliere una mint da cui prelevare i fondi.", "chooseMintHint": "Scegliere una mint da cui ricevere ecash. La mint diventerà il custode dei fondi.", "chooseTarget": "Scegliere destinatario del pagamento.", "coinSelectionHint": "Il saldo ecash è essenzialmente una collezione di monete. La selezione delle monete permette di scegliere quali spendere. Ogni tranche di monete ha un keyset-ID definito dalla mint, il quale potrebbe cambiare nel tempo. Nuovi keyset sono evidenziati in verde. E' consigliabile spendere prima i keyset più vecchi.", "creatingEcashToken": "Token Cashu creato", "sendingEcashViaNostr": "Inviando token Cashu attraverso Nostr!", "customName": "Nome personalizzato", "cutomNameAdded": "Nome personalizzato aggiunto", "dangerZone": "Zona di pericolo", "deletedProofs": "{{proofsToDel}} prove cancellate.", "delMint": "Cancellare mint", "delMintSure": "Rimuovere questa mint?", "ecashAmountHint": "Selezionare l'ammontare di Ecash da inviare.", "editMintName": "Modificare il nome della mint", "errDelProofs": "Qualcosa è andato storto nella cancellazione delle prove.", "funds": "Fondi", "general": "Generali", "importantNotice": "Avviso importante", "inputField": "richiesta di pagamento LN o LNURL", "invalidUrl": "URL invalido", "invoiceAmountHint": "Selezionare l'ammontare di Ecash da ricevere. La mint creerà una richiesta di pagamento da pagare utilizzando un portafoglio lightning.", "invoiceHint": "Potrebbe richiedere alcuni secondi...", "lowBal": "Saldo della mint troppo basso!", "meltAddressbookHint": "Scegli LNURL o un altro contatto come destinatario del pagamento.", "meltInputHint": "Incollare richiesta di pagamento lightning, LNURL o lightning address.", "meltScanQRHint": "Creare richiesta di pagamento lightning con un altro dispositivo ed inquadrare il codice QR.", "meltSwapHint": "Scegliere mint destinataria del pagamento.", "copyShareToken": "Copia & condividi", "copyShareTokenHint": "Copiare il token e condividerlo attraverso qualunque applicazione di messaggistica", "sendNostr": "Inviare attraverso Nostr", "sendNostrHint": "Inviare Ecash direttamente ad uno dei contatti Nostr.", "meltToken": "Preleva", "mintConnectionFail": "Connessione alla mint fallita", "mintInfo": "Informazioni sulla mint", "mintNewTokens": "Ottieni Ecash", "mintNoContact": "La mint non ha informazioni di contatto", "mntAlreadyAdded": "Mint già aggiunta", "noAdditional": "Questa mint non ha informazioni aggiuntive", "noInfo": "Questa mint non ha informazioni", "noProofs": "Nessuna prova trovata per questa mint.", "paymentOverview": "Riepilogo pagamento", "processingPaymentByMint": "La mint sta processando il pagamento come richiesto", "processingSwap": "Processando lo scambio tra mint come richiesto", "pubKey": "Chiave pubblica", "removeDefault": "Rimuovere predefinito", "scanQR": "Scansionare codice QR", "sendEcashHint": "Sceglere una mint da cui creare un token Cashu.", "setDefault": "Impostare come mint predefinita", "supportedNuts": "NUT supportate", "swapNotAllowed": "Non è possibile effettuare uno scambio da una mint di test.", "zapNotAllowed": "Non è possibile effettuare uno zap da una mint di test.", "testMintHint": "Questa è una mint di test, aggiungere ugualmente?", "trustMintSure": "Affidarsi a questa mint?", "updatedDefault": "Mint predefinita aggiornata", "newMintAdded": "Mint aggiunta!", "newMintAddedQuestion": "Ricevere Ecash ora?", "selectSwapReceiver": "Selezionare mint destinataria del pagamento.", "prepairZapData": "Preparando i dati della transazione...", "lastUpdated": "Ultimo aggiornamento", "mintInfoUpdated": "Informazioni mint aggiornate!", "mintInfoUpdateFailed": "Aggiornamento informazioni mint fallito", "npcSettings": "Lightning address", "npcDefaultAccount": "Default", "npcTapToCopy": "Tap to copy", "npcUsernameLabel": "Custom username", "npcUsernamePlaceholder": "optional username", "npcPurchaseUsername": "Save username", "npcSetUsername": "Set Username", "npcRequestUsername": "Request username", "npcUsernameFeePrompt": "Do you want to set this username for a fee of {{amount}} sats?", "npcReceiveTitle": "NPC Lightning addresses", "npcReceiveHint": "Receive Lightning payments into your local Cashu wallet.", "npcAccountsLabel": "Accounts", "npcLocalBalance": "Local balance", "npcReceiveAddress": "Receive address", "npcSeedKey": "Seed key", "npcImportedKey": "Imported key", "npcActive": "Active", "npcSyncing": "Syncing", "npcPaused": "Paused", "npcNpubFallback": "Using your npub until a username is saved", "npcSyncAll": "Sync all", "npcSynced": "NPC account synced", "npcAccountAdded": "NPC account added", "npcAccountRemoved": "NPC account removed", "npcUsernameSaved": "Username saved", "npcAddAccountTitle": "Add NPC account", "npcAddAccountHint": "Import an existing Nostr key or derive a new key from your seed.", "npcPrivateKeyLabel": "Private key", "npcPrivateKeyPlaceholder": "nsec or hex", "npcPrivateKeyHint": "Imported keys are stored in secure storage on this device.", "npcPrivateKeyRequired": "Enter an nsec or hex private key.", "npcImportPrivateKey": "Import private key", "npcDeriveAccount": "Derive new key" }, "topNav": { "about": "Chi siamo", "addressBook": "Rubrica", "advancedFunctions": "Impostazioni avanzate", "display": "Schermo", "history": "Storico transazioni", "language": "Lingua", "currency": "Valuta", "mintSettings": "Gestione mint", "nfcSettings": "Impostazioni NFC", "npcSettingsTitle": "Lightning address", "security": "Sicurezza", "settings": "Opzioni", "privacy": "Privacy", "general": "Generali" }, "wallet": { "cashuContent": "L'autore di Cashu non è un crittografo ed il protocollo è in fase di revisione. E' possibile che vi siano difetti fatali nell'architettura del protocollo, di conseguenza Cashu non è considerabile pronto per il rilascio in produzione.", "cashuExperiment": "Cashu è un protocollo in fase sperimentale.", "claiming": "Richiesta...", "processingInvoice": "Processando la richiesta di pagamento...", "nfcPayment": "Pagamento NFC", "nfcKeepNearTerminal": "Tieni il telefono vicino al terminale", "nfcSelectMaxAmount": "Seleziona importo massimo", "noLimit": "Nessun limite", "custodialRisk": "Rischio di custodia, la mint detiene le chiavi.", "custodialRiskContent": "Con eNuts l'utente non possiede le chiavi di custodia dei bitcoin poichè la mint stessa agisce come custode. Di conseguenza, in caso di mancanza di fiducia in una mint, è consigliabile non interagire con essa.", "disclaimer": "Si ricorda che eNuts è in beta ed ancora in fase di test prima del rilascio ufficiale. Il software e tutti i contenuti presenti su di esso sono forniti sulla base 'così come sono' e 'come disponibili'. Non si fornisce alcuna garanzia, sia espressa che implicita, sulla idoneità o utilizzabilità del software o di qualsiasi suo contenuto.", "enutsDisclaimer": "eNuts è un software beta e non completo.", "lossContent": "I token Cashu sono titoli al portatore, perdere l'accesso ad essi implica l'impossibilità nel recuperarli. eNuts conserva i token nel device. Prima di cancellare l'applicazione, assicurarsi di effettuare il backup dei token.", "lossOfTokens": "Perdita di fondi.", "enutsMint": "Mint di predefinita di eNuts", "mintDisclaimer": "L'utilizzo della mint predefinita è interamente a proprio rischio. Si raccomanda cautela ed un utilizzo solo a scopo didattico e di sperimentazione. Non vi sono garanzie circa il suo funzionamento, sicurezza o disponibilità, poichè potrebbe diventare non disponibile senza alcun preavviso. I depositi effettuati presso questa mint si considerano donazioni e potrebbero non essere riscattabili. E' necessario essere consapevoli dei rischi associati all'utilizzo di software beta; la salvaguardia degli asset mentre questa mint è in uso è responsabilità dell'utente.", "paidOut": "Pagato", "pasteToken": "Riscatta Ecash", "payInvoice": "Paga richiesta di pagamento", "payLNInvoice": "Paga richiesta di pagamento lightning", "receive": "Ricevi", "send": "Invia", "proofs": "Prova", "swapped": "Scambiato" } } ================================================ FILE: assets/translations/ru.json ================================================ { "addrBook": { "addOwnNpub": "Добавьте свой NPUB", "favorite": "Добавить в избранное", "removeFav": "Убрать из избранного", "copyNpub": "Копировать NPUB", "npubCopied": "NPUB скопирован!", "receiverNoLnurl": "У получателя нет LNURL", "noResults": "Безрезультатно" }, "auth": { "confirmAction": "Пожалуйста, подтвердите действие.", "createPin": "Создать PIN-код", "editPin": "Редактировать PIN-код", "pinMismatch": "Неправильный PIN-код!", "pinSetup": "При желании Вы можете установить PIN-код для защиты Вашего приложения.", "pleaseConfirm": "Пожалуйста, подтвердите свой PIN-код.", "pleaseConfirmNewPin": "Пожалуйста, подтвердите свой новый PIN-код.", "pleaseEnter": "Пожалуйста, введите свой PIN-код.", "pleaseNewPin": "Пожалуйста, введите новый PIN-код.", "removePin": "Удалить PIN-код", "welcome": "Добро пожаловать!", "welcomeBack": "Добро пожаловать!" }, "bottomNav": { "wallet": "Кошелёк", "contacts": "Контакты" }, "common": { "confirmReset": "Сбросить кошелёк", "copy": "Копировать", "cycle": "Цикл", "findMint": "Найти монетный двор", "manualCounterIncrease": "Обновление счётчиков", "manualCounterIncreaseHint": "Счётчики обновляются автоматически после каждой транзакции, но в редких случаях может произойти сбой, что приведет к ошибкам в процессе восстановления. Обновление счётчиков вручную может помочь.", "increaseCounterHint": "Вы уверены, что хотите обновить счётчики? Это следует делать только в том случае, если Вы уверены, что счётчики не синхронизированы.", "noMintForCounter": "У вас нет монет для обновления счётчиков.", "counterIncreased": "Счётчики обновлены на {{counterIncreased}}!", "doneSafety": "Почти готово... Проверка безопасности", "noProofsRestored": "Не найдено доказательств для восстановления вашего кошелька.", "restoreErr": "Что-то пошло не так при восстановлении вашего кошелька.", "dontClose": "Пожалуйста, не закрывайте приложение во время процесса.", "recoveryHint": "Напишите или вставьте мнемонику из 12 слов в правильном порядке, разделив их пробелами.", "walletRecovery": "Восстановление кошелька", "walletRecoveryHint": "Используйте seed-фразу для восстановления Вашего кошелька.", "seedBackup": "Восстановление с помощью seed-фразы", "12WordMnemonic": "Seed-фраза из 12 слов", "secureWallet": "Безопасность кошелька", "secureWalletHint": "Создайте и перепишите seed-фразу, чтобы обезопасить свой кошелёк.", "quickWallet": "Мгновенный кошелек", "quickWalletHint": "Создайте новый кошелек мгновенно. Seed-фразу можно создать позже.", "skipSeedHint": "Вы можете пропустить этот процесс и создать seed-фразу позже.", "mnemonicHint": "Seed-фраза больше никогда не будет отображаться. Перепишите её и никогда никому её не показывайте.", "confirmMnemonicErr": "Неверное слово! Пожалуйста, убедитесь, что записали seed-фразу правильно и в правильном порядке.", "selectRestoreMint": "Пожалуйста, выберите монетный двор, который будет использоваться для восстановления ваших средств.", "recoveringWallet": "Монетный двор восстанавливает ваши средства...", "seedEnabled": "Восстановление включено!", "confirmSeed": "Пожалуйста, подтвердите свою seed-фразу, введя правильное слово.", "about": "О нас", "aboutToLeaveTo": "Вы собираетесь уйти", "accept": "Принять", "amount": "Сумма", "back": "Назад", "backToDashboard": "На главную", "balance": "Баланс", "balanceAfterTX": "Баланс после транзакции", "balTooLow": "Недостаточно средств", "bigQrMsg": "Объем данных слишком велик для QR-кода.", "calculateFeeEst": "Расчет комиссии", "cancel": "Отмена", "cashOut": "Вывод средств", "cashOutFromMint": "Вывод денег из монетного двора", "change": "Изменение", "claimed": "поступили", "restored": "восстановлен", "claimSuccess": "Поступили {{amount}} Сат:\n{{mintUrl}}\nMemo: {{memo}}", "claimToken": "Вернуть токен", "clear": "Очистить", "clipboardInvalid": "Ваш буфер обмена содержит недействительные монеты!", "coinSelection": "Выбор монет", "confirm": "Подтвердить", "contact": "Контакт", "mintDelErr": "Невозможно удалить монетный двор при оставшемся балансе", "continue": "Продолжить", "copied": "Скопировано", "shareInvoice": "Поделиться счётом", "copyToken": "Скопировать токен", "createInvoice": "Создать счёт-фактуру", "createToken": "Создать токен", "createTokenErr": "Не удалось создать монеты. Пожалуйста, повторите попытку позже.", "eventError": "Что-то пошло не так при публикации.", "createViaLn": "Создать LN-счёт", "darkMode": "Тёмный режим", "lightMode": "Светлый режим", "autoMode": "Автоматический режим", "dbErr": "Что-то пошло не так при инициализации базы данных!", "deepLinkErr": "Ссылку не удалось открыть", "default": "По умолчанию", "delHistory": "Удалить историю", "factoryReset": "Сброс к заводским настройкам", "delHistoryErr": "Не удалось удалить историю.", "delHistoryQ": "Удалить историю?", "resetQ": "Сбросить кошелек?", "delHistoryTxt": "Данные не будут подлежать восстановлению.", "display": "Дисплей", "disclaimer": "Отказ от ответственности", "restoreBattery": "Не менее 20% заряда батареи.", "restoreBatteryHint": "Мы рекомендуем, чтобы у Вас было как минимум 20% заряда батареи перед началом процесса восстановления. В зависимости от объема данных процесс может занять некоторое время.", "restoreWifi": "Используйте Wi-Fi.", "restoreWifiHint": "Мы рекомендуем Вам использовать стабильное соединение Wi-Fi для процесса восстановления, чтобы избежать перебоев и обеспечить быстрое и безопасное восстановление.", "restoreForeground": "Держите приложение на переднем плане.", "restoreForegroundHint": "Пожалуйста, оставьте приложение на переднем плане и не закрывайте его во время процесса восстановления, чтобы избежать прерываний.", "seedMigrationHint": "Seed-фраза применяется ко всем монетным дворам, но каждый из них требует индивидуального восстановления, поэтому запишите часто используемые URL-адреса монетных дворов. При восстановлении средств на монетных дворах, добавьте монетный двор и введите seed-фразу. Повторите эти действия для каждого монетного двора, который Вы хотите восстановить.", "ecashPayment": "Оплата Ecash", "english": "Английский", "swahili": "Суахили", "spanish": "Испанский", "hungarian": "Венгерский", "italian": "Итальянский", "thai": "Тайский", "russian": "Русский", "chinese simplified": "Китайский (Упрощенный)", "chinese traditional": "Китайский (Традиционный)", "enutsRandD": "eNuts в Телеграм", "estimatedFees": "Ориентировочная комиссия", "estimateFee": "Попробовать оплатить", "expired": "Истёкший", "fee": "Комиссия", "swapFee": "Комиссия обмена", "feeErr": "Невозможно произвести оплату. Является ли \"{{input}}\" допустимым LNURL?", "foundCashuClipboard": "Обнаружен токен Cashu", "french": "Французский", "from": "от", "fromMint": "из монетного двора именуемого", "sendingFrom": "Отправка из", "german": "Немецкий", "github": "GitHub", "githubIssues": "Сообщайте об ошибках на Github", "reportIssue": "Сообщить о проблеме", "shareOrReport": "Напишите отзыв или сообщите об ошибках", "historyDeleted": "История удалена", "invalidInvoice": "Неверный счет", "invalidOrSpent": "Токен недействителен или уже принят", "invalidToken": "Неверный токен", "invoice": "Счёт", "invoiceExpired": "Срок действия счёта истёк", "invoiceInclFee": "Счёт включая комиссию", "invoiceOrLnurl": "LN инвойс или LNURL", "invoiceOrLnAddress": "Счёт или Адрес", "keysetID": "ID-набор ключей", "language": "Язык", "currency": "Валюта", "currencyConversion": "Конвертация валюты", "showFiatBalance": "Показывать баланс в фиате", "showFiatBalanceDesc": "Отображать баланс и суммы в выбранной фиатной валюте", "selectCurrency": "Выбрать валюту", "lastUpdate": "Обновлено", "loadingRates": "Загрузка курсов валют...", "ratesUnavailable": "Курсы валют недоступны", "ratesUnavailableDesc": "Не удалось загрузить курсы валют. Проверьте интернет-соединение и повторите попытку.", "ratesRequiredForFiat": "Для отображения в фиате необходимы курсы валют", "noCurrenciesAvailable": "Валюты недоступны. Пожалуйста, попробуйте загрузить курсы валют снова.", "retry": "Повторить", "lnInvoice": "Счёт за Lightning", "lnPayment": "Оплата через Lightning", "mint": "Монетный двор", "minted": "отчеканен", "multimintSwap": "Междворный экспорт", "n/a": "Нет в наличии", "name": "Название", "no": "Нет", "noCamAccess": "Нет доступа к камере", "noFunds": "Недостаточно средств", "noFundsForFee": "Недостаточно средств. Оставьте место для возможных комиссий.: ~{{fee}} Сат", "noMint": "Монетный двор не найден", "notQrCode": "Неподходящий QR-код!", "noTX": "Транзакций пока нет", "activity": "Активность", "allHistory": "Все", "optionalMemo": "Необязательная заметка", "paste": "Вставить", "paymentPending": "Ожидается платёж", "paymentSuccess": "Успешеный платёж!", "nostrPaymentSuccess": "Отправлено!", "paymentType": "Способ оплаты", "payWithLn": "Оплатите с помощью LN-кошелька", "preferences": "Настройки", "readme": "Прочитать", "sender": "Отправитель", "recipient": "Получатель", "reqTimeout": "Таймаут запроса сети", "restore": "Восстановить", "save": "Сохранить", "scanAgain": "Отсканируйте ещё раз", "scan": "Скан.", "scanQR": "Сканировать QR", "qrScanHint": "Поместите QR-код в рамку", "qrScanFormats": "Cashu, Lightning, LNURL или Bitcoin", "qrScanReady": "Готово к сканированию", "qrScanPaused": "Сканирование приостановлено", "animatedQrProgress": "Прогресс анимированного QR", "receivingAnimatedQr": "Получение анимированного QR", "unsupportedFormat": "Формат не поддерживается", "cashuPaymentRequestQrUnsupported": "Платёжные запросы Cashu из QR пока не поддерживаются", "bitcoinAddressPaymentsUnsupported": "Платежи на Bitcoin-адреса не поддерживаются", "cameraAccessRequired": "Требуется доступ к камере", "cameraAccessDenied": "Доступ к камере запрещён", "cameraAccessRequiredHint": "Нужен доступ к камере, чтобы сканировать QR-коды для платежей и токенов.", "cameraAccessDeniedHint": "Разрешите доступ к камере в настройках устройства, чтобы сканировать QR-коды.", "allowCameraAccess": "Разрешить доступ к камере", "openSettings": "Открыть настройки", "seconds": "секунд", "selectAmount": "Выберите сумму", "selected": "Выбрано", "selectMint": "Выберите монетный двор для отправки", "selectMints": "Выберите монетные дворы", "sendEcash": "Отправить Ecash", "share": "Поделиться", "submitPaymentReq": "Обналичить", "to": "до", "today": "Сегодня", "tokenInfoErr": "Ошибка при получении информации о токене", "totalInclFee": "Всего в платеже", "reservedTotal": "Зарезервировано всего", "trustMint": "Доверять этому монетному двору?", "tryLater": "Пожалуйста, повторите попытку позже.", "unknownType": "Неизвестные данные", "version": "Версия", "viewMnemonic": "Просмотр мнемоники", "wallet": "Кошелёк", "willDoLater": "Позже", "yes": "Да", "invalidPubKey": "Неверный публичный ключ!", "walletLocked": "Кошелек заблокирован", "explainer1": "eNuts — это кастодиальный кошелёк Lightning, позволяющий осуществлять частные и мгновенные транзакции с использованием протокола Cashu. Ваши средства хранятся на монетных дворах, с которыми Вы взаимодействуете, а электронные деньги хранятся локально на Вашем устройстве.", "explainer2": "Cashu — это новый протокол Ecash (электронных денег) для кастодиальных Биткойн-приложений, в котором монетные дворы — это узлы Lightning, выполняющие Биткойн-транзакции и предлагающие Вам электронные деньги. Будьте уверены, монетный двор не будет знать о Ваших платежах электронными деньгами.", "explainer3": "Просто добавьте монетный двор через URL-адрес и оплатите счёт Lightning, чтобы получить Ecash. eNuts перенаправляет Вас, позволяя мгновенно получать платежи в электронных деньгах от кого угодно и с Вашего разрешения автоматически добавляя соответствующие монетные дворы. Обменивайте средства между монетными дворами и отправляйте электронные деньги, как только у Вас появится средства на балансе.", "send&receive": "Отправить & получить", "contactsNostr": "Контакты & Nostr", "nostrExplainer": "Реализация Nostr обеспечивает синхронизацию с Вашими контактами без необходимости ввода закрытого ключа, поскольку мы создаем для Вас новый. Ваши данные отображаются с использованием открытого ключа, а новый закрытый ключ шифрует/расшифровывает ваши сообщения.", "send": "Отправить", "sendEcashDashboard": "Создать и отправить токен Cashu.", "payInvoiceDashboard": "Отправить средства через Lightning.", "receiveEcashDashboard": "Вставить & активировать токен Cashu из буфера обмена.", "receiveEcashNostr": "Nostr сообщения", "receiveEcashNostrHint": "Проверьте свои сообщения Nostr на наличие монет.", "createInvoiceDashboard": "Получите Ecash, оплатив счёт Lightning.", "hideNuts": "Скрыть баланс", "checkingDms": "Проверка ваших личных сообщений на наличие Ecash...", "clearOverHere": "Здесь всё ясно!", "totalDmsReceived": "Вы получили {{totalDms}} монет.", "swapNow": "Обменять сейчас", "swap": "Обмен", "emptyMint": "У монетного двора нет Ваших средств", "zapSoon": "Запы будут добавлены в ближайшее время...", "enutsPub": "Публичный ключ eNuts: ", "seeFullHistory": "Посмотреть полную историю транзакций", "next": "Далее", "skip": "Пропустить", "donateLn": "Пожертвовать", "supportHint": "Каждый вклад, независимо от его размера, ценен. Экран подтверждения находится в разработке.", "newToken": "Новый токен Cashu", "disclaimerHint": "К этому отказу от ответственности следует относиться серьёзно, его нельзя игнорировать или недооценивать. Мы ценим Ваш интерес к этому проекту и продолжим работать над его улучшением.", "searchContacts": "Искать или ввести NPUB", "submit": "Применить", "clearMetadataCache": "Очистить кеш метаданных", "clearMetadataCacheHint": "Очистить кеш метаданных?", "clearImageCache": "Очистить кеш изображений", "clearImageCacheHint": "Очистить кеш изображений?", "pullRefresh": "Потяните, чтобы обновить", "processTestPay": "Обработка тестового платежа...", "confirmMint": "Подтвердить новый монетный двор", "confirmMintHint": "Вы уверены, что хотите добавить этот монетный двор?", "npubAlreadyAdded": "NPUB уже добавлен", "replaceNpub": "Заменить NPUB", "replaceNpubTxt": "Вы уверены, что хотите заменить текущий NPUB?", "npubAdded": "NPUB добавлен!", "showContacts": "Показать контакты", "topUpNow": "Получите Ecash прямо сейчас", "scanAnother": "Отсканируйте другой QR-код", "deleteNpub": "Удалить NPUB?", "delNpubHint": "Все контакты и связанные с ними данные будут удалены.", "addNewNpub": "Добавить новый NPUB?", "addNpubHint": "Это приведет к удалению всех данных, связанных с вашим текущим NPUB.", "zap": "Зап", "zapNow": "Зап сейчас", "meltNostrProfileHint": "Переведите средства на LN-адрес, связанный с вашим профилем Nostr.", "nostrDmHint": "eNuts не может получить доступ к личным сообщениям Вашей учётной записи Nostr из-за отсутствия доступа к Вашему приватному ключу. Вместо этого он генерирует новый ключ для отправки электронных денег (Ecash). Когда Вы отправляете электронные деньги через Nostr, получатель получает их используя Ваш новый публичный ключ eNuts. Если получатель отвечает в DM токеном Ecash, Вы можете просмотреть его здесь. Мы активно работаем над безопасным решением для приватных ключей.", "nostrIssueHeader": "Проблема с контактами Nostr", "nostrIssueHint": "Если у Вас возникли проблемы с открытием контактов Nostr, нажмите кнопку ниже или сбросьте данные Nostr в разделе 'Настройки' > 'Основное' > 'Контакты' > 'Сбросить данные', чтобы решить проблему.", "submitNostrIssue": "Сбросить данные", "nostrIssueSuccess": "Данные Nostr успешно сброшены!", "createLnInvoice": "Создать счёт Lightning", "metadataCacheCleared": "Кэш метаданных очищен!", "imageCacheCleared": "Кэш изображений очищен!", "leaveGithubStar": "Поддержите нас звездой на Github", "alreadySpentHint": "Некоторые доказательства на Вашем балансе потрачены или востребованы в другом месте. Решите проблему, удалив их. 'Настройки' > 'Управление монетным двором' > выберите интересующий монетный двор > 'Проверить доказательства'.", "useNpub": "Используйте NPUB", "autoSwapToDefaulMint": "Перевод на монетный двор, который по умолчанию", "trustMintOpt": "Довериться монетному двору", "swapHint": "Этот вариант требует платежа Lightning, включает в себя комиссию и может по-прежнему добавлять неизвестный монетный двор в список, если произойдет возврат комиссии.", "paidInvoice": "{{ count }} счет был оплачен на общую сумму {{ total }} Сатов", "paidInvoices": "{{ count }} счетов было оплачено на общую сумму {{ total }} Сатов", "checkPayment": "Проверить платеж", "lnPaymentSpamHint": "Пожалуйста, подождите {{ remainingSeconds }} секунд, чтобы избежать спама монетой.", "trustHint": "Монетный двор, связанный с принимаемым токеном, будет добавлен в Ваш список доверенных монетных дворов.", "noDefaultHint": "Вам необходимо настроить монетный двор по умолчанию для выполнения автоматического перевода средств.", "autoSwapSuccess": "Обмен прошёл успешно!", "shareEnuts": "Поделитесь eNuts с кем-нибудь", "supportUs": "Поддержите нас", "justNow": "Прямо сейчас", "hoursAgo": "{{count}} часов назад", "yesterday": "Вчера", "awaitingPayment": "Ожидание платежа", "receivedFromMint": "Получено от монетного двора", "status": "Статус", "unit": "Единица", "quoteId": "ID котировки", "nfcPaymentLimits": "Лимиты платежей", "nfcPaymentLimitsDesc": "Установите лимиты по умолчанию и пользовательские лимиты для NFC-платежей", "amountLimits": "Лимиты суммы", "amountLimitsDesc": "Нажмите, чтобы установить по умолчанию, удерживайте для удаления", "noLimit": "Без лимита", "noLimitDesc": "Подтвердить любую сумму", "deleteAmount": "Удалить сумму", "deleteAmountConfirm": "Вы уверены, что хотите удалить {{amount}} сатов из быстрого выбора?", "delete": "Удалить", "resetToDefaults": "Сбросить настройки" }, "error": { "checkSpendableErr": "Ошибка при проверке попытке потратить токен", "claimTokenErr": "Ошибка при запросе токена", "sendTokenErr": "Ошибка при отправке токена", "header": "Произошла ошибка", "msg": "Сожалеем, что вы столкнулись с этой проблемой. Вы можете помочь нам улучшить программное обеспечение, сделав снимок экрана и создав короткий отчет об ошибке.", "reportBug": "Сообщить об ошибке", "requestMintErr": "Ошибка при запросе счёта у монетного двора.", "stackNA": "Стек ошибок недоступен", "generalMeltingErr": "Монетному двору не удалось найти правильный маршрут платежа Lightning к Вашему узлу.", "invoiceFromLnurlError": "Не удалось создать счёт с использованием вашего LNURL.", "invoiceScanError": "Не удалось использовать счёт из отсканированного QR-кода." }, "history": { "checkSpent": "Проверьте, потрачен ли токен", "isPending": "Токен находится на рассмотрении", "isSpent": "Токен был потрачен", "justNow": "Прямо сейчас", "hoursAgo": "{{count}} часов назад", "yesterday": "Вчера", "memo": "Заметка", "nHrsAgo": "{{hrs}} часов назад", "nMinsAgo": "{{mins}} минут назад", "noMemo": "Заметки нет", "oneHrAgo": "1 час назад", "oneMinAgo": "1 минуту назад", "paymentHash": "Хеш платежа", "settleTime": "Время сделки", "showQr": "Показать QR-код", "receive": "Получить", "send": "Отправить", "melt": "Расплавить", "receivedEcash": "Ecash получен", "sentEcash": "Ecash отправлен", "paidInvoice": "Счёт оплачен", "details": "Детали", "date": "Дата", "amount": "Сумма", "token": "Токен" }, "mints": { "addCustomName": "Добавить кастомное название", "additionalInfo": "Дополнительная информация", "addMintBtn": "Добавить монетный двор", "addNewMint": "Добавить новый монетный двор", "atLeast2Mints": "Вам нужно как минимум 2 монетных двора для выполнения междворного обмена.", "awaitingInvoice": "Ожидание счёта", "cashOutAmountHint": "Могут взиматься молниеносные сборы, поэтому добавляется предполагаемая комиссия, любые переплаченные сборы будут возвращены.", "checkProofs": "Проверить доказательства", "checkProofsQ": "Проверить все доказательства?", "checkProofsTxt": "Осуществится проверка того, можно ли потратить Ваши токены, если нельзя - они будут удалены.", "chooseMeltMintHint": "Выберите монетный двор, с которого вы хотите обналичить свои средства.", "chooseMintHint": "Выберите монетный двор, от которого Вы хотите получить Ecash взамен Биткойнов отправленных через Lightning. Монетный двор становится хранителем Ваших средств.", "chooseTarget": "Выберите получателя платежа.", "coinSelectionHint": "Ваш баланс Ecash по сути представляет собой набор токенов. Вы можете выбрать токены (монеты), которые хотите потратить. Наборам токенов монетный двор присваивает ID-набор ключей, который постоянно меняется. Вновь добавленные наборы токенов выделены зеленым цветом. Желательно сначала потратить старые наборы токенов.", "creatingEcashToken": "Создание токена Cashu", "sendingEcashViaNostr": "Отправка токена Cashu через Nostr!", "customName": "Кастомизировать название", "cutomNameAdded": "Название кастомизировано", "dangerZone": "Опасная зона", "deletedProofs": "Удаление {{proofsToDel}} доказательств.", "delMint": "Удалить монетный двор", "delMintSure": "Удалить этот монетный двор?", "ecashAmountHint": "Введите сумму Ecash, которую вы хотите отправить.", "editMintName": "Изменить название монетного двора", "errDelProofs": "Что-то пошло не так при удалении доказательств.", "funds": "Резерв", "general": "Основное", "importantNotice": "Важное замечание", "inputField": "Lightning счёт или LNURL", "invalidUrl": "Неверный URL", "invoiceAmountHint": "Введите сумму Ecash, которую Вы хотели бы получить. Затем монетный двор выставит счёт, который Вам придётся оплатить с помощью кошелька Lightning.", "invoiceHint": "Это может занять несколько секунд...", "lowBal": "Баланс монетного двора слишком низкий!", "meltAddressbookHint": "Выберите свой LNURL или любой другой контакт в качестве получателя платежа.", "meltInputHint": "Вставьте счёт Lightning, LN-URL или адрес Lightning.", "meltScanQRHint": "Отсканировать Lightning счёт созданный на другом устройстве.", "meltSwapHint": "Выберите другой монетный двор из списка доверенных в качестве получателя платежа.", "copyShareToken": "Создать токен Cashu", "copyShareTokenHint": "Введите сумму, создайте токен и скопируйте его, чтобы поделиться им через любое приложение для обмена сообщениями.", "sendNostr": "Отправить через Nostr", "sendNostrHint": "Отправьте Ecash напрямую одному из ваших контактов на Nostr.", "meltToken": "Обналичить", "mintConnectionFail": "Не удалось подключиться к монетному двору", "mintInfo": "Информация о монетном дворе", "mintNewTokens": "Пополнить Ecash", "mintNoContact": "У монетного двора нет контактной информации", "mntAlreadyAdded": "Монетный двор уже добавлен", "noAdditional": "Этот монетный двор не имеет дополнительной информации", "noInfo": "У монетного двора нет информации", "noProofs": "Не найдено доказательств для этого монетного двора.", "paymentOverview": "Обзор платежей", "processingPaymentByMint": "Монетный двор обрабатывает платёж согласно Вашему запросу", "processingSwap": "Обработка междворного обмена по Вашему запросу", "pubKey": "Публичный ключ", "removeDefault": "Перестать использовать по умолчанию", "scanQR": "Отсканировать QR-код", "sendEcashHint": "Выберите монетный двор, на котором вы хотите создать токен Cashu.", "setDefault": "Установить монетный двор по умолчанию", "supportedNuts": "Поддерживаемые NUTs", "swapNotAllowed": "Обмен с тестового монетного двора невозможен.", "zapNotAllowed": "Зап из тестового монетного двора невозможен.", "testMintHint": "Это тестовый монетный двор, с которым можно поиграть. Всё равно добавить?", "trustMintSure": "Доверять этому монетному двору?", "updatedDefault": "Обновлён монетный двор по умолчанию", "newMintAdded": "Добавлен монетный двор!", "newMintAddedQuestion": "Хотите ли Вы получить Ecash сейчас?", "selectSwapReceiver": "Выберите монетный двор в качестве получателя платежа.", "prepairZapData": "Подготовка данных транзакции...", "lastUpdated": "Последнее обновление", "mintInfoUpdated": "Информация о монетном дворе обновлена!", "mintInfoUpdateFailed": "Не удалось обновить информацию о монетном дворе", "npcSettings": "Lightning address", "npcDefaultAccount": "Default", "npcTapToCopy": "Tap to copy", "npcUsernameLabel": "Custom username", "npcUsernamePlaceholder": "optional username", "npcPurchaseUsername": "Save username", "npcSetUsername": "Set Username", "npcRequestUsername": "Request username", "npcUsernameFeePrompt": "Do you want to set this username for a fee of {{amount}} sats?", "npcReceiveTitle": "NPC Lightning addresses", "npcReceiveHint": "Receive Lightning payments into your local Cashu wallet.", "npcAccountsLabel": "Accounts", "npcLocalBalance": "Local balance", "npcReceiveAddress": "Receive address", "npcSeedKey": "Seed key", "npcImportedKey": "Imported key", "npcActive": "Active", "npcSyncing": "Syncing", "npcPaused": "Paused", "npcNpubFallback": "Using your npub until a username is saved", "npcSyncAll": "Sync all", "npcSynced": "NPC account synced", "npcAccountAdded": "NPC account added", "npcAccountRemoved": "NPC account removed", "npcUsernameSaved": "Username saved", "npcAddAccountTitle": "Add NPC account", "npcAddAccountHint": "Import an existing Nostr key or derive a new key from your seed.", "npcPrivateKeyLabel": "Private key", "npcPrivateKeyPlaceholder": "nsec or hex", "npcPrivateKeyHint": "Imported keys are stored in secure storage on this device.", "npcPrivateKeyRequired": "Enter an nsec or hex private key.", "npcImportPrivateKey": "Import private key", "npcDeriveAccount": "Derive new key" }, "topNav": { "about": "О нас", "addressBook": "Адресная книга", "advancedFunctions": "Расширенные функции", "display": "Дисплей", "history": "История транзакций", "language": "Язык", "currency": "Валюта", "mintSettings": "Управление монетным двором", "nfcSettings": "Настройки NFC", "npcSettingsTitle": "Lightning address", "security": "Безопасность", "settings": "Настройки", "privacy": "Конфиденциальность", "general": "Основное" }, "wallet": { "cashuContent": "Автор Cashu не является криптографом, и протокол всё еще находится в разработке. Есть риск существования недостатков в протоколе, которые способны привести к фатальным последствиям. Cashu нужно использовать осознавая риски.", "cashuExperiment": "Cashu находится на стадии эксперимента.", "claiming": "Заявление...", "processingInvoice": "Обработка счёта-фактуры...", "nfcPayment": "NFC-платёж", "nfcKeepNearTerminal": "Держите телефон рядом с терминалом", "nfcSelectMaxAmount": "Выберите максимальную сумму", "noLimit": "Без лимита", "custodialRisk": "Риск кастодиального кошелька, ключи у монетных дворов.", "custodialRiskContent": "У eNuts нет ключей от Биткойна; средства хранятся на монетном дворе. Поэтому, если Вы не доверяете монетному двору, желательно избегать взаимодействия с ним.", "disclaimer": "Пожалуйста, обратите внимание, что это бета-версия на ранней стадии, и программа всё ещё проходит тестирование до официального выпуска. Программное обеспечение и весь контент на нём, предоставляются на основе “как есть” и “как доступно”. Мы не даём никаких гарантий, прямо или косвенно, в отношении пригодности или удобства использования программного обеспечения или любого его содержимого.", "enutsDisclaimer": "eNuts - это незавершенная, бета-версия программного обеспечения.", "lossContent": "Токены Cashu являются токенами-носителями, что означает, что если Вы потеряете доступ к ним, не существует возможности восстановления. eNuts хранит Ваши токены в Вашем устройстве. Прежде чем удалить приложение, убедитесь, что Вы перенесли свои токены.", "lossOfTokens": "Потеря средств.", "enutsMint": "По умолчанию используется монетный двор eNuts", "mintDisclaimer": "Использование стандартного монетного двора eNuts осуществляется исключительно на Ваш страх и риск. Мы настоятельно рекомендуем Вам проявлять осторожность и использовать его только в экспериментальных или образовательных целях. Нет никаких гарантий относительно его функциональности, безопасности или доступности, и он может исчезнуть без предварительного уведомления. Вклады, внесённые в этот монетный двор, следует рассматривать как пожертвования, которые могут быть невозвращены, и потенциально использованы для дальнейшего развития. Помните о рисках, связанных с бета-версией программного обеспечения, и о том, что именно Вы несёте ответственность за защиту своих активов при использовании этого монетного двора (стандартный монетный двор eNuts).", "paidOut": "Выплачено", "pasteToken": "Принять Ecash", "payInvoice": "Оплатить счёт", "payLNInvoice": "Оплатить счёт Lightning", "receive": "Получить", "send": "Отправить", "proofs": "Доказательства", "swapped": "Поменять местами" } } ================================================ FILE: assets/translations/th.json ================================================ { "addrBook": { "addOwnNpub": "เพิ่ม NPUB ของท่าน", "favorite": "รายการโปรด", "removeFav": "ลบ รายการโปรด", "copyNpub": "คัดลอก NPUB", "npubCopied": "คัดลอก NPUB แล้ว!", "receiverNoLnurl": "ผู้รับไม่มี LNURL", "noResults": "ไม่พบข้อมูล" }, "auth": { "confirmAction": "โปรดยืนยันการทำรายการ", "createPin": "สร้างรหัสพิน", "editPin": "แก้ไขรหัสพิน", "pinMismatch": "รหัสพินไม่ถูกต้อง!", "pinSetup": "ท่านสามารถเลือกที่จะสร้างรหัสพินเพื่อล็อคแอป", "pleaseConfirm": "โปรดยืนยันรหัสอีกครั้ง", "pleaseConfirmNewPin": "โปรดยืนยันรหัสใหม่อีกครั้ง", "pleaseEnter": "โปรดใส่รหัสพินของท่าน", "pleaseNewPin": "โปรดใส่รหัสพินใหม่ของท่าน", "removePin": "ลบรหัสพิน", "welcome": "ยินดีตอนรับ", "welcomeBack": "ยินดีตอนรับกลับมา!" }, "bottomNav": { "wallet": "กระเป๋า", "contacts": "รายชื่อ" }, "common": { "confirmReset": "รีเซ็ตกระเป๋า", "copy": "คัดลอก", "cycle": "วงรอบ", "findMint": "ค้นหา Mint", "manualCounterIncrease": "เพิ่มเคาน์เตอร์", "manualCounterIncreaseHint": "การเพิ่มขึ้นของเคาน์เตอร์ จะเพิ่มขึ้นโดยอัตรโนมัติในทุกธุรกรรม แต่บางครั้งมันอาจจะเกิดข้อผิดพลาดในขั้นตอนกู้คืนกระเป๋า การเพิ่มเคาน์เตอร์จะช่วยแก้ปัญหาเหล่านี้", "increaseCounterHint": "แน่ใจนะว่าจะเพิ่มเคาน์เตอร์? ควรจะทำก็ต่อเมื่อแน่ใจว่าเคาน์เตอร์ไม่ถูกซิงค์ข้อมูล", "noMintForCounter": "ไม่พบ mints จากการเพิ่มเคาน์เตอร์", "counterIncreased": "Counters increased by {{counterIncreased}}!", "doneSafety": "เกือบเสร็จละ... การตรวจสอบความปลอดภัย", "noProofsRestored": "ไม่พบ proof เพื่อทำการกู้คืนกระเป๋าของคุณ", "restoreErr": "เกิดข้อผิดพลาดบางอย่างขณะกู้คืนกระเป๋าของคุณ", "dontClose": "กรุณาอย่าปิดแอปในระหว่างกระบวนการ", "recoveryHint": "เขียนหรือวาง 12 คำตามลำดับที่ถูกต้อง โดยคั่นด้วยช่องว่าง", "walletRecovery": "การกู้คืนกระเป๋า", "walletRecoveryHint": "ใช้ seed backup เพื่อกู้คืนกระเป๋าของคุณ", "seedBackup": "Seed Backup", "12WordMnemonic": "12-word mnemonic", "secureWallet": "Secure wallet", "secureWalletHint": "สร้างและเขียน seed backup เพื่อป้องกันกระเป๋าของคุณ", "quickWallet": "Quick wallet", "quickWalletHint": "สร้างกระเป๋าใหม่ทันที สามารถสร้าง seed backup ได้ในภายหลัง", "skipSeedHint": "คุณสามารถข้ามขั้นตอนนี้และสร้าง seed backup ภายหลังได้", "mnemonicHint": "Seed phrase จะไม่แสดงอีกต่อไป กรุณาเขียนลงและไม่เผยแพร่ให้ใครทราบ", "confirmMnemonicErr": "คำผิด! โปรดตรวจสอบให้แน่ใจว่าเขียน seed phrase ลงให้ถูกต้องตามลำดับ", "selectRestoreMint": "โปรดเลือก mint ที่จะใช้กู้คืนเงินของคุณ", "recoveringWallet": "Mint กำลังกู้คืนเงินของคุณ...", "seedEnabled": "Seed recovery enabled!", "confirmSeed": "โปรดยืนยัน seed ของคุณโดยพิมพ์คำตามลำดับที่ถูกต้อง", "about": "เกี่ยวกับ", "aboutToLeaveTo": "คุณกำลังจะออกจาก", "accept": "ยอมรับ", "amount": "จำนวน", "back": "ย้อนกลับ", "backToDashboard": "ย้อนกลับไปที่หน้าหลัก", "balance": "ยอดคงเหลือ", "balanceAfterTX": "ยอดเงินหลังจากการทำธุรกรรม", "balTooLow": "ยอดเงินไม่เพียงพอ", "bigQrMsg": "ขนาดข้อมูลมากเกินไปสำหรับการสร้างรหัส QR", "calculateFeeEst": "กำลังคำนวณค่าธรรมเนียม", "cancel": "ยกเลิก", "cashOut": "ถอนเงิน", "cashOutFromMint": "ถอนเงินจาก mint", "change": "เปลี่ยน", "claimed": "รับแล้ว", "restored": "กู้คืนแล้ว", "claimSuccess": "รับ {{amount}} Sats:\n{{mintUrl}}\nหมายเหตุ: {{memo}}", "claimToken": "รับ Token", "clear": "ล้าง", "clipboardInvalid": "คลิปบอร์ดของคุณมี Cashu token ที่ไม่ถูกต้อง!", "coinSelection": "เลือกเหรียญ", "confirm": "ยืนยัน", "contact": "ติดต่อ", "mintDelErr": "ไม่สามารถลบ mint ที่เหลือยอดเงินได้", "continue": "ต่อ", "copied": "คัดลอกแล้ว", "shareInvoice": "แชร์ใบแจ้งหนี้", "copyToken": "คัดลอก token", "createInvoice": "สร้างใบแจ้งหนี้", "createToken": "สร้าง Token", "createTokenErr": "ไม่สามารถสร้าง Cashu token ได้ โปรดลองอีกครั้งในภายหลัง", "eventError": "มีบางอย่างผิดพลาดขณะเผยแพร่เหตุการณ์", "createViaLn": "สร้างใบแจ้งหนี้ผ่าน Lightning", "darkMode": "โหมดมืด", "lightMode": "โหมดสว่าง", "autoMode": "โหมดอัตโนมัติ", "dbErr": "มีบางอย่างผิดพลาดขณะเริ่มต้นฐานข้อมูล!", "deepLinkErr": "ไม่สามารถเปิดลิงก์ได้", "default": "ค่าเริ่มต้น", "delHistory": "ลบประวัติ", "factoryReset": "รีเซ็ตโรงงาน", "delHistoryErr": "ไม่สามารถลบประวัติได้", "delHistoryQ": "ลบประวัติหรือไม่?", "resetQ": "รีเซ็ตกระเป๋าของคุณหรือไม่?", "delHistoryTxt": "ข้อมูลไม่สามารถกู้คืนได้หลังจากนี้", "display": "หน้าจอ", "disclaimer": "คำประกาศ", "restoreBattery": "มีแบตเตอรี่อย่างน้อย 20%", "restoreBatteryHint": "เราขอแนะนำให้คุณมีแบตเตอรี่อย่างน้อย 20% ก่อนเริ่มกระบวนการกู้คืน เนื่องจากขึ้นอยู่กับปริมาณข้อมูล กระบวนการอาจใช้เวลาสักครู่", "restoreWifi": "ใช้ Wi-Fi", "restoreWifiHint": "เราขอแนะนำให้คุณใช้การเชื่อมต่อ Wi-Fi ที่เสถียรสำหรับกระบวนการกู้คืนเพื่อป้องกันความต่อเนื่องและเพื่อให้กระบวนการกู้คืนเร็วและปลอดภัย", "restoreForeground": "ให้แอปอยู่ใน foreground", "restoreForegroundHint": "กรุณาให้แอปอยู่ใน foreground และอย่าปิดในระหว่างกระบวนการกู้คืนเพื่อป้องกันความต่อเนื่อง", "seedMigrationHint": "Seed มีผลต่อทุก mint แต่ทุกตัวต้องการการกู้คืนแยกต่างหาก ดังนั้นโปรดทำเครื่องหมายบน mint URL ที่ใช้บ่อยๆ หากคุณมียอดคงเหลือแต่ยังไม่มี seed สร้าง token จาก mint ที่ต้องการและทำการสร้าง seed ใหม่ เมื่อสำเร็จให้ทำซ้ำสำหรับทุก mint ที่คุณต้องการสำรองข้อมูล", "ecashPayment": "การชำระเงินด้วย Ecash", "english": "อังกฤษ", "swahili": "ภาษาสวาฮิลี", "spanish": "สเปน", "hungarian": "ฮังการี", "italian": "อิตาลี", "russian": "รัสเซีย", "thai": "ไทย", "chinese simplified": "จีน (ตัวย่อ)", "chinese traditional": "จีน (ดั้งเดิม)", "enutsRandD": "eNuts Telegram", "estimatedFees": "ค่าธรรมเนียมโดยประมาณ", "estimateFee": "ประมาณค่าธรรมเนียม", "expired": "หมดอายุ", "fee": "ค่าธรรมเนียม", "swapFee": "ค่าธรรมเนียมการสลับ", "feeErr": "ไม่สามารถประมาณค่าธรรมเนียมได้ \"{{input}}\" เป็น LNURL ที่ถูกต้องหรือไม่?", "foundCashuClipboard": "ตรวจพบ Cashu token", "french": "ฝรั่งเศส", "from": "จาก", "fromMint": "จาก mint ต่อไปนี้", "sendingFrom": "ส่งจาก", "german": "เยอรมัน", "github": "GitHub", "githubIssues": "รายงานข้อบกพร่องบน Github", "reportIssue": "รายงานปัญหา", "shareOrReport": "แบ่งปันข้อเสนอหรือรายงานข้อบกพร่อง", "historyDeleted": "ประวัติถูกลบแล้ว", "invalidInvoice": "ใบแจ้งหนี้ไม่ถูกต้อง", "invalidOrSpent": "Token ไม่ถูกต้องหรือถูกใช้ไปแล้ว", "invalidToken": "Token ไม่ถูกต้อง", "invoice": "ใบแจ้งหนี้", "invoiceExpired": "ใบแจ้งหนี้หมดอายุ", "invoiceInclFee": "ใบแจ้งหนี้รวมค่าธรรมเนียม", "invoiceOrLnurl": "ใบแจ้งหนี้ LN หรือ LNURL", "invoiceOrLnAddress": "ใบแจ้งหนี้หรือที่อยู่", "keysetID": "Keyset ID", "language": "ภาษา", "currency": "สกุลเงิน", "currencyConversion": "การแปลงสกุลเงิน", "showFiatBalance": "แสดงยอดคงเหลือเป็นเงินเฟียต", "showFiatBalanceDesc": "แสดงยอดคงเหลือและจำนวนเงินในสกุลเงินเฟียตที่เลือก", "selectCurrency": "เลือกสกุลเงิน", "lastUpdate": "อัปเดตแล้ว", "loadingRates": "กำลังโหลดอัตราแลกเปลี่ยน...", "ratesUnavailable": "อัตราแลกเปลี่ยนไม่พร้อมใช้งาน", "ratesUnavailableDesc": "ไม่สามารถโหลดอัตราแลกเปลี่ยนได้ โปรดตรวจสอบการเชื่อมต่ออินเทอร์เน็ตและลองอีกครั้ง", "ratesRequiredForFiat": "ต้องการอัตราแลกเปลี่ยนเพื่อเปิดใช้งานการแสดงผลเป็นเงินเฟียต", "noCurrenciesAvailable": "ไม่มีสกุลเงินที่ใช้ได้ โปรดลองโหลดอัตราแลกเปลี่ยนอีกครั้ง", "retry": "ลองอีกครั้ง", "lnInvoice": "ใบแจ้งหนี้ Lightning", "lnPayment": "การชำระเงิน Lightning", "mint": "Mint", "minted": "Minted", "multimintSwap": "การสลับ multimint", "n/a": "ไม่มีข้อมูล", "name": "ชื่อ", "no": "ไม่", "noCamAccess": "ไม่มีการเข้าถึงกล้อง", "noFunds": "ยอดเงินไม่เพียงพอ", "noFundsForFee": "ยอดเงินไม่เพียงพอ โปรดเตรียมพื้นที่สำหรับค่าธรรมเนียมโดยประมาณ: ~{{fee}} Sats", "noMint": "ไม่พบ mint", "notQrCode": "ไม่ใช่รหัส QR!", "noTX": "ยังไม่มีธุรกรรม", "activity": "กิจกรรม", "allHistory": "ทั้งหมด", "optionalMemo": "หมายเหตุที่ไม่บังคับ", "paste": "วาง", "paymentPending": "การชำระเงินรอดำเนินการ", "paymentSuccess": "ชำระเงินสำเร็จแล้ว!", "nostrPaymentSuccess": "ส่งแล้ว!", "paymentType": "ประเภทการชำระเงิน", "payWithLn": "จ่ายด้วยวอลเล็ต LN ของคุณ", "preferences": "การตั้งค่า", "readme": "อ่านฉัน", "sender": "ผู้ส่ง", "recipient": "ผู้รับ", "reqTimeout": "หมดเวลาคำขอเครือข่าย", "restore": "คืนค่า", "save": "บันทึก", "scanAgain": "สแกนอีกครั้ง", "scan": "สแกน", "scanQR": "สแกน QR", "qrScanHint": "วาง QR code ให้อยู่ในกรอบ", "qrScanFormats": "Cashu, Lightning, LNURL หรือ Bitcoin", "qrScanReady": "พร้อมสแกน", "qrScanPaused": "หยุดสแกนชั่วคราว", "animatedQrProgress": "ความคืบหน้า QR แบบเคลื่อนไหว", "receivingAnimatedQr": "กำลังรับ QR แบบเคลื่อนไหว", "unsupportedFormat": "ไม่รองรับรูปแบบนี้", "cashuPaymentRequestQrUnsupported": "ยังไม่รองรับคำขอชำระเงิน Cashu จาก QR", "bitcoinAddressPaymentsUnsupported": "ไม่รองรับการชำระเงินไปยังที่อยู่ Bitcoin", "cameraAccessRequired": "ต้องการสิทธิ์เข้าถึงกล้อง", "cameraAccessDenied": "การเข้าถึงกล้องถูกปฏิเสธ", "cameraAccessRequiredHint": "เราต้องใช้กล้องเพื่อสแกน QR code สำหรับการชำระเงินและ token", "cameraAccessDeniedHint": "เปิดสิทธิ์เข้าถึงกล้องในการตั้งค่าอุปกรณ์เพื่อสแกน QR code", "allowCameraAccess": "อนุญาตให้ใช้กล้อง", "openSettings": "เปิดการตั้งค่า", "seconds": "วินาที", "selectAmount": "เลือกจำนวน", "selected": "เลือกแล้ว", "selectMint": "เลือก mint เพื่อส่งจาก", "selectMints": "เลือก mint", "sendEcash": "ส่ง Ecash", "share": "แชร์", "submitPaymentReq": "ถอนเงิน", "to": "ถึง", "today": "วันนี้", "tokenInfoErr": "มีข้อผิดพลาดขณะรับข้อมูล token", "totalInclFee": "รวมทั้งหมดรวมค่าธรรมเนียม", "reservedTotal": "ยอดรวมที่กันไว้", "trustMint": "เชื่อมั่นใน mint นี้?", "tryLater": "กรุณาลองอีกครั้งในภายหลัง", "unknownType": "ประเภทข้อมูลที่ไม่รู้จัก", "version": "เวอร์ชัน", "viewMnemonic": "ดู Mnemonic", "wallet": "วอลเล็ต", "willDoLater": "จะทำในภายหลัง", "yes": "ใช่", "invalidPubKey": "คีย์สาธารณะไม่ถูกต้อง!", "walletLocked": "กระเป๋าถูกล็อก", "explainer1": "eNuts เป็นกระเป๋าเงิน Lightning ที่มีความรับผิดชอบซึ่งช่วยให้สามารถทำธุรกรรมได้โดยเป็นส่วนตัวและรวดเร็วโดยใช้โปรโตคอล Cashu. ทุนของคุณถูกควบคุมโดยมิ้นต์ที่คุณโต้ตอบและ Ecash ถูกเก็บไว้ในอุปกรณ์ของคุณ", "explainer2": "Cashu เป็นโปรโตคอล Ecash ใหม่สำหรับแอปพลิเคชัน Bitcoin แบบซึ่งมิ้นต์เป็นโหนด Lightning ที่ดำเนินการธุรกรรม Bitcoin และให้คุณ Ecash. สบายใจได้ว่ามิ้นต์ยังไม่ทราบเรื่องการชำระเงิน Ecash ของคุณ", "explainer3": "เพียงเพิ่มมิ้นต์ผ่าน URL และชำระใบแจ้งหนี้ Lightning เพื่อรับ Ecash. eNuts แนะนำคุณ ช่วยให้คุณได้รับเงินจากใครก็ได้โดยทันทีและด้วยการยินยอมของคุณ โดยอัตโนมัติเพิ่มมิ้นต์ที่เกี่ยวข้อง สลับเงินระหว่างมิ้นต์และส่ง Ecash เมื่อคุณมียอดเงิน", "send&receive": "ส่ง & รับ", "contactsNostr": "รายชื่อ & Nostr", "nostrExplainer": "การดำเนินการ Nostr ทำให้การประสานข้อมูลรายชื่อติดต่อของคุณเป็นไปอย่างราบรื่นโดยไม่ต้องใส่คีย์ส่วนตัวของคุณ เนื่องจากเราสร้างขึ้นใหม่ให้คุณ ข้อมูลของคุณแสดงด้วยคีย์สาธารณะ ในขณะที่คีย์ส่วนตัวใหม่เข้ารหัส / ถอดรหัสข้อความของคุณ", "send": "ส่ง", "sendEcashDashboard": "สร้าง Cashu token และส่งให้กับใครก็ได้", "payInvoiceDashboard": "ส่งเงินของคุณไปยังโหนด Lightning", "receiveEcashDashboard": "วางและแลกเปลี่ยน Cashu token จากคลิปบอร์ด", "receiveEcashNostr": "ข้อความ Nostr", "receiveEcashNostrHint": "ตรวจสอบข้อความ Nostr เพื่อ Ecash", "createInvoiceDashboard": "รับ Ecash โดยการชำระใบแจ้งหนี้ Lightning", "hideNuts": "ซ่อนยอดคงเหลือ", "checkingDms": "กำลังตรวจสอบ DMs ของคุณสำหรับ Ecash...", "clearOverHere": "ทุกอย่างในนี้ชัดเจนแล้ว!", "totalDmsReceived": "คุณได้รับ {{totalDms}} Cashu token.", "swapNow": "สลับทันที", "swap": "สลับ", "emptyMint": "มิ้นต์ไม่มีเงิน", "zapSoon": "Zaps จะถูกเพิ่มเร็ว ๆ นี้...", "enutsPub": "คีย์สาธารณะ eNuts: ", "seeFullHistory": "ดูประวัติการทำธุรกรรมทั้งหมด", "next": "ถัดไป", "skip": "ข้าม", "donateLn": "บริจาค", "supportHint": "การมีส่วนร่วมใด ๆ ไม่ว่าจะเล็กหรือใหญ่ก็มีผลกระทบมาก. หน้าจอยืนยันกำลังพัฒนาอยู่", "newToken": "Cashu token ใหม่", "disclaimerHint": "คำปฏิเสธนี้ควรถือเป็นสำคัญและไม่ควรถูกละเลยหรือประมาท. เราขอขอบคุณสำหรับความสนใจในโครงการนี้และจะดำเนินการพัฒนาต่อไป", "searchContacts": "ค้นหาหรือพิมพ์ NPUB", "submit": "ส่ง", "clearMetadataCache": "ล้างแคชเมตาดาต้า", "clearMetadataCacheHint": "ล้างแคชเมตาดาต้า?", "clearImageCache": "ล้างแคชภาพ", "clearImageCacheHint": "ล้างแคชภาพ?", "pullRefresh": "ดึงเพื่อรีเฟรช", "processTestPay": "กำลังประมวลผลการชำระเงินทดสอบ...", "confirmMint": "ยืนยันมิ้นต์ใหม่", "confirmMintHint": "คุณแน่ใจหรือไม่ว่าคุณต้องการเพิ่มมิ้นต์นี้?", "npubAlreadyAdded": "NPUB ถูกเพิ่มแล้ว", "replaceNpub": "แทนที่ NPUB", "replaceNpubTxt": "คุณแน่ใจหรือไม่ว่าต้องการแทนที่ NPUB ปัจจุบัน?", "npubAdded": "เพิ่ม NPUB เรียบร้อยแล้ว!", "showContacts": "แสดงรายชื่อ", "topUpNow": "รับ Ecash ทันที", "scanAnother": "สแกนรหัส QR อื่น", "deleteNpub": "ลบ NPUB?", "delNpubHint": "ข้อมูลทั้งหมดเกี่ยวกับผู้ติดต่อและข้อมูลที่เกี่ยวข้องจะถูกลบ", "addNewNpub": "เพิ่ม NPUB ใหม่?", "addNpubHint": "สิ่งนี้จะลบข้อมูลทั้งหมดที่เกี่ยวข้องกับ NPUB ปัจจุบันของคุณ", "zap": "Zap", "zapNow": "Zap ทันที", "meltNostrProfileHint": "โอนเงินไปยังที่อยู่ LN ที่เกี่ยวข้องกับโปรไฟล์ Nostr ของคุณ", "nostrDmHint": "eNuts ไม่สามารถเข้าถึงข้อความ DM ของบัญชี Nostr ของคุณได้เนื่องจากขาดของการเข้าถึงคีย์ส่วนตัว แทนที่นั้นเราสร้างคีย์ใหม่ให้คุณสำหรับการส่ง Ecash เมื่อคุณส่ง Ecash ผ่าน Nostr ผู้รับจะได้รับ Ecash โดยใช้คีย์สาธารณะ eNuts ของคุณ หากผู้รับตอบกลับ DM ด้วยตั๋ว Ecash คุณสามารถดูได้ที่นี่ เรากำลังทำงานอย่างเต็มที่เพื่อหาวิธีคีย์ส่วนตัวที่ปลอดภัย", "nostrIssueHeader": "ปัญหาติดต่อ Nostr", "nostrIssueHint": "หากคุณพบปัญหาในการเปิดติดต่อ Nostr คลิกที่ปุ่มด้านล่างหรือรีเซ็ตข้อมูล Nostr ใน 'ตัวเลือก' > 'รายชื่อ' > 'รีเซ็ตข้อมูลเดี๋ยวนี้' เพื่อแก้ไขปัญหา", "submitNostrIssue": "รีเซ็ตข้อมูลเดี๋ยวนี้", "nostrIssueSuccess": "รีเซ็ตข้อมูล Nostr เรียบร้อยแล้ว!", "createLnInvoice": "สร้างใบแจ้งหนี้ Lightning", "metadataCacheCleared": "ล้างแคชเมตาดาต้าเรียบร้อยแล้ว!", "imageCacheCleared": "ล้างแคชภาพเรียบร้อยแล้ว!", "leaveGithubStar": "สนับสนุนเราด้วยดาว Github", "alreadySpentHint": "บางพิสูจน์ในยอดคงเหลือของคุณถูกใช้หรือถูกเรียกเก็บที่อื่น แก้ไขโดยการลบทิ้งใน 'ตัวเลือก' > 'การจัดการมิ้นต์' > 'ตรวจสอบพิสูจน์'", "useNpub": "ใช้ NPUB", "autoSwapToDefaulMint": "สลับอัตโนมัติไปยังมิ้นต์เริ่มต้น", "trustMintOpt": "เชื่อมั่นในมิ้นต์", "swapHint": "ตัวเลือกนี้ต้องการการชำระเงินผ่าน Lightning เกี่ยวข้องกับค่าธรรมเนียมและอาจเพิ่มมิ้นต์ที่ไม่รู้จักเข้าไปในรายการหากมีการคืนค่าธรรมเนียม", "trustHint": "มิ้นต์ที่เกี่ยวข้องกับโทเค็นจะถูกเพิ่มในรายการที่เชื่อถือได้ของคุณ", "noDefaultHint": "คุณต้องตั้งค่ามิ้นต์เริ่มต้นเพื่อทำการสลับอัตโนมัติ", "autoSwapSuccess": "สลับสำเร็จ!", "paidInvoice": "{{ count }} ใบแจ้งหนี้ได้รับการชำระเงินด้วยจำนวนรวม {{ total }} Sats", "paidInvoices": "{{ count }} ใบแจ้งหนี้ได้รับการชำระเงินด้วยจำนวนรวม {{ total }} Sats", "checkPayment": "ตรวจสอบการชำระเงิน", "lnPaymentSpamHint": "โปรดรอ {{ remainingSeconds }} วินาทีเพื่อหลีกเลี่ยงการสแปมมิ้นต์", "shareEnuts": "แบ่งปัน eNuts กับใครสักคน", "supportUs": "สนับสนุนเรา", "justNow": "เมื่อสักครู่นี้", "hoursAgo": "{{count}} ชั่วโมงที่แล้ว", "yesterday": "เมื่อวาน", "awaitingPayment": "รอการชำระเงิน", "receivedFromMint": "ได้รับจากมิ้นต์", "status": "สถานะ", "unit": "หน่วย", "quoteId": "รหัสใบเสนอราคา", "nfcPaymentLimits": "ขีดจำกัดการชำระเงิน", "nfcPaymentLimitsDesc": "ตั้งค่าขีดจำกัดจำนวนเงินเริ่มต้นและกำหนดเองสำหรับการชำระเงิน NFC", "amountLimits": "ขีดจำกัดจำนวนเงิน", "amountLimitsDesc": "แตะเพื่อตั้งเป็นค่าเริ่มต้น กดค้างเพื่อลบ", "noLimit": "ไม่จำกัด", "noLimitDesc": "ยืนยันจำนวนเงินใดก็ได้", "deleteAmount": "ลบจำนวนเงิน", "deleteAmountConfirm": "คุณแน่ใจหรือไม่ว่าต้องการลบ {{amount}} sats ออกจากจำนวนเงินที่เลือกอย่างรวดเร็ว?", "delete": "ลบ", "resetToDefaults": "รีเซ็ตเป็นค่าเริ่มต้น" }, "error": { "checkSpendableErr": "เกิดข้อผิดพลาดขณะตรวจสอบว่า Token สามารถใช้ได้", "claimTokenErr": "เกิดข้อผิดพลาดขณะกำลังเรียกร้อง Token", "sendTokenErr": "เกิดข้อผิดพลาดขณะกำลังส่ง Token", "header": "เกิดข้อผิดพลาด", "msg": "เราขอโทษในความไม่สะดวกที่คุณพบ เพื่อช่วยเราปรับปรุงซอฟต์แวร์โปรดถ่ายภาพหน้าจอและสร้างรายงานข้อผิดพลาดเล็กน้อย", "reportBug": "รายงานข้อผิดพลาด", "requestMintErr": "เกิดข้อผิดพลาดขณะขอใบแจ้งหนี้จาก Mint", "stackNA": "ข้อผิดพลาดไม่สามารถแสดงได้", "generalMeltingErr": "Mint ไม่สามารถค้นหาเส้นทางการชำระเงิน Lightning ที่เหมาะสมไปยังโหนดของคุณ", "invoiceFromLnurlError": "ไม่สามารถสร้างใบแจ้งหนี้โดยใช้ LNURL ของคุณ", "invoiceScanError": "ไม่สามารถใช้ใบแจ้งหนี้จากรหัส QR ที่สแกนได้" }, "history": { "checkSpent": "ตรวจสอบว่าโทเค็นถูกใช้ไปหรือยัง", "isPending": "โทเค็นอยู่ระหว่างรอ", "isSpent": "โทเค็นถูกใช้ไปแล้ว", "justNow": "เมื่อสักครู่นี้", "hoursAgo": "{{count}} ชั่วโมงที่แล้ว", "yesterday": "เมื่อวาน", "memo": "บันทึก", "nHrsAgo": "{{hrs}} ชั่วโมงที่ผ่านมา", "nMinsAgo": "{{mins}} นาทีที่ผ่านมา", "noMemo": "ไม่มีบันทึก", "oneHrAgo": "1 ชั่วโมงที่ผ่านมา", "oneMinAgo": "1 นาทีที่ผ่านมา", "paymentHash": "รหัสการชำระเงิน", "settleTime": "เวลาตกลง", "showQr": "แสดงรหัส QR", "receive": "รับ", "send": "ส่ง", "melt": "หลอม", "receivedEcash": "ได้รับ Ecash", "sentEcash": "ส่ง Ecash แล้ว", "paidInvoice": "ชำระใบแจ้งหนี้แล้ว", "details": "รายละเอียด", "date": "วันที่", "amount": "จำนวน", "token": "โทเค็น" }, "mints": { "addCustomName": "เพิ่มชื่อกำหนดเอง", "additionalInfo": "ข้อมูลเพิ่มเติม", "addMintBtn": "เพิ่มมิ้นต์", "addNewMint": "เพิ่มมิ้นต์ใหม่", "atLeast2Mints": "คุณต้องมีอย่างน้อย 2 มิ้นต์เพื่อทำการสลับระหว่างมาสินต์หลายแหล่ง", "awaitingInvoice": "กำลังรอใบแจ้งหนี้", "cashOutAmountHint": "อาจมีค่าธรรมเนียมการส่งแบบ Lightning ซึ่งจะถูกเพิ่มเข้าไป และค่าธรรมเนียมที่จ่ายเกินจะถูกคืน", "checkProofs": "ตรวจสอบพิสูจน์", "checkProofsQ": "ตรวจสอบพิสูจน์ทั้งหมดหรือไม่", "checkProofsTxt": "การดำเนินการนี้จะตรวจสอบว่าโทเค็นของคุณสามารถใช้ได้หรือไม่ และมิฉะนั้นจะลบโทเค็นที่ไม่สามารถใช้ได้", "chooseMeltMintHint": "เลือกมิ้นต์ที่คุณต้องการถอนเงิน", "chooseMintHint": "เลือกมิ้นต์ที่คุณต้องการรับ Ecash มิ้นต์จะเป็นผู้เก็บเงินสำหรับคุณ", "chooseTarget": "เลือกผู้รับการชำระเงิน", "coinSelectionHint": "ยอดเงิน Ecash ของคุณเป็นสิ่งที่เรียบเรียงขึ้นจากชุดเหรียญ Coin selection ช่วยให้คุณเลือกเหรียญที่คุณต้องการใช้ Coin-sets ได้รับ ID ชุดหลักจากมิ้นต์ ซึ่งอาจเปลี่ยนไปตามเวลา การเพิ่มชุดใหม่จะเน้นด้วยสีเขียว เราขอแนะนำให้ใช้เหรียญเซ็ตเก่าก่อน", "creatingEcashToken": "กำลังสร้างโทเค็น Cashu", "sendingEcashViaNostr": "กำลังส่งโทเค็น Cashu ผ่านทาง Nostr", "customName": "ชื่อกำหนดเอง", "cutomNameAdded": "เพิ่มชื่อกำหนดเองแล้ว", "dangerZone": "โซนเสี่ยง", "deletedProofs": "ลบ {{proofsToDel}} พิสูจน์แล้ว", "delMint": "ลบมิ้นต์", "delMintSure": "คุณต้องการลบมิ้นต์นี้หรือไม่", "ecashAmountHint": "เลือกจำนวน Ecash ที่คุณต้องการส่ง", "editMintName": "แก้ไขชื่อมิ้นต์", "errDelProofs": "เกิดข้อผิดพลาดขณะลบพิสูจน์", "funds": "เงิน", "general": "ทั่วไป", "importantNotice": "ข้อความสำคัญ", "inputField": "ใบแจ้งหนี้ Lightning หรือ LNURL", "invalidUrl": "URL ไม่ถูกต้อง", "invoiceAmountHint": "เลือกจำนวน Ecash ที่คุณต้องการรับ มิ้นต์จะสร้างใบแจ้งหนี้ซึ่งคุณจะต้องชำระโดยใช้กระเป๋าเงิน Lightning", "invoiceHint": "กรุณารอสักครู่...", "lowBal": "ยอดเงินของมิ้นต์ต่ำเกินไป!", "meltAddressbookHint": "เลือก LNURL ของคุณเองหรือที่ติดต่ออื่น ๆ เพื่อเป็นผู้รับชำระเงิน", "meltInputHint": "วางใบแจ้งหนี้ Lightning หรือ LN-URL หรือที่อยู่ Lightning", "meltScanQRHint": "สร้างใบแจ้งหนี้ Lightning ด้วยอุปกรณ์อื่น ๆ แล้วสแกนเข้ามา", "meltSwapHint": "เลือกมิ้นต์อื่นจากรายการที่ไว้วางใจของคุณให้เป็นผู้รับชำระเงิน", "copyShareToken": "คัดลอกและแชร์อย่างรวดเร็ว", "copyShareTokenHint": "คัดลอกโทเค็นที่สร้างแล้วและแชร์ผ่านแอปสารบรรณใดก็ได้", "sendNostr": "ส่งผ่านทาง Nostr", "sendNostrHint": "ส่ง Ecash โดยตรงไปยังหนึ่งในรายชื่อติดต่อของคุณใน Nostr", "meltToken": "ถอนเงิน", "mintConnectionFail": "การเชื่อมต่อกับมิ้นต์ล้มเหลว", "mintInfo": "ข้อมูลมิ้นต์", "mintNewTokens": "รับ Ecash", "mintNoContact": "มิ้นต์ไม่มีข้อมูลการติดต่อ", "mntAlreadyAdded": "มิ้นต์ถูกเพิ่มแล้ว", "noAdditional": "มิ้นต์นี้ไม่มีข้อมูลเพิ่มเติม", "noInfo": "มิ้นต์ไม่มีข้อมูล", "noProofs": "ไม่พบพิสูจน์สำหรับมิ้นต์นี้", "paymentOverview": "ภาพรวมการชำระเงิน", "processingPaymentByMint": "มิ้นต์กำลังดำเนินการชำระเงินตามคำขอของคุณ", "processingSwap": "กำลังดำเนินการสลับระหว่างมาสินต์หลายแหล่งตามคำขอของคุณ", "pubKey": "คีย์สาธารณะ", "removeDefault": "เอาออกจากค่าเริ่มต้น", "scanQR": "สแกนรหัส QR", "sendEcashHint": "เลือกมิ้นต์ที่คุณต้องการสร้างโทเค็น Cashu", "setDefault": "ตั้งเป็นมิ้นต์เริ่มต้น", "supportedNuts": "NUTs ที่รองรับ", "swapNotAllowed": "ไม่สามารถสลับจากมิ้นต์ทดสอบได้", "zapNotAllowed": "ไม่สามารถ Zap จากมิ้นต์ทดสอบได้", "testMintHint": "นี่คือมิ้นต์ทดสอบเพื่อทดลอง คุณต้องการเพิ่มมันหรือไม่", "trustMintSure": "คุณแน่ใจหรือว่าต้องการเชื่อมั่นมิ้นต์นี้", "updatedDefault": "อัปเดตมิ้นต์เริ่มต้นแล้ว", "newMintAdded": "เพิ่มมิ้นต์แล้ว!", "newMintAddedQuestion": "คุณต้องการรับ Ecash ตอนนี้หรือไม่", "selectSwapReceiver": "เลือกมิ้นต์เป็นผู้รับชำระเงิน", "prepairZapData": "กำลังเตรียมข้อมูลธุรกรรม...", "lastUpdated": "อัปเดตล่าสุด", "mintInfoUpdated": "ข้อมูลมิ้นต์อัปเดตแล้ว!", "mintInfoUpdateFailed": "ไม่สามารถอัปเดตข้อมูลมิ้นต์ได้", "npcSettings": "Lightning address", "npcDefaultAccount": "Default", "npcTapToCopy": "Tap to copy", "npcUsernameLabel": "Custom username", "npcUsernamePlaceholder": "optional username", "npcPurchaseUsername": "Save username", "npcSetUsername": "Set Username", "npcRequestUsername": "Request username", "npcUsernameFeePrompt": "Do you want to set this username for a fee of {{amount}} sats?", "npcReceiveTitle": "NPC Lightning addresses", "npcReceiveHint": "Receive Lightning payments into your local Cashu wallet.", "npcAccountsLabel": "Accounts", "npcLocalBalance": "Local balance", "npcReceiveAddress": "Receive address", "npcSeedKey": "Seed key", "npcImportedKey": "Imported key", "npcActive": "Active", "npcSyncing": "Syncing", "npcPaused": "Paused", "npcNpubFallback": "Using your npub until a username is saved", "npcSyncAll": "Sync all", "npcSynced": "NPC account synced", "npcAccountAdded": "NPC account added", "npcAccountRemoved": "NPC account removed", "npcUsernameSaved": "Username saved", "npcAddAccountTitle": "Add NPC account", "npcAddAccountHint": "Import an existing Nostr key or derive a new key from your seed.", "npcPrivateKeyLabel": "Private key", "npcPrivateKeyPlaceholder": "nsec or hex", "npcPrivateKeyHint": "Imported keys are stored in secure storage on this device.", "npcPrivateKeyRequired": "Enter an nsec or hex private key.", "npcImportPrivateKey": "Import private key", "npcDeriveAccount": "Derive new key" }, "topNav": { "about": "เกี่ยวกับเรา", "addressBook": "สมุดที่อยู่", "advancedFunctions": "ฟังก์ชั่นขั้นสูง", "display": "การแสดงผล", "history": "ประวัติการทำธุรกรรม", "language": "ภาษา", "currency": "สกุลเงิน", "mintSettings": "การตั้งค่าการสร้างมิ้นต์", "nfcSettings": "การตั้งค่า NFC", "npcSettingsTitle": "Lightning address", "security": "ความปลอดภัย", "settings": "ตัวเลือก", "privacy": "ความเป็นส่วนตัว", "general": "ทั่วไป" }, "wallet": { "cashuContent": "ผู้เขียนของ Cashu ไม่ใช่นักวิเคราะห์รหัสเชิงลึกและโปรโตคอลยังอยู่ระหว่างการตรวจทาน. มันยังมีข้อกังวลเกี่ยวกับการมีข้อบกพร่องที่อาจเป็นอันตราย. เนื่องจากนั้น Cashu ยังไม่พร้อมใช้ในการใช้งานจริง", "cashuExperiment": "Cashu ยังเป็นการทดลอง", "claiming": "กำลังขอเรียกร้อง...", "processingInvoice": "กำลังประมวลผลใบแจ้งหนี้...", "nfcPayment": "การชำระเงิน NFC", "nfcKeepNearTerminal": "ถือโทรศัพท์ของคุณไว้ใกล้เครื่องเทอร์มินัล", "nfcSelectMaxAmount": "เลือกจำนวนเงินสูงสุด", "noLimit": "ไม่จำกัด", "custodialRisk": "ความเสี่ยงในการใช้งานที่มีความรับผิดชอบ, มิ้นต์เก็บคีย์", "custodialRiskContent": "ด้วย eNuts, คุณไม่ควบคุมคีย์ของ Bitcoin; มิ้นต์เป็นผู้รับผิดชอบ. ดังนั้นหากคุณไม่มั่นใจในมิ้นต์หนึ่ง ๆ ควรหลีกเลี่ยงการโต้ตอบกับมัน", "disclaimer": "โปรดทราบว่านี่เป็นเบต้าเวอร์ชันในช่วงเริ่มต้นของมันและยังอยู่ในกระบวนการทดสอบก่อนการเผยแพร่อย่างเป็นทางการ. ซอฟต์แวร์และเนื้อหาทั้งหมดที่พบบนมันได้รับการให้บริการตามหลักเป็น \"ตามสภาพปัจจุบัน\" และ \"ตามที่มีอยู่\" เราไม่ให้ประกันใด ๆ ไม่ว่าจะเป็นแบบชัดแจ้งหรือนัยนั้น เกี่ยวกับความเหมาะสมหรือความสามารถในการใช้งานของซอฟต์แวร์หรือเนื้อหาใด ๆ ของมัน", "enutsDisclaimer": "eNuts เป็นซอฟต์แวร์เบต้าที่ยังไม่เสร็จสมบูรณ์", "lossContent": "Cashu tokens เป็นตั๋วที่เป็นเจ้าของ นั่นหมายความว่าหากคุณสูญเสียการเข้าถึงกับพวกเขา จะไม่มีตัวเลือกการกู้คืนที่นำเข้าใช้. eNuts เก็บตั๋วของคุณในอุปกรณ์ของคุณ. ก่อนลบแอปพลิเคชันให้แน่ใจว่าคุณมีการสำรองข้อมูลตั๋วของคุณ", "lossOfTokens": "สูญเสียเงิน", "enutsMint": "มิ้นต์ eNuts ค่าเริ่มต้น", "mintDisclaimer": "การใช้มิ้นต์ eNuts ค่าเริ่มต้นเป็นที่เสี่ยงต่อความเสี่ยงของคุณเอง. เราขอแนะนำให้คุณระมัดระวังและใช้เฉพาะเพื่อวัตถุประสงค์ทดลองหรือการศึกษาเท่านั้น. ไม่มีการรับประกันใด ๆ เกี่ยวกับความสามารถในการทำงาน ความปลอดภัย หรือความพร้อมใช้งาน และมันอาจหายไปโดยไม่มีการแจ้งให้ทราบ. เงินฝากที่ทำไปยังมิ้นต์นี้ควรถือว่าเป็นบริจาคและอาจไม่ได้รับคืน อาจถูกใช้ในการพัฒนาต่อไป กรุณาทราบถึงความเสี่ยงที่เกี่ยวข้องกับซอฟต์แวร์เบต้า และมันเป็นความรับผิดชอบของคุณที่จะป้องกันสินทรัพย์ของคุณขณะใช้มิ้นต์นี้", "paidOut": "จ่ายออก", "pasteToken": "เข้ารหัสสลับแล้ว", "payInvoice": "จ่ายใบแจ้งหนี้", "payLNInvoice": "จ่ายใบแจ้งหนี้ผ่าน Lightning", "receive": "รับ", "send": "ส่ง", "proofs": "พิสูจน์", "swapped": "สลับแล้ว" } } ================================================ FILE: eas.json ================================================ { "cli": { "version": ">= 5.6.0", "appVersionSource": "remote" }, "build": { "development": { "developmentClient": true, "distribution": "internal", "android": { "buildType": "apk" } }, "preview": { "distribution": "internal", "android": { "buildType": "apk" } }, "production": { "autoIncrement": true, "android": { "buildType": "apk" } } }, "submit": { "production": {} } } ================================================ FILE: expo-router-implementation-steps.md ================================================ # Expo Router Implementation Steps This document is the working execution plan for the Expo Router refactor. Use it as the source of truth while implementing. Do not skip ahead unless the current step is complete or deliberately blocked. Related documents: - `expo-router-migration-plan.md` - `expo-router-migration-issues.md` ## Working Rules 1. Keep each implementation slice small enough to verify before moving on. 2. Prefer route wrappers in `src/app/**` over moving screen files immediately. 3. Do not refactor unrelated business logic while changing navigation. 4. Prefer serializable route params. If that is not possible, stop and introduce a small flow-state mechanism explicitly. 5. Keep old navigation code in place until the replacement path is verified. 6. After each step, confirm the app still boots and the touched flow still works. ## Decision Baseline These decisions are assumed unless changed later: 1. Use Expo Router with thin wrappers in `src/app/**` first. 2. Use direct route paths instead of nested `{ screen: ... }` navigation. 3. Replace operation-object route params with `operationId` lookup. 4. Leave broader payment-flow object cleanup until after the router shell is stable. ## Step 0: Preflight Related issues: `ER-09`, `ER-20` Goal: Start with a clean understanding of the live route surface before changing startup. Tasks: 1. Freeze the canonical route list from the current live navigator tree. 2. Mark stale route names and dead callers as cleanup targets, not active requirements. 3. Confirm the target route tree to implement under `src/app/**`. Deliverable: One canonical route inventory for the migration. Checkpoint: There is no ambiguity about which routes must keep working in the first Router pass. ## Step 1: Install and wire Expo Router entry Related issues: `ER-01` Goal: Make Expo Router own app startup without breaking the current polyfills. Tasks: 1. Add `expo-router` dependency. 2. Create a custom app entry file. 3. In that entry file, import: - `src/shim` - `message-port-polyfill` - `expo-router/entry` last 4. Update `package.json` `main` to the new entry file. 5. Add the `expo-router` plugin to `app.json`. 6. Add an app `scheme` to `app.json`. 7. Enable `experiments.typedRoutes` in `app.json`. Deliverable: The app boots through Expo Router entry instead of `registerRootComponent(App)`. Checkpoint: The app starts successfully and polyfill-dependent code still initializes. Stop condition: If startup breaks before any routing changes, fix entry/config before continuing. ## Step 2: Create the root Router layout and move bootstrap into it Related issues: `ER-02`, `ER-05` Goal: Move the existing app shell into `src/app/_layout.tsx`. Tasks: 1. Create `src/app/_layout.tsx`. 2. Move provider composition from `src/components/App.tsx` into the root layout. 3. Move app initialization logic into the root layout or a shared helper used by it. 4. Preserve: - splash screen control - manager initialization - theme provider - prompt, bottom sheet, keyboard, safe area, menu, and modal providers 5. Replace the local `NavigationContainer` with Router-compatible theme wiring. 6. Render a blank/loading state until initialization completes. Deliverable: The app shell exists entirely under `src/app/_layout.tsx`. Checkpoint: The app boots to a blank/loading placeholder, then renders successfully with all providers active. Stop condition: If initialization order changes break manager setup, fix that before any route work. ## Step 3: Add root routes with wrappers only Related issues: `ER-03`, `ER-04` Goal: Recreate the top-level app routes in Expo Router with minimal logic changes. Tasks: 1. Create root route files: - `src/app/index.tsx` - `src/app/onboarding.tsx` - `src/app/dashboard.tsx` - `src/app/qr-scanner.tsx` 2. Make each route file a thin wrapper around the existing screen component. 3. Implement `src/app/index.tsx` redirect logic using the existing onboarding decision. 4. Update onboarding completion to Router navigation. Deliverable: The app can reach onboarding, dashboard, and QR scanner through file-based routes. Checkpoint: Fresh-install and returning-user entry behavior matches the current app. Stop condition: If the app can boot but cannot route to dashboard/onboarding reliably, fix that before adding nested layouts. ## Step 4: Add nested folder layouts for stable sections Related issues: `ER-03`, `ER-19` Goal: Recreate the nested stack structure in Router form for the low-risk sections first. Tasks: 1. Create layouts for: - `src/app/settings/_layout.tsx` - `src/app/mint/_layout.tsx` - `src/app/history/_layout.tsx` - `src/app/restore/_layout.tsx` - `src/app/payment/_layout.tsx` 2. Create route wrappers for each existing screen in those groups. 3. Preserve screen options currently set in stack navigators. 4. Keep screen files in `src/screens/**` for now. Deliverable: The file-based route tree mirrors the current stack tree. Checkpoint: The main sections open via Expo Router paths and render the current screens. ## Step 5: Convert simple navigation calls first Related issues: `ER-06`, `ER-19` Goal: Replace the easiest imperative navigation calls before touching param-heavy flows. Tasks: 1. Convert simple `goBack` calls to `router.back()` where possible. 2. Convert simple route pushes/replaces that do not carry complex params. 3. Replace nested navigator calls such as: - `navigate("Settings", { screen: ... })` - `navigate("Mint", { screen: ... })` - `navigate("History", { screen: ... })` with direct route paths. 4. Leave complex route params on the old screen prop model temporarily if necessary. Suggested targets first: - settings entry - dashboard to simple routes - mint home to mint add - history index open/close Deliverable: The app uses Router navigation for the simplest paths first. Checkpoint: No behavior change in simple route transitions. ## Step 6: Keep low-level navigation hooks only where needed Related issues: `ER-08` Goal: Preserve critical flow guards while removing unnecessary dependency on screen props. Tasks: 1. Identify screens that truly need `useNavigation()` for listeners. 2. Leave `beforeRemove` listeners in place for now on: - dashboard - processing - success - successScreen - recovering - processingError 3. Verify `useFocusEffect` behavior on: - invoice - QR scanner - animated QR hook Deliverable: Lifecycle-sensitive screens still work after route conversion. Checkpoint: Back-blocking and focus reset still behave correctly on touched flows. ## Step 7: Implement the mint invoice `operationId` refactor Related issues: `ER-13` Goal: Remove prepared mint operation objects from route params. Tasks: 1. Change the prepare-and-navigate flow in `MintSelectAmount` to pass only `operationId`. 2. Update the route type and route wrapper for the invoice screen accordingly. 3. Update `Invoice` to look up the prepared operation using the ID. 4. Use the looked-up operation for: - QR display - amount display - finalization event matching 5. Add graceful fallback behavior if the operation cannot be found. Deliverable: The mint invoice route only carries `operationId`. Checkpoint: Creating an invoice, waiting for it to finalize, and navigating to success still works. Stop condition: If there is no reliable operation lookup API, pause and introduce a tiny session map deliberately. ## Step 8: Implement the melt confirmation `operationId` refactor Related issues: `ER-14` Goal: Remove prepared melt operation objects from route params. Tasks: 1. Change both melt-entry callers to pass only `operationId`. 2. Update the melt confirmation route type and route wrapper. 3. Update `MeltConfirmation` to look up the prepared operation by ID. 4. Use the looked-up operation for: - amount display - fee display - execute call - success payload construction 5. Review whether `MeltLnAddress` still needs route metadata, and minimize it if possible. Deliverable: The melt confirmation route only carries `operationId`. Checkpoint: The LN payout flow still reaches confirmation and can execute successfully. ## Step 9: Convert history details to stable-key routing Related issues: `ER-11` Goal: Stop passing full `HistoryEntry` objects through the route layer. Tasks: 1. Decide on the history detail key. 2. Update the history list/detail navigation to route by key. 3. Update the detail screen to rehydrate the entry from the key. 4. Add a not-found fallback if the entry cannot be resolved. Deliverable: History detail navigation no longer depends on a full entry object in params. Checkpoint: Opening history details from dashboard and history screens still works. ## Step 10: Fix the recovery flow handoff Related issues: `ER-12` Goal: Make the recovery flow Router-safe and correct the current mint-selection handoff. Tasks: 1. Decide on the recovery flow state holder. 2. Store selected mint URLs from `SelectRecoveryMint` in that holder. 3. Store or derive the recovery seed outside the route params. 4. Update `Recover` and `Recovering` to consume that state without passing `Uint8Array` in params. 5. Verify the selected-mints choice actually reaches the recovery logic. Deliverable: Recovery state is not passed through route params and the user’s mint selection is preserved. Checkpoint: Selecting a subset of mints and completing recovery works as intended. ## Step 11: Convert mint details routing to a safe URL form Related issues: `ER-10` Goal: Make mint details routing safe for arbitrary mint URLs. Tasks: 1. Choose the route form: - query param - encoded path segment 2. Update mint details navigation to use that form. 3. Update the mint details screen to decode/read the route input. Deliverable: Mint details routing works for any valid mint URL. Checkpoint: Mints with normal HTTPS URLs and any trailing path content still open correctly. ## Step 12: Refactor the encoded token route Related issues: `ER-15` Goal: Stop passing `Token` objects through route params. Tasks: 1. Decide whether the token can be serialized safely enough for a query param. 2. If not, introduce a small flow-state holder keyed by ID. 3. Update the send flow and encoded token screen to use the new route payload. Deliverable: The encoded token route uses only simple route data. Checkpoint: Creating and viewing a sendable token still works. ## Step 13: Refactor the broader payment flow objects Related issues: `ER-16`, `ER-17` Goal: Remove the remaining rich objects from coin-selection, processing, and error routes. Tasks: 1. Identify the minimum state required across: - select-mint-to-swap-to - coin-selection - processing - processing-error 2. Introduce a payment flow state holder if needed. 3. Route by flow ID and small primitives only. 4. Simplify `processingError` to minimal UI params. Deliverable: The payment pipeline no longer depends on non-serializable route params. Checkpoint: Send, melt, and swap-related flows still work end to end. ## Step 14: Consolidate success handling Related issues: `ER-18` Goal: Reduce the migration surface by choosing one success screen. Tasks: 1. Compare `Success.tsx` and `SuccessScreen.tsx` responsibilities. 2. Choose the canonical screen. 3. Move callers to that screen. 4. Delete the duplicate route and dead param model. Deliverable: One success route remains. Checkpoint: All current success-entry points still land on the intended UI. ## Step 15: Finish screen-level Router API migration Related issues: `ER-06` Goal: Replace the remaining screen-prop route access with Router hooks. Tasks: 1. Convert remaining screens from `{ navigation, route }` props to Router hooks. 2. Keep `useNavigation()` only where event listeners still require it. 3. Remove route-prop dependency from reusable components where possible. Deliverable: Live screens access routing through Expo Router-first APIs. Checkpoint: No touched screen still depends on old screen-prop typing unless explicitly deferred. ## Step 16: Clean up route drift and dead paths Related issues: `ER-09`, `ER-20` Goal: Delete dead route names and references after the live replacements exist. Tasks: 1. Remove stale route names from the nav type layer. 2. Remove dead callers such as: - `mintmanagement` - `selectAmount` - `nostrReceive` - `qr scan` 3. Normalize any remaining route names to the Router naming scheme. Deliverable: Only live Router-backed route names remain. Checkpoint: Searches no longer show callers to removed routes. ## Step 17: Remove the old nav type files Related issues: `ER-21` Goal: Delete the obsolete React Navigation param-list model. Tasks: 1. Remove imports from `src/model/nav.ts` and `src/nav/navTypes.ts` as screens are converted. 2. Delete those files once nothing live depends on them. 3. Replace any remaining shared types with local interfaces or non-navigation domain types. Deliverable: The old nav typing layer is gone. Checkpoint: No live import path points at the old nav type files. ## Step 18: Remove the old manual navigation layer Related issues: `ER-22` Goal: Delete the old navigator implementation completely. Tasks: 1. Remove: - `src/components/nav/Navigator.tsx` - `src/nav/SettingsNavigator.tsx` - `src/nav/MintNavigator.tsx` - `src/nav/RestoreNavigator.tsx` - `src/nav/HistoryNavigator.tsx` 2. Remove any helper code that only existed for the manual stack layer. 3. Keep only the minimum low-level navigation code still needed by Router-based listeners. Deliverable: The app navigates entirely through Expo Router. Checkpoint: No manual navigator file remains in live use. ## Final Verification Pass Run through these flows after Step 18: 1. cold start to onboarding and dashboard 2. dashboard to settings, mint, history, restore, send, melt, scan 3. mint add 4. mint invoice creation and success transition 5. melt input to confirmation to success 6. QR scan to melt or claim paths 7. history details 8. recovery with selected mints 9. success and processing back behavior 10. deep-link intake behavior for payment payloads ## If Blocked If a step is blocked, do not keep patching around it blindly. Instead: 1. write down the exact blocker 2. decide whether it is a lookup problem, a route-shape problem, or a state-handoff problem 3. add a targeted sub-step to this document or the issue list 4. resume from the last verified checkpoint ================================================ FILE: expo-router-migration-issues.md ================================================ # Expo Router Migration Issues This checklist breaks the migration into discrete issues that can be handled one by one. Recommended order: 1. ER-01 2. ER-02 3. ER-03 4. ER-04 5. ER-05 6. ER-06 7. ER-07 8. ER-08 9. ER-09 10. ER-10 11. ER-11 12. ER-12 13. ER-13 14. ER-14 15. ER-15 16. ER-16 17. ER-17 18. ER-18 ## ER-01: Add Expo Router entry and app config - [ ] Status: open Why: The app still boots through `index.ts` and `registerRootComponent`. Expo Router needs to own the entry point. Files: `package.json` `index.ts` `app.json` Current problem: `package.json` uses `"main": "index.ts"`. `index.ts` imports shims and mounts `src/components/App`. `app.json` does not yet declare the Expo Router plugin, a `scheme`, or typed routes. Suggested fix: Create a custom root entry file that preserves the current side effects: `src/shim` `message-port-polyfill` Then import `expo-router/entry` last. Update `package.json` to point `main` at that custom entry file. Add the `expo-router` plugin to `app.json`. Add an app `scheme`. Enable `experiments.typedRoutes`. Done when: The app starts through Expo Router without losing the current polyfills. ## ER-02: Move root bootstrap into `src/app/_layout.tsx` - [ ] Status: open Why: The current bootstrap logic lives in `src/components/App.tsx`, but Expo Router expects the root layout to be the top-level app shell. Files: `src/components/App.tsx` `src/app/_layout.tsx` Current problem: `App.tsx` owns: provider composition splash screen coordination theme wiring manager initialization onboarding flag calculation Suggested fix: Move the root provider tree and initialization flow into `src/app/_layout.tsx`. Keep the current initialization order intact. Render a blank/loading placeholder until the manager is ready. Done when: `RootApp` and the old `App` shell are no longer responsible for navigation startup. ## ER-03: Replace manual navigator files with file-based layouts - [ ] Status: open Why: The app currently depends on React Navigation stack files instead of file-based routes. Files: `src/components/nav/Navigator.tsx` `src/nav/SettingsNavigator.tsx` `src/nav/MintNavigator.tsx` `src/nav/RestoreNavigator.tsx` `src/nav/HistoryNavigator.tsx` `src/app/**` Current problem: All live routes are registered manually in stack components. Suggested fix: Create the `src/app/**` route tree and corresponding `_layout.tsx` files. Start with thin route wrappers that re-export the current screens instead of moving screen files immediately. Preserve existing stack options in the new layouts. Done when: The live route tree is represented in `src/app/**` and the old navigator files are unused. ## ER-04: Recreate onboarding entry logic with router redirects - [ ] Status: open Why: The current initial route is chosen with `initialRouteName={shouldOnboard ? "onboarding" : "dashboard"}`. Files: `src/components/nav/Navigator.tsx` `src/components/App.tsx` `src/screens/Onboarding.tsx` `src/app/index.tsx` Current problem: Expo Router does not use `initialRouteName` the same way for app startup. Suggested fix: Use `src/app/index.tsx` to redirect to `/onboarding` or `/dashboard` based on the existing `STORE_KEYS.explainer` check. Update onboarding completion to use `router.replace("/dashboard")`. Done when: Fresh installs land on onboarding and returning users land on dashboard. ## ER-05: Replace `NavigationContainer` with router-compatible theme wiring - [ ] Status: open Why: Expo Router manages the navigation container internally. Files: `src/components/App.tsx` `src/styles/colors.ts` Current problem: `ThemedNavigationContainer` wraps the whole app in a manual `NavigationContainer`. Suggested fix: Remove the manual container. Keep the theme object only where still needed through Expo Router-compatible wiring. Verify there is no remaining dependency on `NavigationContainer` ownership. Done when: Theme behavior is preserved without a local `NavigationContainer`. ## ER-06: Replace screen-prop navigation types with Router hooks - [ ] Status: open Why: Large parts of the app are typed against `RootStackParamList`, nested stack param lists, and `NativeStackScreenProps`. Files: `src/model/nav.ts` `src/nav/navTypes.ts` `src/screens/**` `src/components/**` Current problem: Route access is tightly coupled to React Navigation screen props. Suggested fix: Convert screens incrementally to: `useRouter()` `useLocalSearchParams()` `useNavigation()` only where low-level listeners are required Delete old param-list types as each area migrates. Done when: Live screens no longer require React Navigation screen prop injection. ## ER-07: Audit custom deep-link intake alongside Expo Router - [ ] Status: open Why: The app already consumes incoming URLs for Cashu tokens and invoices through `Linking`, while Expo Router also uses deep linking. Files: `src/context/Linking.tsx` `src/screens/Payment/Send/CoinSelection.tsx` `src/screens/Payment/Processing.tsx` `app.json` Current problem: The app needs both: route deep links for app navigation raw external URL intake for token/invoice handling Suggested fix: Decide which incoming URLs should be treated as Expo Router routes and which should be treated as raw payloads. Preserve the existing token/invoice capture behavior. Verify the chosen `scheme` does not break current payment flows. Done when: Expo Router deep linking and Cashu/LNURL intake can coexist predictably. ## ER-08: Audit `beforeRemove` and focus-based navigation behavior - [ ] Status: open Why: Several screens rely on navigation lifecycle hooks to block exits or restart focus-based behavior. Files: `src/components/nav/utils.ts` `src/screens/Dashboard.tsx` `src/screens/Payment/Processing.tsx` `src/screens/Payment/ProcessingError.tsx` `src/screens/Payment/Success.tsx` `src/screens/Payment/SuccessScreen.tsx` `src/screens/Restore/Recovering.tsx` `src/screens/Payment/Receive/Invoice.tsx` `src/screens/QRScan/QrScannerScreen.tsx` `src/components/hooks/AnimatedQr.ts` Current problem: The app depends on: `beforeRemove` `useFocusEffect` route stack history inspection Suggested fix: Keep low-level navigation listeners only where they are still necessary. Re-test back behavior on dashboard, processing, success, and recovery flows. Confirm `useFocusEffect` still behaves correctly after migration. Done when: Critical flows still prevent accidental exits and focus-driven screens still reset correctly. ## ER-09: Normalize route names and remove route inventory drift - [ ] Status: open Why: The current nav model includes live routes, stale routes, and mixed naming styles. Files: `src/model/nav.ts` `src/nav/navTypes.ts` `src/components/nav/Navigator.tsx` `src/screens/Mints/components/MintItem.tsx` `src/components/Empty.tsx` `src/screens/Payment/Send/SelectMintToSwapTo.tsx` Current problem: There is route drift between the type layer and the live navigator tree. Examples: `selectAmount` `selectMint` `selectTarget` `mintmanagement` `mint info` `mint proofs` `disclaimer` `Seed` `Mnemonic` `Advanced settings` `nostrReceive` `qr scan` Suggested fix: Make a definitive list of live routes. Delete stale route names and dead navigation code. Normalize live route names to lowercase kebab-case in Expo Router. Done when: There is exactly one canonical route inventory. ## ER-10: Make the Mint details route safe for Expo Router params - [ ] Status: open Why: The mint details screen is a good Router candidate, but its current param is a full `mintUrl`. Files: `src/screens/Mints/MintHomeScreen.tsx` `src/screens/Mints/MintSettingsScreen.tsx` Current problem: A raw mint URL contains `://` and `/`, which is awkward as a path segment. Suggested fix: Do not use a plain `[mintUrl].tsx` segment with an unencoded URL. Either: use a query param like `/mint/details?mintUrl=...` or encode/decode the value before routing. Done when: Mint details routing works for any valid mint URL. ## ER-11: Replace full `HistoryEntry` route params with a stable lookup key - [ ] Status: open Why: History detail routing currently passes the entire history object through navigation. Files: `src/screens/History/components/LatestHistoryWrapper.tsx` `src/screens/History/Details.tsx` `src/nav/navTypes.ts` Current problem: `HistoryEntryDetails` consumes `route.params.entry`, which is not Router-friendly. Suggested fix: Introduce a stable history detail key. Route to that key instead of passing the whole object. Look up the entry again from store, manager state, or a small session cache. Done when: History details can open without passing a full `HistoryEntry` through route params. ## ER-12: Fix the recovery flow state handoff - [ ] Status: open Why: The recovery flow currently depends on non-serializable route state and also appears to drop the selected mint list. Files: `src/screens/Restore/SelectRecoveryMint.tsx` `src/screens/Restore/Recover.tsx` `src/screens/Restore/Recovering.tsx` `src/nav/navTypes.ts` Current problem: `Recovering` expects `{ bip39seed: Uint8Array; mintUrls: string[] }`. `Recover` passes a `Uint8Array` through navigation. `SelectRecoveryMint` tracks `selectedMints` locally but does not forward them to `Recover`, and `Recover` later uses all known mints instead. Suggested fix: Move recovery state into a small ephemeral store or context. Persist the chosen mint URLs there. Persist the generated seed there as well. Route to the next screen with a lightweight key or no payload at all. Done when: The selected mint list is preserved and the recovery flow no longer depends on `Uint8Array` route params. ## ER-13: Refactor the mint invoice flow to pass `operationId` instead of operation objects - [ ] Status: open Why: The receive flow passes a prepared mint operation object directly into the invoice screen. Files: `src/screens/Payment/MintSelectAmount.tsx` `src/screens/Payment/Receive/Invoice.tsx` `src/model/nav.ts` Current problem: `MintSelectAmount` navigates with `{ mintUrl, operation }`. `Invoice` currently reads `operation.id`, `operation.amount`, and `operation.request` directly from route params. Suggested fix: After `manager.ops.mint.prepare(...)`, pass only `operationId` in navigation. Update `Invoice` to look up the operation by ID on the destination screen. Use that looked-up operation for: displaying the request QR displaying the amount matching manager finalization events Done when: The invoice route only carries `operationId`, and the destination screen resolves the operation from that ID. ## ER-14: Refactor the melt confirmation flow to pass `operationId` instead of operation objects - [ ] Status: open Why: The LN payout flow currently passes prepared operations and metadata-rich payloads between screens. Files: `src/screens/Payment/MeltInput.tsx` `src/screens/Payment/MeltLnAddress.tsx` `src/screens/Payment/MeltConfirmation.tsx` `src/model/nav.ts` Current problem: `MeltInput` and `MeltLnAddress` navigate with a prepared `operation` object. `MeltConfirmation` currently reads the full operation from route params. `MeltLnAddress` also passes metadata that should be reviewed separately. Suggested fix: After `manager.ops.melt.prepare(...)`, pass only `operationId` to `MeltConfirmation`. Update `MeltConfirmation` to look up the prepared operation by ID on the destination screen. Use the looked-up operation for: displaying amount and fee reserve executing the melt building the success payload Keep metadata out of route params unless the destination screen truly needs it; if it does, prefer recomputing or separately serializing only the minimal fields needed. Done when: The melt confirmation route only carries `operationId`, and the destination screen resolves the operation from that ID. ## ER-15: Refactor the encoded token screen to stop passing `Token` objects in params - [ ] Status: open Why: The send flow currently passes a full Cashu `Token` object into the token display screen. Files: `src/screens/Payment/SendSelectAmount.tsx` `src/screens/Payment/Send/EncodedToken.tsx` `src/model/nav.ts` Current problem: `SendSelectAmount` navigates with `{ token }`. Suggested fix: Store the generated token in ephemeral flow state. Navigate with a simple key. Load the token again in `EncodedToken` from that key. Done when: The encoded token route only requires a serializable identifier. ## ER-16: Refactor the coin selection and processing flows to stop passing rich domain objects - [ ] Status: open Why: These routes currently pass domain objects that are not a good fit for Router params. Files: `src/screens/Payment/Send/CoinSelection.tsx` `src/screens/Payment/Processing.tsx` `src/model/nav.ts` `src/screens/Payment/Send/SelectMintToSwapTo.tsx` Current problem: The active param types include values like: `IMintUrl` `ITokenInfo` `IProofSelection[]` `targetMint` `remainingMints` Suggested fix: Introduce a payment flow store keyed by flow ID. Route between coin selection and processing using that ID. Only keep small flags or IDs in the URL layer. Done when: The payment pipeline no longer depends on rich domain objects in route params. ## ER-17: Simplify `processingError` route params - [ ] Status: open Why: The error route is close to safe already, but its type model still includes more context than it should. Files: `src/model/nav.ts` `src/screens/Payment/Processing.tsx` `src/screens/Payment/ProcessingError.tsx` Current problem: `processingError` still allows `mint?: IMintUrl` in the param model even though the screen mainly needs `errorMsg` and a little display context. Suggested fix: Reduce the route payload to the minimum the screen really needs. Prefer simple primitives like: `errorMsg` `scan` `source` Done when: The error route only carries simple UI state. ## ER-18: Consolidate the duplicate success screens - [ ] Status: open Why: The app currently has both `success` and `successScreen`, with overlapping responsibilities. Files: `src/components/nav/Navigator.tsx` `src/screens/Payment/Success.tsx` `src/screens/Payment/SuccessScreen.tsx` callers in payment and scanner flows Current problem: Two different success routes increase migration complexity and keep two param models alive. Suggested fix: Choose one canonical success route. Move all callers to it. Delete the other screen and its route type. Done when: There is exactly one success screen and one success param model. ## ER-19: Rewrite nested-stack route callers to direct Router paths - [ ] Status: open Why: Several screens currently navigate into nested stacks by parent route name plus `{ screen: ... }` params. Files: `src/screens/Dashboard.tsx` `src/screens/Settings/index.tsx` `src/components/Balance.tsx` `src/screens/History/components/LatestHistoryWrapper.tsx` `src/screens/Mints/MintHomeScreen.tsx` Current problem: Current calls include patterns like: `navigation.navigate("Settings", { screen: "SettingsMain" })` `navigation.navigate("Mint", { screen: "MintHome" })` `navigation.navigate("History", { screen: "HistoryEntryDetails", params: ... })` Suggested fix: Replace each nested navigator jump with a direct route path. Examples: `/settings` `/mint` `/history` Done when: No screen depends on nested-stack `{ screen: ... }` navigation patterns. ## ER-20: Resolve dead or unreachable payment and mint routes before migration cleanup - [ ] Status: open Why: Some screens and route types appear to reference routes that are not part of the live navigator tree. Files: `src/model/nav.ts` `src/screens/Mints/components/MintItem.tsx` `src/screens/Payment/Send/SelectMintToSwapTo.tsx` `src/components/Empty.tsx` Current problem: Examples: `MintItem` navigates to `mintmanagement` `SelectMintToSwapTo` navigates to `selectAmount` `Empty` references `nostrReceive` and `qr scan` Suggested fix: Confirm which of these routes are dead code versus partially migrated code. Delete dead paths. Re-point any still-needed flows to live routes. Done when: There are no remaining references to routes that do not exist in the live app. ## ER-21: Remove the old nav type layer after migration - [ ] Status: open Why: The old nav model will become a maintenance trap once Expo Router is in place. Files: `src/model/nav.ts` `src/nav/navTypes.ts` all imports from those files Current problem: Many screens and components import route prop types from the old stack model. Suggested fix: Delete these files only after all live screens have been converted. Replace them with local interfaces and Router-based param access. Done when: `src/model/nav.ts` and `src/nav/navTypes.ts` are gone or reduced to non-navigation domain types only. ## ER-22: Delete the manual navigation layer and related helpers - [ ] Status: open Why: Once the Router migration is complete, the manual stack layer should disappear entirely. Files: `src/components/nav/Navigator.tsx` `src/nav/SettingsNavigator.tsx` `src/nav/MintNavigator.tsx` `src/nav/RestoreNavigator.tsx` `src/nav/HistoryNavigator.tsx` `src/components/nav/utils.ts` Current problem: The migration is not complete until the old nav layer is actually removed. Suggested fix: Delete the old navigator files and any helper code that only exists to support them. Retain only the minimal low-level navigation code still required by Expo Router. Done when: The app navigates entirely through `src/app/**` and no manual navigator files remain. ================================================ FILE: expo-router-migration-plan.md ================================================ # Expo Router Migration Plan ## Goal Migrate the app from manual React Navigation stacks to Expo Router with the smallest safe refactor first, then clean up the flows that currently depend on non-serializable navigation params. ## Target Route Tree ```text src/app/ _layout.tsx index.tsx onboarding.tsx dashboard.tsx qr-scanner.tsx settings/ _layout.tsx index.tsx display.tsx language.tsx currency.tsx nfc.tsx view-mnemonic.tsx mint/ _layout.tsx index.tsx add.tsx [mintUrl].tsx history/ _layout.tsx index.tsx [entryId].tsx restore/ _layout.tsx index.tsx recover.tsx recovering.tsx payment/ _layout.tsx send-select-amount.tsx mint-select-amount.tsx melt-input.tsx melt-ln-address.tsx melt-confirmation.tsx processing.tsx processing-error.tsx mint-invoice.tsx encoded-token.tsx success.tsx success-screen.tsx select-mint-to-swap-to.tsx coin-selection.tsx ``` Notes: - `index.tsx` should choose between onboarding and dashboard. - Nested stacks map naturally to folder `_layout.tsx` files. - Route names should be normalized to lowercase kebab-case. ## Phase 1: Router Scaffolding 1. Add Expo Router dependency and config. 2. Change entry from `index.ts` / `src/components/App.tsx` to Expo Router entry. 3. Add the `expo-router` plugin to `app.json`. 4. Create `src/app/_layout.tsx`. 5. Move root providers and app initialization from `src/components/App.tsx` into the root layout. 6. Replace `NavigationContainer` usage with Router-managed navigation plus React Navigation `ThemeProvider`. Expected output: - The app boots through Expo Router. - No screen behavior changes yet beyond the routing shell. ## Phase 2: Mechanical Route Migration 1. Replace `Navigator.tsx` and nested stack components with folder layouts. 2. Re-export or move existing screens into `src/app/**`. 3. Preserve screen options in layout files: - `headerShown: false` - `animation` - `gestureEnabled` - `navigationBarColor` 4. Preserve onboarding entry behavior with redirect logic in `src/app/index.tsx`. Expected output: - Existing screens are reachable through file-based routes. - Root and nested stacks behave roughly the same. ## Phase 3: Navigation API Migration 1. Replace screen props `{ navigation, route }` with Expo Router hooks where possible. 2. Migrate imperative calls: - `navigation.navigate(...)` to `router.navigate(...)` or `router.push(...)` - `navigation.replace(...)` to `router.replace(...)` - `navigation.goBack()` to `router.back()` 3. For screens that still need low-level navigation events, keep `useNavigation()` from Expo Router. Expected output: - Screens stop depending on React Navigation screen prop injection. - Route typing starts shifting away from `RootStackParamList`. ## Phase 4: Param Refactor Hotspots This is the main migration risk. Expo Router works best when route params are simple serializable values. The current app passes rich in-memory objects between screens. ### Current high-risk flows - `MintSelectAmount -> mintInvoice` passes `operation` - `MeltInput` / `MeltLnAddress -> MeltConfirmation` passes `operation` and metadata objects - `SendSelectAmount -> encodedToken` passes a token object - `Recover -> Recovering` passes `Uint8Array` - `History list -> details` passes a full `HistoryEntry` ### Recommended refactor pattern - `history/[entryId].tsx` Use a stable ID or re-query from store/context instead of passing the full `entry` object. - `mint/[mintUrl].tsx` Keep this string-param based route; it already fits Expo Router well. - `restore/recovering.tsx` Do not pass `Uint8Array` in route params. Persist temporary recovery input in context, store, or an ephemeral session map. - `payment/mint-invoice.tsx` Do not pass prepared operation objects through the route. Either prepare on the destination screen or save the prepared operation in ephemeral state keyed by an ID. - `payment/melt-confirmation.tsx` Same as above. - `payment/encoded-token.tsx` Prefer storing the generated token in ephemeral state and navigating by an ID. Expected output: - Routes only use simple params like strings, numbers, and booleans. - Flow screens become Router-compatible and more deep-link-safe. ## Phase 5: Type Migration 1. Remove dependence on `src/model/nav.ts` and `src/nav/navTypes.ts`. 2. Replace screen prop types with: - `useLocalSearchParams` - Router typed hrefs - local prop interfaces for non-route props 3. Keep a small temporary compatibility layer only if needed during migration, then delete it. Expected output: - Navigation typing becomes route-string based instead of stack-param-list based. - Dead route names disappear. ## Phase 6: Back-Blocking And Flow Guards The current app uses `beforeRemove` listeners in a few screens to block accidental exits, including: - dashboard - processing - success - recovering Plan: 1. Audit each `beforeRemove` usage. 2. Keep low-level `useNavigation().addListener("beforeRemove", ...)` where still needed. 3. Replace with simpler route structure or redirect logic where possible. Expected output: - No regression in protected or critical flows. - Back behavior stays intentional. ## Phase 7: Cleanup 1. Delete: - `src/components/nav/Navigator.tsx` - `src/nav/SettingsNavigator.tsx` - `src/nav/MintNavigator.tsx` - `src/nav/RestoreNavigator.tsx` - `src/nav/HistoryNavigator.tsx` 2. Remove unused React Navigation types and imports. 3. Remove stale route names from `src/model/nav.ts` and `src/components/Empty.tsx`. 4. Normalize route naming. ## Risk List ### Highest risk - Passing non-serializable objects in params - Recovery flow using `Uint8Array` - Operation-preparation flows that assume in-memory handoff between screens ### Medium risk - `beforeRemove` behavior changes - onboarding redirect logic - theme/provider bootstrapping during root layout migration ### Low risk - nested stack structure - settings, mint, history, and restore route mapping - mint details route keyed by `mintUrl` ## Decisions To Make Early 1. Choose a temporary state strategy for flow objects: - context - store - small in-memory session map 2. Decide whether to physically move screen files into `src/app` or keep screens in `src/screens` and create thin route wrappers. 3. Decide whether to do a compatibility-first migration or a cleanup-first migration. Recommendation: 1. Use thin `src/app/**` wrappers first. 2. Use a small ephemeral flow-state store for non-serializable objects. 3. Convert high-risk flows one by one after the router shell is live. ## Recommended Execution Order 1. Router install, config, and root layout. 2. File-based stacks for dashboard, settings, mint, history, and restore. 3. Simple string-param routes first. 4. History details refactor. 5. Recovery flow refactor. 6. Mint and melt operation flow refactors. 7. Success, processing, and back-blocking audit. 8. Delete the old nav layer and old nav types. ## Definition Of Done - App boots via Expo Router. - Onboarding and dashboard entry works. - All current screens are reachable. - No route depends on non-serializable params. - No remaining imports from old navigator files. - Critical back-blocked flows still behave correctly. ## Next Step Turn this into a route-by-route issue list, starting with the non-serializable param flows. ================================================ FILE: index.ts ================================================ // Import shim first to set up crypto polyfill before any other modules import "./src/shim"; //TODO: Find a workaround for this polyfill. Maybe we should use NDK instead. import "message-port-polyfill"; import { registerRootComponent } from "expo"; import App from "./src/components/App"; registerRootComponent(App); ================================================ FILE: package.json ================================================ { "name": "enuts", "version": "1.0.0", "main": "index.ts", "scripts": { "start": "expo start", "android": "expo run:android", "ios": "expo run:ios", "format": "prettier --write ." }, "dependencies": { "@cashu/cashu-ts": "^3.6.4", "@cashu/coco-core": "^1.0.0-rc.2", "@cashu/coco-expo-sqlite": "^1.0.0-rc.2", "@cashu/coco-react": "^1.0.0-rc.2", "@expo/vector-icons": "^15.0.3", "@gandlaf21/bc-ur": "^1.1.12", "@lodev09/react-native-true-sheet": "^3.10.1", "@react-navigation/native": "^7.1.14", "@react-navigation/native-stack": "^7.3.21", "@scure/bip39": "^2.0.0", "@shopify/flash-list": "2.0.2", "@tanstack/react-query": "^5.83.0", "@types/react-native-onboarding-swiper": "^1.1.9", "bech32": "^2.0.0", "cashu-kym": "^0.4.1", "coco-cashu-plugin-npc": "^3.0.0-rc.20260430.1.1.sha.211bc4c", "crypto-js": "^4.2.0", "expo": "~54.0.25", "expo-application": "~7.0.7", "expo-camera": "~17.0.9", "expo-clipboard": "~8.0.7", "expo-crypto": "~15.0.7", "expo-dev-client": "~6.0.18", "expo-drizzle-studio-plugin": "^0.2.1", "expo-file-system": "~19.0.19", "expo-image": "~3.0.10", "expo-localization": "~17.0.7", "expo-secure-store": "~15.0.7", "expo-splash-screen": "~31.0.11", "expo-sqlite": "~16.0.9", "expo-status-bar": "~3.0.8", "lottie-react-native": "~7.3.1", "message-port-polyfill": "^0.2.0", "nostr-tools": "^2.17.0", "react": "19.1.0", "react-i18next": "^15.6.0", "react-native": "0.81.5", "react-native-gesture-handler": "~2.28.0", "react-native-keyboard-controller": "1.18.5", "react-native-nfc-manager": "^4.0.0-beta.6", "react-native-onboarding-swiper": "^1.3.0", "react-native-popup-menu": "^0.18.0", "react-native-qrcode-svg": "^6.3.15", "react-native-reanimated": "^4.1.5", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", "react-native-size-matters": "^0.4.2", "react-native-svg": "15.12.1", "react-native-worklets": "0.5.1" }, "devDependencies": { "@babel/core": "^7.25.2", "@types/react": "~19.1.10", "expo-mcp": "~0.2.1", "prettier": "^3.7.4", "typescript": "~5.9.2" }, "private": true } ================================================ FILE: src/components/ActionButtons.tsx ================================================ import { View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { s, ScaledSheet } from "react-native-size-matters"; import Button from "./Button"; interface IActionBtnsProps { topBtnTxt: string; topBtnAction: () => void; bottomBtnTxt: string; bottomBtnAction: () => void; ontopOfNav?: boolean; absolutePos?: boolean; loading?: boolean; topIcon?: React.ReactNode; bottomIcon?: React.ReactNode; } export default function ActionButtons({ topBtnTxt, topBtnAction, bottomBtnTxt, bottomBtnAction, ontopOfNav, absolutePos, loading, topIcon, bottomIcon, }: IActionBtnsProps) { const insets = useSafeAreaInsets(); return ( )} */} ); } ================================================ FILE: src/screens/History/components/TokenSection.tsx ================================================ import Copy from "@comps/Copy"; import Txt from "@comps/Txt"; import Separator from "@comps/Separator"; import { useThemeContext } from "@src/context/Theme"; import { View } from "react-native"; import { ScaledSheet } from "react-native-size-matters"; const truncateStr = (str: string, maxLength: number) => { if (str.length <= maxLength) return str; return str.substring(0, maxLength) + "..."; }; type TokenSectionProps = { label: string; value: string; }; export function TokenSection({ label, value }: TokenSectionProps) { const { color } = useThemeContext(); return ( <> ); } const styles = ScaledSheet.create({ separator: { marginVertical: "10@vs", }, tokenSection: { paddingHorizontal: "15@s", paddingBottom: "15@vs", }, tokenHeader: { flexDirection: "row", justifyContent: "space-between", alignItems: "center", marginBottom: "10@vs", }, sectionTitle: { fontSize: "16@vs", fontWeight: "600", }, tokenValue: { fontSize: "14@vs", }, tokenContainer: { padding: "10@s", borderRadius: "8@s", }, }); ================================================ FILE: src/screens/History/entryTime.tsx ================================================ import { DayInMs, HourInMs, MinuteInMs } from "@consts"; import { NS } from "@src/i18n"; import { getShortDateStr } from "@util"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; interface IEntryTimeProps { from: number; fallback?: string; } export default function EntryTime({ from, fallback }: IEntryTimeProps) { const { t } = useTranslation([NS.history]); const [time, setTime] = useState(); function calcTime() { const fromDate = new Date(from); const ago = new Date().getTime() - from; const absAgo = Math.abs(ago); if (absAgo > DayInMs) { return getShortDateStr(fromDate); } else if (absAgo > HourInMs) { const hrs = Math.floor(absAgo / HourInMs); return hrs > 1 ? t("nHrsAgo", { hrs }) : t("oneHrAgo"); // `${hrs} hour${hrs > 1 ? 's' : ''} ago` } else if (absAgo < MinuteInMs) { return fallback; } const mins = Math.floor(absAgo / MinuteInMs); return mins > 1 ? t("nMinsAgo", { mins }) : t("oneMinAgo"); //`${mins} minute${mins > 1 ? 's' : ''} ago` } useEffect(() => { setTime(calcTime()); const t = setInterval(() => { setTime((s) => { const newTime = calcTime(); if (newTime !== s) { return newTime; } return s; }); }, MinuteInMs); return () => clearInterval(t); // eslint-disable-next-line react-hooks/exhaustive-deps }, [time]); return <>{time}; } ================================================ FILE: src/screens/History/index.tsx ================================================ import Empty from "@comps/Empty"; import { isIOS } from "@consts"; import type { THistoryPageProps } from "@model/nav"; import Screen from "@comps/Screen"; import { HistoryEntry } from "@cashu/coco-core"; import { usePaginatedHistory } from "@cashu/coco-react"; import { FlashList } from "@shopify/flash-list"; import { useThemeContext } from "@src/context/Theme"; import { NS } from "@src/i18n"; import { globals } from "@styles"; import { useTranslation } from "react-i18next"; import { ActivityIndicator, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { ScaledSheet } from "react-native-size-matters"; import { LatestHistoryMintEntry } from "./components/LatestHistoryMintEntry"; import { LatestHistorySendEntry } from "./components/LatestHistorySendEntry"; import { LatestHistoryMeltEntry } from "./components/LatestHistoryMeltEntry"; import { LatestHistoryReceiveEntry } from "./components/LatestHistoryReceiveEntry"; export default function HistoryPage({ navigation }: THistoryPageProps) { const insets = useSafeAreaInsets(); const { t } = useTranslation([NS.common]); const { color } = useThemeContext(); const { history, loadMore, hasMore, isFetching, refresh } = usePaginatedHistory(5); const renderHistoryEntry = (entry: HistoryEntry) => { switch (entry.type) { case "mint": return ; case "send": return ; case "melt": return ; case "receive": return ; default: return null; } }; const handleLoadMore = () => { if (!isFetching && hasMore) { void loadMore(); } }; return ( navigation.goBack()} > {/* History list with infinite scroll */} ( {renderHistoryEntry(item)} )} onEndReached={handleLoadMore} onEndReachedThreshold={0.5} ListEmptyComponent={} ListFooterComponent={ isFetching && hasMore ? ( ) : null } onRefresh={() => void refresh()} refreshing={isFetching && history.length === 0} /> ); } const styles = ScaledSheet.create({ container: { flex: 1, alignItems: "center", }, listContainer: { flex: 1, width: "100%", }, entryCard: { borderRadius: 20, paddingHorizontal: "20@s", paddingVertical: "15@vs", marginBottom: "6@vs", }, loaderWrap: { paddingVertical: "20@vs", alignItems: "center", justifyContent: "center", }, }); ================================================ FILE: src/screens/Mints/AddMintScreen.tsx ================================================ import Txt from "@comps/Txt"; import TxtInput from "@comps/TxtInput"; import { ChevronRightIcon, ZapIcon, PlusIcon } from "@comps/Icons"; import { IconBtn } from "@comps/Button"; import { useThemeContext } from "@src/context/Theme"; import { NativeStackScreenProps } from "@react-navigation/native-stack"; import { MintStackParamList } from "@src/nav/navTypes"; import { globals, highlight as hi } from "@src/styles"; import { formatMintUrl, isErr } from "@util"; import { useState } from "react"; import useDiscoverMints from "@comps/hooks/useDiscoverMints"; import { View, TouchableOpacity, Text, ActivityIndicator, ScrollView } from "react-native"; import { s, vs } from "react-native-size-matters"; import Screen from "@comps/Screen"; import { usePromptContext } from "@src/context/Prompt"; import { NS } from "@src/i18n"; import { useTranslation } from "react-i18next"; import { useManager } from "@src/context/Manager"; interface RecommendedMintItemProps { mint: MintRecommendation; onPress: (url: string) => void; color: any; highlight: string; } type MintRecommendation = { id: number; url: string; info: string; name: string; balance: number; sum_donations: number; updated_at: string; next_update: string; state: string; n_errors: number; n_mints: number; n_melts: number; }; function RecommendedMintItem({ mint, color, highlight, onPress }: RecommendedMintItemProps) { const displayName = mint.name || formatMintUrl(mint.url); return ( onPress(mint.url)} > {mint.state} {mint.url} ); } type MintAddScreenProps = NativeStackScreenProps; function AddMintScreen({ navigation, route }: MintAddScreenProps) { const { t } = useTranslation([NS.common]); const { color, highlight } = useThemeContext(); const [inputUrl, setInputUrl] = useState(""); const { recommendations, isLoading, isError } = useDiscoverMints(); const { openPromptAutoClose } = usePromptContext(); const manager = useManager(); const handleMintSelect = (url: string) => { setInputUrl(url); // You might want to add navigation or other logic here // For now, just populate the input field }; const handleConfirmSelection = async () => { const submitted = inputUrl.trim(); if (!submitted) { return; } try { await manager.mint.addMint(submitted, { trusted: true }); navigation.goBack(); } catch (e) { openPromptAutoClose({ msg: isErr(e) ? e.message : t("mintConnectionFail", { ns: NS.mints }), ms: 2000, }); } }; return ( navigation.goBack()} withKeyboard={true} > } onPress={handleConfirmSelection} disabled={!inputUrl.trim()} size={s(48)} testId="confirm-mint-button" /> {isLoading && ( )} {isError && ( Something went wrong fetching recommendations )} {!isLoading && recommendations.length > 0 && ( {recommendations.map((mint) => ( ))} )} ); } export default AddMintScreen; ================================================ FILE: src/screens/Mints/MintHomeScreen.tsx ================================================ import Button, { IconBtn, TxtButton } from "@comps/Button"; import Card from "@comps/Card"; import Empty from "@comps/Empty"; import { ChevronRightIcon, PlusIcon } from "@comps/Icons"; import Txt from "@comps/Txt"; import Screen from "@comps/Screen"; import { useKnownMints } from "@src/context/KnownMints"; import { usePrivacyContext } from "@src/context/Privacy"; import { useThemeContext } from "@src/context/Theme"; import { NS } from "@src/i18n"; import { globals, highlight as hi } from "@styles"; import { getColor } from "@styles/colors"; import { formatMintUrl } from "@util"; import { useCurrencyContext } from "@src/context/Currency"; import { Image } from "expo-image"; import { useTranslation } from "react-i18next"; import { ScrollView, TouchableOpacity, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { s, ScaledSheet, vs } from "react-native-size-matters"; export default function MintHomeScreen({ navigation }: any) { const { t } = useTranslation([NS.common]); const { knownMints } = useKnownMints(); const { color, highlight } = useThemeContext(); const { formatAmount } = useCurrencyContext(); const insets = useSafeAreaInsets(); const { hidden } = usePrivacyContext(); return ( navigation.goBack()} rightAction={ { navigation.navigate("Mint", { screen: "MintAdd" }); }} style={{ flexDirection: "row", alignItems: "center" }} > } > {knownMints.length > 0 ? ( {/* Mints list */} {knownMints.map((m, i) => { const displayName = m.mintInfo.name || formatMintUrl(m.mintUrl); const { formatted, symbol } = formatAmount(m.balance); const displayBalance = hidden.balance ? "****" : `${formatted} ${symbol}`; return ( { navigation.navigate("MintSettings", { mintUrl: m.mintUrl, }); }} activeOpacity={0.7} style={{ marginBottom: i < knownMints.length - 1 ? s(12) : 0, }} > {/* Left side: Mint icon (if available) */} {m.mintInfo.icon_url && ( )} {/* Center: Mint name and balance */} {/* Right side: Chevron icon */} ); })} ) : ( )} ); } const styles = ScaledSheet.create({ container: { alignItems: "center", justifyContent: "flex-start", }, noMintContainer: { flex: 1, width: "100%", paddingHorizontal: "20@s", }, noMintBottomSection: { position: "absolute", bottom: "20@s", right: "20@s", left: "20@s", rowGap: "20@s", }, topSection: { width: "100%", }, newMint: { position: "absolute", right: 20, bottom: 20, }, cardContent: { padding: "12@s", }, mintContainer: { flexDirection: "row", alignItems: "center", }, iconContainer: { marginRight: "12@s", }, icon: { width: "40@s", height: "40@s", borderRadius: "20@s", }, infoContainer: { flex: 1, justifyContent: "center", }, chevronContainer: { marginLeft: "8@s", }, }); ================================================ FILE: src/screens/Mints/MintSettingsScreen.tsx ================================================ import Txt from "@comps/Txt"; import Screen from "@comps/Screen"; import { useTrustedMints } from "@cashu/coco-react"; import { l } from "@log"; import ConfirmBottomSheet, { ConfirmBottomSheetRef } from "@comps/modal/ConfirmBottomSheet"; import { useKnownMints } from "@src/context/KnownMints"; import { usePromptContext } from "@src/context/Prompt"; import { useThemeContext } from "@src/context/Theme"; import { NS } from "@src/i18n"; import { mainColors } from "@styles"; import { formatMintUrl } from "@util"; import { useRef } from "react"; import { useTranslation } from "react-i18next"; import { ScrollView, View } from "react-native"; import { s, ScaledSheet } from "react-native-size-matters"; import { Image } from "expo-image"; import Button from "@comps/Button"; export default function MintSettingsScreen({ navigation, route }: any) { const { t } = useTranslation([NS.common]); const { untrustMint } = useTrustedMints(); const { openPromptAutoClose } = usePromptContext(); const { color } = useThemeContext(); const confirmSheetRef = useRef(null); const { knownMints } = useKnownMints(); const mint = knownMints.find((m) => m.mintUrl === route.params.mintUrl); const handleMintDelete = () => { void (async () => { try { await untrustMint(route.params.mintUrl); navigation.goBack(); } catch (e) { l(e); } })(); }; return ( navigation.goBack()} > {/* Mint Header Card */} {mint?.mintInfo?.icon_url && ( )} {mint?.mintInfo?.name && ( )} {mint?.mintInfo?.version && ( )} {/* Mint URL Section */} {/* Metadata Section */} {mint?.mintInfo && (mint.mintInfo.description || mint.mintInfo.description_long || (mint.mintInfo.contact && mint.mintInfo.contact.length > 0) || mint.mintInfo.motd) && ( {mint.mintInfo.description && ( 0) || !!mint.mintInfo.motd } /> )} {mint.mintInfo.description_long && ( 0) || !!mint.mintInfo.motd } /> )} {mint.mintInfo.contact && mint.mintInfo.contact.length > 0 && ( <> {mint.mintInfo.contact.map((contact, index) => { const isLast = index === mint.mintInfo.contact!.length - 1; const hasMotd = !!mint.mintInfo.motd; return ( ); })} )} {mint.mintInfo.motd && } )} {/* Danger Zone */}