status-go/protocol
Jonathan Rainville c5e7ca3827
fix(contact_request)_: potential fix to contact request with no saved message (#5665)
Fixes https://github.com/status-im/status-desktop/issues/15930

The issue happened because I received a notification about a contact request, but the request was not associated with a message in the DB. The DB didn't have a message with the required ID in it.

This potential fix moves the creation of the contact request later in the handling code, because the only way this bug can happen as far as I see it is if there is an error later in the handler function and the message is never added to the response, and therefore never saved.
2024-08-08 18:00:16 +05:30
..
anonmetrics feat(metrics)_: add centralized metrics 2024-07-11 10:05:31 +01:00
audio Add audio messages 2020-07-27 17:14:50 +02:00
common fix(communities)_: validate if RawMessage from DB is valid before sending it 2024-07-23 19:54:39 +02:00
communities fix(logs)_: remove community private key logging in publishCommunityPrivilegedMemberSyncMessage 2024-07-19 16:50:40 +02:00
datasync Add basic peersyncing 2024-01-23 12:46:17 +00:00
discord feat(discord): Import single channel from discord (#4160) 2023-10-25 12:32:21 -04:00
encryption feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
ens fix: use proper migrations for protocol's test database 2023-10-03 15:11:58 +02:00
identity chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
internal/sqlite Sync Settings (#2478) 2022-03-23 18:47:00 +00:00
migrations fix_: share all future addresses storage 2024-07-18 12:08:40 +03:00
peersyncing Extend peersyncing to sync 1-to-1 messages (#4962) 2024-05-14 12:20:13 +02:00
protobuf fix_: share all future addresses storage 2024-07-18 12:08:40 +03:00
pushnotificationclient feat_: Check for mobile data connection if setting is on (#5511) (#5613) 2024-07-29 14:22:15 -03:00
pushnotificationserver feat(metrics)_: add centralized metrics 2024-07-11 10:05:31 +01:00
requests chore_: CHERRY-PICK Proxy URLs for blockchain providers (#5644) 2024-08-01 10:06:34 +01:00
sqlite Add basic peersyncing 2024-01-23 12:46:17 +00:00
storenodes enable custom community storenodes (#4532) 2024-02-20 17:49:39 +02:00
subscription
transport fix_: make StoreNodeRequestManager filters ephemeral (#5582) (#5590) 2024-07-26 17:48:01 +01:00
tt chore: introduce silent test logger config 2024-02-27 11:00:29 +01:00
urls feat: add parsing for new links format (#3665) 2023-07-04 17:48:52 +04:00
v1 Always set PubsubTopic in filters 2023-11-18 02:26:34 +02:00
verification fix: use proper migrations for protocol's test database 2023-10-03 15:11:58 +02:00
wakusync chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
zaputil
LICENSE
README.md Added basic history of the protocol package (#1984) 2020-06-04 11:23:09 +01:00
activity_center.go chore: fix ban/unban flow and delete all messages feature (#4743) 2024-02-22 11:25:13 +01:00
activity_center_persistence.go chore_: bump go to 1.20 (#5027) 2024-04-18 18:48:02 +02:00
activity_center_persistence_test.go only sync decisions/state of AC notifications (#3979) 2023-10-22 17:41:20 +08:00
chat.go bug_: fix resend type for private group messages (#5258) 2024-05-30 14:18:54 +02:00
chat_group_proxy.go Clean up protocol package (#1890) 2020-03-09 07:19:23 +01:00
chat_test.go bug_: fix resend type for private group messages (#5258) 2024-05-30 14:18:54 +02:00
communities_events_eventual_consistency_test.go chore(communities)_: cover ERC721 based permissions reevaluation with tests 2024-06-07 23:46:20 +02:00
communities_events_owner_without_community_key_test.go chore(communities)_: cover ERC721 based permissions reevaluation with tests 2024-06-07 23:46:20 +02:00
communities_events_token_master_test.go fix_: tests (#5585) (#5588) 2024-07-26 10:46:38 +01:00
communities_events_utils_test.go fix(communities)_: ensure community sync doesn't override joined state 2024-06-20 15:37:20 +02:00
communities_key_distributor.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
communities_messenger_admin_test.go fix_: tests (#5585) (#5588) 2024-07-26 10:46:38 +01:00
communities_messenger_helpers_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
communities_messenger_shared_member_address_test.go chore_: needed router changes (#5620) 2024-07-29 18:03:13 +01:00
communities_messenger_signers_test.go fix(communities)_: kick AC notification after control node device change (#5472) 2024-07-05 10:38:12 +02:00
communities_messenger_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
communities_messenger_token_permissions_test.go fix(community)_: fix pure readonly channels not respecting the right roles (#5513) 2024-07-15 13:53:20 -04:00
contact.go chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
contact_test.go Compute emojiHash on-the-fly 2023-03-06 13:22:40 +02:00
delete_message.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
edit_message.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
emoji_reaction.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
errors.go fix(archives): Skip importing the archives for community when user not a member (#4006) 2023-09-15 10:42:28 +03:00
group_chat_invitation.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
group_chat_system_messages.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
identity_images.go feat: Profile showcase data sharing (#4209) 2023-11-09 22:59:01 +04:00
linkpreview_unfurler.go feature: Unfurl status links (#4033) 2023-10-13 13:25:34 +01:00
linkpreview_unfurler_image.go fix(ImageUnfurler): set title for image links (#4215) 2023-10-26 17:52:52 +01:00
linkpreview_unfurler_oembed.go feature: Unfurl status links (#4033) 2023-10-13 13:25:34 +01:00
linkpreview_unfurler_opengraph.go Add favicons to external link previews (#4788) 2024-03-12 22:47:51 +02:00
linkpreview_unfurler_status.go fix(unfurl)_: The application crashes when generating status user profile link preview 2024-07-01 21:57:18 +07:00
local_notifications.go feat: new deeplink status-im->status-app (#4198) 2023-11-02 13:56:06 +08:00
message_builder.go add PinMessage and PinnedMessage (#2180) 2021-05-14 23:22:50 +02:00
message_persistence.go fix(search)_: search now works with Discord import and bridged messages (#5489) 2024-07-05 13:33:14 -04:00
message_validator.go fix: validate display name on account creation (#4994) 2024-03-28 16:57:59 +01:00
message_validator_test.go feat(BridgeMessage): Add new type of chat message content: BridgeMessage 2024-01-30 12:14:54 +01:00
messages_iterator.go feat: introduce `MessagesIterator` 2024-02-09 16:02:17 +01:00
messenger.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_activity_center.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_activity_center_test.go chore(community)_: serialise community jsons with image URLs 2024-07-11 18:55:24 +07:00
messenger_auto_message.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
messenger_backup.go fix_: fix deleted communities query (#5232) 2024-05-27 10:09:15 -07:00
messenger_backup_handler.go chore(communities)_: request missing channels' encryption keys in a loop 2024-07-16 16:44:50 +02:00
messenger_backup_test.go fix(messenger)_: make sure display name is legit before sending (#5496) 2024-07-09 15:22:59 -04:00
messenger_base_test.go fix: clear waku envelopes cache when deleting a chat (#4621) 2024-01-30 13:43:34 +00:00
messenger_bookmarks.go Sync all devices after initial pairing (#3047) 2023-01-06 20:21:14 +08:00
messenger_bridge_message_test.go fix(search)_: search now works with Discord import and bridged messages (#5489) 2024-07-05 13:33:14 -04:00
messenger_browsers.go Issue 13813 -- Use messenger ns for browser CRUD (#2801) 2022-08-24 16:05:35 +02:00
messenger_browsers_test.go fix: close messenger's databases in tests 2023-11-28 20:59:25 +01:00
messenger_builder_test.go feat_: batch all telemetry data and send request every 10 seconds (#5251) 2024-06-13 15:31:09 -07:00
messenger_chat_context_test.go Fix contact details large image is always empty (#4864) 2024-03-06 09:25:19 -08:00
messenger_chats.go add image to chat preview (#4888) 2024-04-09 17:39:14 +02:00
messenger_collapsed_community_categories.go Add collapsed community categories 2023-03-14 17:13:21 +00:00
messenger_collapsed_community_categories_test.go Fix collapsed tests 2023-03-16 13:40:20 +00:00
messenger_communities.go feat_: Check for mobile data connection if setting is on (#5511) (#5613) 2024-07-29 14:22:15 -03:00
messenger_communities_import_discord.go chore(no-torrent)_: Renamed Torrent to Archive 2024-06-07 13:44:12 +01:00
messenger_communities_sharding_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_community_for_mobile_testing.go feat: New field in TokenCriteria proto 2024-02-27 16:25:26 +01:00
messenger_community_for_mobile_testing_test.go fix: sometimes channels do not randomly appear in test community after its creation (#4669) 2024-02-23 10:16:51 +08:00
messenger_community_metrics.go chore: remove boilerplate check of `communities.GetByID` clients 2024-01-10 18:58:17 +01:00
messenger_community_metrics_test.go refactor: update community access enum naming 2023-10-25 17:34:37 +02:00
messenger_community_shard.go fix: archive decryption fail (#5076) 2024-05-27 13:49:09 +01:00
messenger_community_storenodes.go enable custom community storenodes (#4532) 2024-02-20 17:49:39 +02:00
messenger_config.go feat_: call telemetry upon error pushing envelope (#5430) 2024-06-28 13:24:04 +03:00
messenger_config_test.go feat_: force members reevaluation (#5139) 2024-05-09 22:59:51 +03:00
messenger_contact_requests_test.go feat: add contact customization color (#4869) 2024-04-03 22:49:57 +08:00
messenger_contact_update_test.go feat: add contact customization color (#4869) 2024-04-03 22:49:57 +08:00
messenger_contact_verification.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_contact_verification_test.go fix_: Add contact to removeTrustStatus response (#5058) 2024-04-18 19:28:44 +04:00
messenger_contacts.go fix_:sync contact request decision (#5130) 2024-05-15 08:01:47 +08:00
messenger_contacts_test.go chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
messenger_curated_communities.go chore: disable curated communities loop in tests (#4894) 2024-03-09 09:42:06 +00:00
messenger_delete_message_for_everyone_test.go feat(messages)_: enable deleting bridge messages as admin (#5330) 2024-06-14 10:51:56 -04:00
messenger_delete_message_for_me_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_delete_messages_test.go feat: get and delete community member messages API (#4932) 2024-03-19 20:44:49 +01:00
messenger_discv5.go feat: Add DiscV5 to Waku2 (#2434) 2021-11-22 09:40:14 -04:00
messenger_edit_message_test.go fix: handle bridge message edits 2024-04-07 23:24:46 +02:00
messenger_emoji_reactions.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_emoji_test.go fix: prevent messenger being started twice 2024-02-27 11:00:29 +01:00
messenger_ens.go Request/Decline access to communities 2021-02-26 15:35:43 +01:00
messenger_group_chat.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_group_chat_test.go feat: add contact customization color (#4869) 2024-04-03 22:49:57 +08:00
messenger_handler.go fix(contact_request)_: potential fix to contact request with no saved message (#5665) 2024-08-08 18:00:16 +05:30
messenger_handler_test.go fix: close messenger's databases in tests 2023-11-28 20:59:25 +01:00
messenger_handlers.go feat_: implement connector service (#5375) (#5403) 2024-06-24 07:29:40 -07:00
messenger_identity.go perf(login)!: Set-up messenger filters outside login flow (#5229) 2024-06-10 12:02:42 -03:00
messenger_identity_display_name_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_identity_image_test.go Fix contact details large image is always empty (#4864) 2024-03-06 09:25:19 -08:00
messenger_installations_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_keycard.go chore: synchronization improvements applied to keycards 2023-07-11 15:14:49 +02:00
messenger_linkpreview.go feat: new `GetTextURLsToUnfurl` endpoint which extends GetURLs (#4294) 2023-11-17 13:32:37 +00:00
messenger_linkpreview_test.go Add favicons to external link previews (#4788) 2024-03-12 22:47:51 +02:00
messenger_mailserver.go fix(mailservers)_: Do not add backoff if user action triggered store node disconnection (#5602) 2024-07-29 18:56:42 +01:00
messenger_mailserver_cycle.go fix(mailservers)_: Do not add backoff if user action triggered store node disconnection (#5602) 2024-07-29 18:56:42 +01:00
messenger_mailserver_processMailserverBatch_test.go chore: store node requests manager (#4446) 2023-12-15 19:50:12 +00:00
messenger_maps.go fix: don't store ourselves as a contact (#3627) 2023-07-12 12:46:56 +03:00
messenger_mention.go [mention] fix relate issues to input segments (#3766) 2023-07-25 16:47:24 +08:00
messenger_mention_test.go [mention] fix relate issues to input segments (#3766) 2023-07-25 16:47:24 +08:00
messenger_messages.go feat(messages)_: enable deleting bridge messages as admin (#5330) 2024-06-14 10:51:56 -04:00
messenger_messages_order_controller_test.go feat: introduce `MessagesOrderController` 2024-02-09 16:02:17 +01:00
messenger_messages_tracking_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_mute_test.go fx: deprecate profile and timeline chats (#3809) 2023-08-03 17:16:11 +03:00
messenger_offline_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_pairing_and_syncing.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_pairing_and_syncing_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_peers.go feat_: `wakuext_relayPeersByTopic` 2024-07-11 12:32:31 +01:00
messenger_peersyncing.go feat_: hash based query for outgoing messages. (#5217) 2024-06-11 15:45:01 +08:00
messenger_peersyncing_test.go Extend peersyncing to sync 1-to-1 messages (#4962) 2024-05-14 12:20:13 +02:00
messenger_pin_message_test.go fix: prevent messenger being started twice 2024-02-27 11:00:29 +01:00
messenger_pin_messages.go bug_: fix resend type for private group messages (#5258) 2024-05-30 14:18:54 +02:00
messenger_profile_showcase.go feat_: retry sending specific messages 2024-05-02 05:40:49 +08:00
messenger_profile_showcase_proto_conversions.go Feat: Simplify profile showcase preferences (#4854) 2024-03-08 17:20:23 +01:00
messenger_profile_showcase_test.go chore(communities)_: cover ERC721 based permissions reevaluation with tests 2024-06-07 23:46:20 +02:00
messenger_raw_message_resend.go fix(communities)_: validate if RawMessage from DB is valid before sending it 2024-07-23 19:54:39 +02:00
messenger_remove_message_test.go chore(community)_: serialise community jsons with image URLs 2024-07-11 18:55:24 +07:00
messenger_reply_test.go Use base test messenger suite 2023-07-13 14:01:55 +01:00
messenger_response.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_response_test.go Fix duplicated notifications on receiving contact update 2023-02-14 09:22:37 +00:00
messenger_saved_address.go feat_: accounts/saved addresses capacity related api endpoints added (#5657) 2024-08-06 15:40:04 +01:00
messenger_send_images_album_test.go fix: prevent messenger being started twice 2024-02-27 11:00:29 +01:00
messenger_settings.go feat_: Check for mobile data connection if setting is on (#5511) (#5613) 2024-07-29 14:22:15 -03:00
messenger_settings_test.go feat: add contact customization color (#4869) 2024-04-03 22:49:57 +08:00
messenger_share_image_test.go fix: prevent messenger being started twice 2024-02-27 11:00:29 +01:00
messenger_share_urls.go chore: remove boilerplate check of `communities.GetByID` clients 2024-01-10 18:58:17 +01:00
messenger_share_urls_test.go Fix/community tags indices (#4992) 2024-03-26 20:02:12 +00:00
messenger_status_updates.go Reset MVDS epoch after peer is online (#5349) 2024-06-27 09:54:31 +08:00
messenger_status_updates_test.go fix: close messenger's databases in tests 2023-11-28 20:59:25 +01:00
messenger_store_node_request_manager.go fix_: make StoreNodeRequestManager filters ephemeral (#5582) (#5590) 2024-07-26 17:48:01 +01:00
messenger_store_node_request_manager_config.go fix: remove store node envelopes ordering hotfix (#4622) 2024-01-27 13:02:12 +00:00
messenger_storenode_comunity_test.go fix(mailservers)_: Do not add backoff if user action triggered store node disconnection (#5602) 2024-07-29 18:56:42 +01:00
messenger_storenode_request_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30
messenger_switcher_cards.go Persist switcher cards (#3049) 2023-01-05 21:41:57 +05:30
messenger_sync_activity_center_test.go New way of sharing communities (#4341) 2023-12-15 13:55:32 +02:00
messenger_sync_bookmark_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_sync_chat_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_sync_clear_history_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_sync_contact_request_decision_test.go Fix/duplicate accept cr messages (#4367) 2023-12-05 12:22:20 +08:00
messenger_sync_customization_color_test.go fix: close messenger's databases in tests 2023-11-28 20:59:25 +01:00
messenger_sync_keycard_change_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_sync_keycards_state_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_sync_profile_picture_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_sync_raw_messages.go fix(communities)_: ensure community sync doesn't override joined state 2024-06-20 15:37:20 +02:00
messenger_sync_saved_addresses_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_sync_settings.go fix (@status-go/stickers) Stickers still show in the recent list after being uninstalled (#4474) 2023-12-21 10:05:30 -08:00
messenger_sync_settings_test.go fix: clear waku envelopes cache when deleting a chat (#4621) 2024-01-30 13:43:34 +00:00
messenger_sync_verification_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_sync_wallets_test.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_test.go chore_: small mailserver async fetching refactor 2024-07-16 10:53:42 +03:00
messenger_testing_utils.go feat(pairing)_: Fallback pairing seed (#5614) (#5627) 2024-07-30 13:03:43 -03:00
messenger_unread_test.go fix(CommunityMember)_: update LastUpdateClock 2024-07-09 18:19:40 +02:00
messenger_validate_requests_test.go fix(config)_: add API calls to set new waku node and max backups 2024-06-04 22:52:18 +07:00
messenger_waku_wrapper_test.go feat: introduce `testWakuWrapper` and `testPublicWakuAPIWrapper` 2024-02-09 16:02:17 +01:00
messenger_wallet.go feat_: accounts/saved addresses capacity related api endpoints added (#5657) 2024-08-06 15:40:04 +01:00
messenger_wallet_test.go feat_: accounts/saved addresses capacity related api endpoints added (#5657) 2024-08-06 15:40:04 +01:00
messenger_walletconnect.go Implement wallet connect session CRUD API 2022-08-19 12:32:00 +01:00
messenger_walletconnect_test.go Use base test messenger suite 2023-07-13 14:01:55 +01:00
node_config_persistence_test.go fix(config)_: add API calls to set new waku node and max backups 2024-06-04 22:52:18 +07:00
persistence.go chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
persistence_collapsed_community_categories.go Feat/sync activity center notification (#3535) 2023-06-10 10:00:17 +08:00
persistence_metrics.go feat: Collecting community messages count metrics (#3802) 2023-08-01 17:08:57 +04:00
persistence_profile_showcase.go feat: Add an expiration and periodical publishing for community grants (#5024) 2024-04-17 16:53:51 +02:00
persistence_profile_showcase_test.go Feat: Simplify profile showcase preferences (#4854) 2024-03-08 17:20:23 +01:00
persistence_quoted_message_test.go chore(community)_: serialise community jsons with image URLs 2024-07-11 18:55:24 +07:00
persistence_test.go chore(identity)_: remove old social links implementation (#5214) 2024-05-24 10:35:34 +02:00
push_notification_test.go feat_: Check for mobile data connection if setting is on (#5511) (#5613) 2024-07-29 14:22:15 -03:00
status_update.go Always use protobufs by reference & generate handlers 2023-08-22 12:08:54 +01:00
switcher_card.go Persist switcher cards (#3049) 2023-01-05 21:41:57 +05:30
transaction_validator.go Move message to common namespace 2020-09-09 21:22:12 +02:00
transaction_validator_test.go Move message to common namespace 2020-09-09 21:22:12 +02:00
waku_builder_test.go refactor: only use shards (#5474) 2024-07-15 20:55:12 +05:30

README.md

status-go/protocol

This is an implementation of the secure transport and payloads which are a part of the Status Client specification.

This implementation uses SQLite and SQLCipher for persistent storage.

The payloads are encoded using protocol-buffers.

Content

  • messenger.go is the main file which exports Messenger struct. This is a public API to interact with this implementation of the Status Chat Protocol.
  • protobuf/ contains protobuf files implementing payloads described in the Payloads spec.
  • encryption/ implements the Secure Transport spec.
  • transport/ connects the Status Chat Protocol with a wire-protocol which in our case is either Whisper or Waku.
  • datasync/ is an adapter for MVDS.
  • applicationmetadata/ is an outer layer wrapping a payload with an app-specific metadata like a signature.
  • identity/ implements details related to creating a three-word name and identicon.
  • migrations/ contains implementation specific migrations for the sqlite database which is used by Messenger as a persistent data store.

History

Originally this package was a dedicated repo called status-protocol-go and was migrated into status-go. The new status-go/protocol package maintained its own dependencies until sub modules were removed and the root go.mod file managed all dependencies for the entire status-go repo.