gitextract_fcb18bnp/ ├── .gitattributes ├── .github/ │ └── workflows/ │ ├── fetch_georelays.yml │ └── swift-tests.yml ├── .gitignore ├── BRING_THE_NOISE.md ├── Configs/ │ ├── Debug.xcconfig │ ├── Local.xcconfig.example │ └── Release.xcconfig ├── Justfile ├── LICENSE ├── PRIVACY_POLICY.md ├── Package.resolved ├── Package.swift ├── README.md ├── WHITEPAPER.md ├── bitchat/ │ ├── Assets.xcassets/ │ │ ├── AccentColor.colorset/ │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── AppIconDebug.appiconset/ │ │ │ └── Contents.json │ │ └── Contents.json │ ├── BitchatApp.swift │ ├── Features/ │ │ ├── media/ │ │ │ └── ImageUtils.swift │ │ └── voice/ │ │ ├── VoiceNotePlaybackController.swift │ │ ├── VoiceRecorder.swift │ │ └── Waveform.swift │ ├── Identity/ │ │ ├── IdentityModels.swift │ │ └── SecureIdentityStateManager.swift │ ├── Info.plist │ ├── LaunchScreen.storyboard │ ├── Localizable.xcstrings │ ├── Models/ │ │ ├── BitchatMessage.swift │ │ ├── BitchatPacket.swift │ │ ├── BitchatPeer.swift │ │ ├── CommandInfo.swift │ │ ├── MessagePadding.swift │ │ ├── NoisePayload.swift │ │ ├── PeerID.swift │ │ ├── ReadReceipt.swift │ │ └── RequestSyncPacket.swift │ ├── Noise/ │ │ ├── NoiseProtocol.swift │ │ ├── NoiseRateLimiter.swift │ │ ├── NoiseSecurityConstants.swift │ │ ├── NoiseSecurityError.swift │ │ ├── NoiseSecurityValidator.swift │ │ ├── NoiseSession.swift │ │ ├── NoiseSessionError.swift │ │ ├── NoiseSessionManager.swift │ │ ├── NoiseSessionState.swift │ │ └── SecureNoiseSession.swift │ ├── Nostr/ │ │ ├── Bech32.swift │ │ ├── GeoRelayDirectory.swift │ │ ├── NostrEmbeddedBitChat.swift │ │ ├── NostrIdentity.swift │ │ ├── NostrIdentityBridge.swift │ │ ├── NostrProtocol.swift │ │ ├── NostrRelayManager.swift │ │ └── XChaCha20Poly1305Compat.swift │ ├── Protocols/ │ │ ├── BinaryEncodingUtils.swift │ │ ├── BinaryProtocol.swift │ │ ├── BitchatFilePacket.swift │ │ ├── BitchatProtocol.swift │ │ ├── Geohash.swift │ │ ├── LocationChannel.swift │ │ └── Packets.swift │ ├── Services/ │ │ ├── AutocompleteService.swift │ │ ├── BLE/ │ │ │ ├── BLEService.swift │ │ │ └── MimeType.swift │ │ ├── CommandProcessor.swift │ │ ├── FavoritesPersistenceService.swift │ │ ├── GeohashParticipantTracker.swift │ │ ├── GeohashPresenceService.swift │ │ ├── KeychainManager.swift │ │ ├── LocationNotesManager.swift │ │ ├── LocationStateManager.swift │ │ ├── MeshTopologyTracker.swift │ │ ├── MessageDeduplicationService.swift │ │ ├── MessageFormattingEngine.swift │ │ ├── MessageRouter.swift │ │ ├── NetworkActivationService.swift │ │ ├── NoiseEncryptionService.swift │ │ ├── NostrTransport.swift │ │ ├── NotificationService.swift │ │ ├── NotificationStreamAssembler.swift │ │ ├── PrivateChatManager.swift │ │ ├── RelayController.swift │ │ ├── TransferProgressManager.swift │ │ ├── Transport.swift │ │ ├── TransportConfig.swift │ │ ├── UnifiedPeerService.swift │ │ └── VerificationService.swift │ ├── Sync/ │ │ ├── GCSFilter.swift │ │ ├── GossipSyncManager.swift │ │ ├── PacketIdUtil.swift │ │ ├── RequestSyncManager.swift │ │ └── SyncTypeFlags.swift │ ├── Utils/ │ │ ├── Color+Peer.swift │ │ ├── CompressionUtil.swift │ │ ├── Data+SHA256.swift │ │ ├── FileTransferLimits.swift │ │ ├── Font+Bitchat.swift │ │ ├── InputValidator.swift │ │ ├── MessageDeduplicator.swift │ │ ├── PeerDisplayNameResolver.swift │ │ ├── String+DJB2.swift │ │ └── String+Nickname.swift │ ├── ViewModels/ │ │ ├── ChatViewModel.swift │ │ ├── Extensions/ │ │ │ ├── ChatViewModel+Nostr.swift │ │ │ ├── ChatViewModel+PrivateChat.swift │ │ │ ├── ChatViewModel+Tor.swift │ │ │ └── README.md │ │ ├── GeoChannelCoordinator.swift │ │ ├── MessageRateLimiter.swift │ │ ├── MinimalDistancePalette.swift │ │ ├── PublicMessagePipeline.swift │ │ └── PublicTimelineStore.swift │ ├── Views/ │ │ ├── AppInfoView.swift │ │ ├── Components/ │ │ │ ├── CommandSuggestionsView.swift │ │ │ ├── DeliveryStatusView.swift │ │ │ ├── PaymentChipView.swift │ │ │ └── TextMessageView.swift │ │ ├── ContentView.swift │ │ ├── FingerprintView.swift │ │ ├── GeohashPeopleList.swift │ │ ├── LocationChannelsSheet.swift │ │ ├── LocationNotesView.swift │ │ ├── Media/ │ │ │ ├── BlockRevealImageView.swift │ │ │ ├── VoiceNoteView.swift │ │ │ └── WaveformView.swift │ │ ├── MeshPeerList.swift │ │ ├── MessageTextHelpers.swift │ │ └── VerificationViews.swift │ ├── _PreviewHelpers/ │ │ ├── BitchatMessage+Preview.swift │ │ └── PreviewKeychainManager.swift │ ├── bitchat-macOS.entitlements │ └── bitchat.entitlements ├── bitchat.xcodeproj/ │ ├── project.pbxproj │ └── xcshareddata/ │ └── xcschemes/ │ ├── bitchat (iOS).xcscheme │ └── bitchat (macOS).xcscheme ├── bitchatShareExtension/ │ ├── Info.plist │ ├── Localization/ │ │ └── Localizable.xcstrings │ ├── ShareViewController.swift │ └── bitchatShareExtension.entitlements ├── bitchatTests/ │ ├── BLEServiceCoreTests.swift │ ├── BLEServiceTests.swift │ ├── BitchatPeerTests.swift │ ├── ChatViewModelDeliveryStatusTests.swift │ ├── ChatViewModelExtensionsTests.swift │ ├── ChatViewModelRefactoringTests.swift │ ├── ChatViewModelTests.swift │ ├── ChatViewModelTorTests.swift │ ├── CommandProcessorTests.swift │ ├── EndToEnd/ │ │ ├── PrivateChatE2ETests.swift │ │ └── PublicChatE2ETests.swift │ ├── Features/ │ │ └── ImageUtilsTests.swift │ ├── FontBitchatTests.swift │ ├── Fragmentation/ │ │ └── FragmentationTests.swift │ ├── GCSFilterTests.swift │ ├── GeohashBookmarksStoreTests.swift │ ├── GeohashParticipantTrackerTests.swift │ ├── GeohashPresenceTests.swift │ ├── GossipSyncManagerTests.swift │ ├── Info.plist │ ├── InputValidatorTests.swift │ ├── Integration/ │ │ ├── IntegrationTests.swift │ │ └── TestNetworkHelper.swift │ ├── KeychainErrorHandlingTests.swift │ ├── Localization/ │ │ └── PrimaryLocalizationKeys.json │ ├── LocationChannelsTests.swift │ ├── LocationNotesManagerTests.swift │ ├── MessageDeduplicationServiceTests.swift │ ├── MessageFormattingEngineTests.swift │ ├── MimeTypeTests.swift │ ├── Mocks/ │ │ ├── MockBLEBus.swift │ │ ├── MockBLEService.swift │ │ ├── MockIdentityManager.swift │ │ ├── MockKeychain.swift │ │ └── MockTransport.swift │ ├── Noise/ │ │ ├── NoiseCoverageTests.swift │ │ ├── NoiseProtocolTests.swift │ │ ├── NoiseRateLimiterTests.swift │ │ └── NoiseTestVectors.json │ ├── Nostr/ │ │ └── GeoRelayDirectoryTests.swift │ ├── NostrProtocolTests.swift │ ├── NotificationBlockingTests.swift │ ├── NotificationStreamAssemblerTests.swift │ ├── PreviewKeychainManagerTests.swift │ ├── Protocol/ │ │ ├── BinaryProtocolPaddingTests.swift │ │ └── BinaryProtocolTests.swift │ ├── ProtocolContractTests.swift │ ├── Protocols/ │ │ ├── BinaryEncodingUtilsTests.swift │ │ ├── BitchatFilePacketTests.swift │ │ ├── LocationChannelTests.swift │ │ └── PacketsTests.swift │ ├── PublicMessagePipelineTests.swift │ ├── PublicTimelineStoreTests.swift │ ├── README.md │ ├── ReadReceiptTests.swift │ ├── Services/ │ │ ├── AutocompleteServiceTests.swift │ │ ├── FavoritesPersistenceServiceTests.swift │ │ ├── GeohashPresenceServiceTests.swift │ │ ├── LocationStateManagerTests.swift │ │ ├── MeshTopologyTrackerTests.swift │ │ ├── MessageRouterTests.swift │ │ ├── NetworkActivationServiceTests.swift │ │ ├── NoiseEncryptionServiceTests.swift │ │ ├── NostrRelayManagerTests.swift │ │ ├── NostrTransportTests.swift │ │ ├── NotificationServiceTests.swift │ │ ├── PrivateChatManagerTests.swift │ │ ├── RelayControllerTests.swift │ │ ├── SecureIdentityStateManagerTests.swift │ │ ├── TransferProgressManagerTests.swift │ │ ├── UnifiedPeerServiceTests.swift │ │ └── VerificationServiceTests.swift │ ├── SubscriptionRateLimitTests.swift │ ├── Sync/ │ │ └── RequestSyncManagerTests.swift │ ├── TestUtilities/ │ │ ├── TestConstants.swift │ │ └── TestHelpers.swift │ ├── Utils/ │ │ ├── HexStringTests.swift │ │ └── PeerIDTests.swift │ ├── ViewSmokeTests.swift │ └── XChaCha20Poly1305CompatTests.swift ├── docs/ │ ├── GeohashPresenceSpec.md │ ├── REQUEST_SYNC_MANAGER.md │ ├── SOURCE_ROUTING.md │ ├── TOR-INTEGRATION.md │ └── privacy-assessment.md ├── localPackages/ │ ├── Arti/ │ │ ├── .gitignore │ │ ├── Cargo.toml │ │ ├── Frameworks/ │ │ │ ├── arti.xcframework/ │ │ │ │ ├── Info.plist │ │ │ │ ├── ios-arm64/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ └── arti.h │ │ │ │ │ └── libarti_bitchat.a │ │ │ │ ├── ios-arm64-simulator/ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ └── arti.h │ │ │ │ │ └── libarti_bitchat.a │ │ │ │ └── macos-arm64/ │ │ │ │ ├── Headers/ │ │ │ │ │ └── arti.h │ │ │ │ └── libarti_bitchat.a │ │ │ └── include/ │ │ │ └── arti.h │ │ ├── Package.swift │ │ ├── Sources/ │ │ │ ├── C/ │ │ │ │ ├── arti_shim.c │ │ │ │ └── include/ │ │ │ │ ├── arti.h │ │ │ │ └── module.modulemap │ │ │ ├── TorManager.swift │ │ │ ├── TorNotifications.swift │ │ │ └── TorURLSession.swift │ │ ├── arti-bitchat/ │ │ │ ├── Cargo.toml │ │ │ ├── cbindgen.toml │ │ │ └── src/ │ │ │ ├── lib.rs │ │ │ └── socks.rs │ │ └── build-ios.sh │ └── BitLogger/ │ ├── Package.swift │ ├── Sources/ │ │ ├── OSLog+Categories.swift │ │ ├── SecureLogger.swift │ │ └── String+Sanitization.swift │ └── Tests/ │ └── StringSanitizationTests.swift └── relays/ └── online_relays_gps.csv