From 0f16be81b0df5018ad72fa807342f3fd75111d3a Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 26 Jun 2025 12:09:59 -0400 Subject: [PATCH] Bump libsignal to 0.76.0 --- .../backupTests/account_data_00.binproto | Bin 238 -> 240 bytes .../backupTests/account_data_01.binproto | Bin 542 -> 542 bytes .../backupTests/account_data_02.binproto | Bin 563 -> 623 bytes .../backupTests/account_data_03.binproto | Bin 548 -> 594 bytes .../backupTests/account_data_04.binproto | Bin 499 -> 501 bytes .../backupTests/account_data_05.binproto | Bin 560 -> 622 bytes .../backupTests/account_data_06.binproto | Bin 486 -> 532 bytes .../backupTests/account_data_07.binproto | Bin 470 -> 417 bytes .../backupTests/account_data_08.binproto | Bin 414 -> 428 bytes .../backupTests/account_data_09.binproto | Bin 345 -> 347 bytes .../backupTests/account_data_10.binproto | Bin 459 -> 408 bytes .../backupTests/account_data_11.binproto | Bin 460 -> 466 bytes .../backupTests/account_data_12.binproto | Bin 321 -> 321 bytes .../backupTests/account_data_13.binproto | Bin 484 -> 437 bytes .../backupTests/account_data_14.binproto | Bin 449 -> 459 bytes .../backupTests/account_data_15.binproto | Bin 422 -> 418 bytes .../backupTests/account_data_16.binproto | Bin 401 -> 354 bytes .../backupTests/account_data_17.binproto | Bin 459 -> 471 bytes .../backupTests/account_data_18.binproto | Bin 328 -> 324 bytes .../backupTests/account_data_19.binproto | Bin 461 -> 408 bytes .../backupTests/account_data_20.binproto | Bin 395 -> 409 bytes .../backupTests/account_data_21.binproto | Bin 422 -> 424 bytes .../backupTests/account_data_22.binproto | Bin 462 -> 411 bytes .../backupTests/account_data_23.binproto | Bin 477 -> 483 bytes .../backupTests/account_data_24.binproto | Bin 312 -> 312 bytes .../backupTests/account_data_25.binproto | Bin 465 -> 418 bytes .../backupTests/account_data_26.binproto | Bin 457 -> 467 bytes .../backupTests/account_data_27.binproto | Bin 356 -> 352 bytes .../assets/backupTests/chat_00.binproto | Bin 602 -> 646 bytes .../assets/backupTests/chat_01.binproto | Bin 645 -> 700 bytes .../assets/backupTests/chat_02.binproto | Bin 650 -> 696 bytes .../assets/backupTests/chat_03.binproto | Bin 631 -> 685 bytes .../assets/backupTests/chat_04.binproto | Bin 646 -> 693 bytes .../assets/backupTests/chat_05.binproto | Bin 647 -> 701 bytes .../assets/backupTests/chat_06.binproto | Bin 528 -> 523 bytes .../assets/backupTests/chat_07.binproto | Bin 539 -> 544 bytes .../assets/backupTests/chat_08.binproto | Bin 542 -> 538 bytes .../assets/backupTests/chat_09.binproto | Bin 526 -> 529 bytes .../assets/backupTests/chat_10.binproto | Bin 541 -> 538 bytes .../assets/backupTests/chat_11.binproto | Bin 540 -> 544 bytes .../assets/backupTests/chat_12.binproto | Bin 528 -> 523 bytes .../assets/backupTests/chat_13.binproto | Bin 539 -> 544 bytes .../assets/backupTests/chat_14.binproto | Bin 542 -> 538 bytes .../assets/backupTests/chat_15.binproto | Bin 526 -> 529 bytes .../assets/backupTests/chat_16.binproto | Bin 541 -> 538 bytes .../assets/backupTests/chat_17.binproto | Bin 540 -> 544 bytes .../assets/backupTests/chat_18.binproto | Bin 528 -> 523 bytes .../assets/backupTests/chat_19.binproto | Bin 539 -> 544 bytes .../assets/backupTests/chat_20.binproto | Bin 542 -> 538 bytes .../assets/backupTests/chat_21.binproto | Bin 526 -> 529 bytes .../assets/backupTests/chat_22.binproto | Bin 541 -> 538 bytes .../assets/backupTests/chat_23.binproto | Bin 540 -> 544 bytes .../assets/backupTests/chat_24.binproto | Bin 528 -> 523 bytes .../assets/backupTests/chat_25.binproto | Bin 539 -> 544 bytes .../assets/backupTests/chat_26.binproto | Bin 542 -> 538 bytes .../chat_item_contact_message_01.binproto | Bin 742 -> 790 bytes .../chat_item_contact_message_02.binproto | Bin 1031 -> 1104 bytes .../chat_item_contact_message_03.binproto | Bin 689 -> 739 bytes .../chat_item_contact_message_04.binproto | Bin 769 -> 841 bytes .../chat_item_contact_message_05.binproto | Bin 1005 -> 1054 bytes .../chat_item_contact_message_06.binproto | Bin 720 -> 794 bytes .../chat_item_contact_message_08.binproto | Bin 732 -> 780 bytes .../chat_item_contact_message_09.binproto | Bin 1038 -> 1111 bytes .../chat_item_contact_message_10.binproto | Bin 689 -> 739 bytes .../chat_item_contact_message_11.binproto | Bin 762 -> 834 bytes .../chat_item_contact_message_12.binproto | Bin 1010 -> 1059 bytes .../chat_item_contact_message_13.binproto | Bin 722 -> 796 bytes .../chat_item_direct_story_reply_00.binproto | Bin 569 -> 569 bytes .../chat_item_direct_story_reply_01.binproto | Bin 692 -> 741 bytes .../chat_item_direct_story_reply_02.binproto | Bin 758 -> 832 bytes .../chat_item_direct_story_reply_03.binproto | Bin 696 -> 744 bytes .../chat_item_direct_story_reply_04.binproto | Bin 712 -> 783 bytes .../chat_item_direct_story_reply_05.binproto | Bin 691 -> 691 bytes .../chat_item_direct_story_reply_06.binproto | Bin 550 -> 550 bytes .../chat_item_direct_story_reply_07.binproto | Bin 571 -> 571 bytes .../chat_item_direct_story_reply_08.binproto | Bin 581 -> 581 bytes .../chat_item_direct_story_reply_09.binproto | Bin 554 -> 554 bytes .../chat_item_direct_story_reply_10.binproto | Bin 578 -> 578 bytes .../chat_item_direct_story_reply_11.binproto | Bin 597 -> 597 bytes .../chat_item_direct_story_reply_12.binproto | Bin 669 -> 719 bytes .../chat_item_direct_story_reply_13.binproto | Bin 748 -> 822 bytes .../chat_item_direct_story_reply_14.binproto | Bin 727 -> 775 bytes ..._direct_story_reply_with_edits_00.binproto | Bin 669 -> 665 bytes ..._direct_story_reply_with_edits_01.binproto | Bin 1019 -> 966 bytes ..._direct_story_reply_with_edits_02.binproto | Bin 836 -> 886 bytes ..._direct_story_reply_with_edits_03.binproto | Bin 1014 -> 956 bytes ..._direct_story_reply_with_edits_04.binproto | Bin 818 -> 864 bytes ..._direct_story_reply_with_edits_05.binproto | Bin 979 -> 864 bytes ..._direct_story_reply_with_edits_06.binproto | Bin 646 -> 640 bytes ..._direct_story_reply_with_edits_07.binproto | Bin 881 -> 766 bytes ..._direct_story_reply_with_edits_08.binproto | Bin 684 -> 680 bytes ..._direct_story_reply_with_edits_09.binproto | Bin 866 -> 751 bytes ..._direct_story_reply_with_edits_10.binproto | Bin 672 -> 668 bytes ...tem_standard_message_long_text_00.binproto | Bin 664 -> 729 bytes ...tem_standard_message_long_text_01.binproto | Bin 692 -> 738 bytes ...tem_standard_message_long_text_02.binproto | Bin 744 -> 810 bytes ...tem_standard_message_long_text_03.binproto | Bin 656 -> 706 bytes ...tem_standard_message_long_text_04.binproto | Bin 684 -> 748 bytes ...tem_standard_message_long_text_05.binproto | Bin 741 -> 787 bytes ...tem_standard_message_long_text_06.binproto | Bin 671 -> 738 bytes ...tem_standard_message_long_text_07.binproto | Bin 679 -> 728 bytes ...tem_standard_message_long_text_08.binproto | Bin 734 -> 798 bytes ...tem_standard_message_long_text_09.binproto | Bin 666 -> 713 bytes ...tem_standard_message_long_text_10.binproto | Bin 696 -> 762 bytes ...tem_standard_message_long_text_11.binproto | Bin 727 -> 776 bytes ...tem_standard_message_long_text_12.binproto | Bin 661 -> 726 bytes ...tem_standard_message_long_text_13.binproto | Bin 691 -> 737 bytes ...tem_standard_message_long_text_14.binproto | Bin 746 -> 812 bytes ...chat_item_standard_message_sms_01.binproto | Bin 639 -> 688 bytes ...chat_item_standard_message_sms_02.binproto | Bin 969 -> 1169 bytes ...chat_item_standard_message_sms_04.binproto | Bin 638 -> 687 bytes ...chat_item_standard_message_sms_05.binproto | Bin 969 -> 1169 bytes ...chat_item_standard_message_sms_07.binproto | Bin 638 -> 687 bytes ...chat_item_standard_message_sms_08.binproto | Bin 969 -> 1169 bytes ...chat_item_standard_message_sms_10.binproto | Bin 640 -> 689 bytes ...chat_item_standard_message_sms_11.binproto | Bin 967 -> 1167 bytes ...chat_item_standard_message_sms_13.binproto | Bin 638 -> 687 bytes ...chat_item_standard_message_sms_14.binproto | Bin 971 -> 1171 bytes ...rd_message_special_attachments_00.binproto | Bin 629 -> 701 bytes ...rd_message_special_attachments_01.binproto | Bin 655 -> 586 bytes ...rd_message_special_attachments_02.binproto | Bin 656 -> 727 bytes ...rd_message_special_attachments_03.binproto | Bin 628 -> 700 bytes ...rd_message_special_attachments_04.binproto | Bin 652 -> 583 bytes ...rd_message_special_attachments_05.binproto | Bin 658 -> 729 bytes ...rd_message_special_attachments_06.binproto | Bin 626 -> 698 bytes ...rd_message_special_attachments_07.binproto | Bin 654 -> 585 bytes ...rd_message_special_attachments_08.binproto | Bin 656 -> 727 bytes ...rd_message_special_attachments_09.binproto | Bin 626 -> 698 bytes ...rd_message_special_attachments_10.binproto | Bin 654 -> 585 bytes ...rd_message_special_attachments_11.binproto | Bin 656 -> 727 bytes ...rd_message_special_attachments_12.binproto | Bin 626 -> 698 bytes ...rd_message_special_attachments_13.binproto | Bin 654 -> 585 bytes ...rd_message_special_attachments_14.binproto | Bin 658 -> 729 bytes ...d_message_standard_attachments_00.binproto | Bin 624 -> 677 bytes ...d_message_standard_attachments_01.binproto | Bin 1043 -> 1230 bytes ...d_message_standard_attachments_02.binproto | Bin 1281 -> 1571 bytes ...d_message_standard_attachments_03.binproto | Bin 752 -> 821 bytes ...d_message_standard_attachments_04.binproto | Bin 932 -> 1104 bytes ...d_message_standard_attachments_05.binproto | Bin 1343 -> 1652 bytes ...d_message_standard_attachments_06.binproto | Bin 648 -> 699 bytes ...d_message_standard_attachments_07.binproto | Bin 1083 -> 1270 bytes ...d_message_standard_attachments_08.binproto | Bin 1256 -> 1546 bytes ...d_message_standard_attachments_09.binproto | Bin 709 -> 778 bytes ...d_message_standard_attachments_10.binproto | Bin 959 -> 1131 bytes ...d_message_standard_attachments_11.binproto | Bin 1382 -> 1691 bytes ...d_message_standard_attachments_12.binproto | Bin 621 -> 674 bytes ...d_message_standard_attachments_13.binproto | Bin 1042 -> 1229 bytes ...d_message_standard_attachments_14.binproto | Bin 1283 -> 1573 bytes ...dard_message_with_link_preview_01.binproto | Bin 866 -> 894 bytes ...dard_message_with_link_preview_02.binproto | Bin 763 -> 752 bytes ...dard_message_with_link_preview_03.binproto | Bin 862 -> 843 bytes ...dard_message_with_link_preview_04.binproto | Bin 759 -> 759 bytes ...dard_message_with_link_preview_05.binproto | Bin 859 -> 887 bytes ...dard_message_with_link_preview_06.binproto | Bin 723 -> 713 bytes ...dard_message_with_link_preview_07.binproto | Bin 703 -> 703 bytes ...dard_message_with_link_preview_08.binproto | Bin 827 -> 855 bytes ...dard_message_with_link_preview_09.binproto | Bin 729 -> 718 bytes ...dard_message_with_link_preview_10.binproto | Bin 932 -> 913 bytes ...dard_message_with_link_preview_11.binproto | Bin 723 -> 723 bytes ...dard_message_with_link_preview_12.binproto | Bin 823 -> 851 bytes ...dard_message_with_link_preview_13.binproto | Bin 795 -> 785 bytes ...dard_message_with_link_preview_14.binproto | Bin 666 -> 666 bytes ...em_standard_message_with_quote_00.binproto | Bin 622 -> 661 bytes ...em_standard_message_with_quote_01.binproto | Bin 966 -> 1033 bytes ...em_standard_message_with_quote_02.binproto | Bin 1317 -> 1481 bytes ...em_standard_message_with_quote_03.binproto | Bin 813 -> 993 bytes ...em_standard_message_with_quote_04.binproto | Bin 769 -> 697 bytes ...em_standard_message_with_quote_05.binproto | Bin 1031 -> 1114 bytes ...em_standard_message_with_quote_06.binproto | Bin 626 -> 665 bytes ...em_standard_message_with_quote_07.binproto | Bin 952 -> 989 bytes ...em_standard_message_with_quote_08.binproto | Bin 981 -> 1049 bytes ...em_standard_message_with_quote_09.binproto | Bin 892 -> 1043 bytes ...em_standard_message_with_quote_10.binproto | Bin 945 -> 999 bytes ...em_standard_message_with_quote_11.binproto | Bin 974 -> 1028 bytes ...em_standard_message_with_quote_12.binproto | Bin 929 -> 968 bytes ...em_standard_message_with_quote_13.binproto | Bin 671 -> 600 bytes ...em_standard_message_with_quote_14.binproto | Bin 716 -> 661 bytes .../chat_item_sticker_message_00.binproto | Bin 687 -> 735 bytes .../chat_item_sticker_message_01.binproto | Bin 725 -> 797 bytes .../chat_item_sticker_message_02.binproto | Bin 734 -> 783 bytes .../chat_item_sticker_message_03.binproto | Bin 696 -> 766 bytes .../chat_item_sticker_message_04.binproto | Bin 710 -> 758 bytes .../chat_item_sticker_message_05.binproto | Bin 736 -> 808 bytes .../chat_item_sticker_message_06.binproto | Bin 703 -> 752 bytes .../chat_item_sticker_message_07.binproto | Bin 711 -> 781 bytes .../chat_item_sticker_message_08.binproto | Bin 719 -> 767 bytes .../chat_item_sticker_message_09.binproto | Bin 710 -> 782 bytes .../chat_item_sticker_message_10.binproto | Bin 724 -> 773 bytes .../chat_item_sticker_message_11.binproto | Bin 721 -> 791 bytes .../chat_item_sticker_message_12.binproto | Bin 684 -> 732 bytes .../chat_item_sticker_message_13.binproto | Bin 728 -> 800 bytes .../chat_item_sticker_message_14.binproto | Bin 743 -> 792 bytes .../chat_item_view_once_00.binproto | Bin 547 -> 574 bytes .../chat_item_view_once_01.binproto | Bin 627 -> 705 bytes .../chat_item_view_once_02.binproto | Bin 699 -> 811 bytes .../chat_item_view_once_03.binproto | Bin 665 -> 738 bytes .../chat_item_view_once_04.binproto | Bin 706 -> 811 bytes .../chat_item_view_once_05.binproto | Bin 651 -> 738 bytes .../chat_item_view_once_06.binproto | Bin 706 -> 804 bytes .../chat_item_view_once_07.binproto | Bin 546 -> 579 bytes .../chat_item_view_once_08.binproto | Bin 617 -> 709 bytes .../chat_item_view_once_09.binproto | Bin 706 -> 798 bytes .../chat_item_view_once_10.binproto | Bin 665 -> 749 bytes .../chat_item_view_once_11.binproto | Bin 699 -> 807 bytes .../chat_item_view_once_12.binproto | Bin 656 -> 737 bytes .../database/KyberPreKeyTableTest.kt | 4 +-- .../database/OneTimePreKeyTableTest.kt | 4 +-- .../MessageProcessingPerformanceTest.kt | 7 +++--- .../securesms/testing/FakeClientHelpers.kt | 11 ++++----- .../securesms/testing/MockProvider.kt | 4 +-- .../processor/AccountDataArchiveProcessor.kt | 20 +++++++++++++++ .../v2/processor/ChatArchiveProcessor.kt | 7 +----- .../crypto/AsymmetricMasterCipher.java | 23 +++++++----------- .../securesms/crypto/IdentityKeyUtil.java | 3 +-- .../securesms/crypto/MasterCipher.java | 3 +-- .../securesms/crypto/MasterSecretUtil.java | 5 ++-- .../securesms/crypto/PreKeyUtil.java | 14 +++-------- .../securesms/crypto/PublicKey.java | 5 +--- .../crypto/SealedSenderAccessUtil.java | 3 +-- .../securesms/database/OneTimePreKeyTable.kt | 7 +++--- .../securesms/database/SignedPreKeyTable.kt | 11 +++++---- .../securesms/keyvalue/AccountValues.kt | 6 ++--- .../linkdevice/LinkDeviceRepository.kt | 4 +-- .../secondary/DeviceNameCipher.kt | 10 ++++---- .../data/QuickRegistrationRepository.kt | 5 ++-- .../securesms/service/webrtc/WebRtcUtil.java | 3 +-- app/src/main/protowire/Backup.proto | 2 ++ gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 20 +++++++-------- .../signalservice/api/archive/ArchiveApi.kt | 2 +- .../signalservice/api/crypto/Crypto.kt | 2 +- .../signalservice/api/keys/KeysApi.kt | 9 +++++++ .../crypto/PrimaryProvisioningCipher.java | 10 ++++---- .../crypto/SecondaryProvisioningCipher.kt | 6 ++--- .../internal/push/PreKeyEntity.java | 3 +-- .../DeviceContactsInputStreamTest.java | 7 ------ .../crypto/SecondaryProvisioningCipherTest.kt | 4 +-- .../java/org/signal/util/SignalClient.kt | 16 ++++++------ 238 files changed, 122 insertions(+), 120 deletions(-) diff --git a/app/src/androidTest/assets/backupTests/account_data_00.binproto b/app/src/androidTest/assets/backupTests/account_data_00.binproto index 12e22c994ea3811f9d97a169339001344d7bfdc2..a038ac704a16b8dc471a32a32767500a67aea0df 100644 GIT binary patch delta 110 zcmaFI_OUcUwsi*0hdB`Mf?xmOBeg27EC%=5?82wGA(!^!^ER2mdf2*!K3^3g_j!# zqXMG=qs7<0{r}hl7!w!^7&;gkXECyKFp6$2=lTy~F^NXaGX%1vIGClxID~~bj3OTW lzp_mCzZ3@p7&O>Nu^1W|n{WuRaWHBzad5KD@FhS diff --git a/app/src/androidTest/assets/backupTests/account_data_01.binproto b/app/src/androidTest/assets/backupTests/account_data_01.binproto index ebf6db591c8558b9974e1f9600c88672132d0a40..43d74c0a31831de23c51d40a94c9e21deb136625 100644 GIT binary patch delta 390 zcmV;10eSwO1fB$tRez$%Q&d$hFvyx$L=KB>@lLkv#sETIa#YDe7kx~3Cu|Z5X>xXH zZZ0%7H8vVH3Lp$R<}ONFpu6^as*q;dQ_A)XPRRhW-sOP@g-R)-vhflS)W{e~hK30j z)m0h&Tgig@7y%*&O=)9jWo%_C2SRdbWM^e_G974ibZ~PzFMls{X=iR>Y%XtdXD?!P zWL9}Zd1rV{IwuMs)U5bc%VgV=7HlQ#s}4vpKD|6=W`A45(8CJL`u^E z2mu%YFabElhX2X}NC8j*U;$_WZ~=G$hyenU0e?6F5_uvDX>DO=WiM)QWoK$>3P3Ev zw2V-${!_D;P8Hc6Yfh;o`MRj*d(1CWe+vTd=wL9DU;!Xu7?-cbF;XB_X?Eooc2tnO z=$vynDl{ux3}1VfQh9~970pkHa`Y$~02%H6|qUR|C#{@2m%$!=z#y40UHPd k8W#xK0TKwzn@;}&?%)3!2mk;80001hKd1r70h8$gHR3y%Jpcdz delta 412 zcmV;N0b~B21fB$tReyVUU-%8u(T`f7lEHLdaVyDYQ=tHn#i*qo-lz;M?dTE-c4>5P zE;KSUHX1exAT%oAHQl~{nE3QvZbBR zG%28uHF%jA0U`!dbY*sFWhw?uZ)|C9VKN_RbaZfYIxjDCX@6&KVQemMa%V42XK+|Z zbXsU+OnGNIDGDGt3nNZojW%(FCnf*4wKkjsPcI=Nju?;kWO_?=K3y9U165N*7y(M3 z0T2Ng0Vn}DyQZVw2S@=}0cZhm0eAs`0Re~s0+Inv5=tTpX>DO=WiM)QWoK$S3J@&9 zw2V-${!_D;P7T=}Yfh;c^ZS^;0a757XaOL98UPvqngIt00Tn5zR{xp-2M7Wcr+U!; zngJUK0~!|yivbb{>hoFu7`P|@8VCRY00000fIm_(3Lqh;g%MGMk^9B6ZMH_}+zL}1 zlfwJhq8|q(G}ZTKx~>upV|sT+WO_(UPj72YT3QA%GBY$aHV6_12mvYr2nz-h1PB6? G{{bIX%8~y7 diff --git a/app/src/androidTest/assets/backupTests/account_data_02.binproto b/app/src/androidTest/assets/backupTests/account_data_02.binproto index 0abda25245c8d26c77138078e2f14400bc47c99b..d3fa20497a50128dab015f974e1da7ed00f60201 100644 GIT binary patch delta 467 zcmV;^0WAKr1n&fpPJi+P3hx67Afm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!VA?VRCA3a%p8QFgF@D3LvPLKaeQ?gdLtQ@yl47{QXxB3J|s+(OR9oTq?JUJ9ZKf zX=<<$OmAs(Dg{@0VRUpdA!u}TaAdRaI#^DGDIkPKM^D?zxK~eTDF}6X0=lJnlV9?BpKFE~TDl@xt#C z14UI*7y(M}0T2No0Vn}DpY_VO2Ur1c0Du7jhyekT0i6L7m;sY80V;oM3P3y8E>Tbi z@me7UOE*k>e;MyexeMS9Lw6mEv-txa=gD>&Cytje|0;VsnP*B08${nHg^BXN>k2Mnd~WFr#&9ZM$(^#8u1T9C2rP)DGHz(03ZRH z0S5>H6`xlS|C#{@2m)IbMQN)4ngJRJ0~!_x3K9qs0=Ob z=n@EJW@c$+E-*M6HVPnV^L0f^m6x6G4C&Gc4Y>4O1Y{lBbRU5f4*qaFXD6r<5Sm4e zpxIyE0aV#D!VMY(&KLqB2ts9YZeem{Zz=~d30SEyg0WbkL_x{_|2T%cE0dN3_0RfT$Za4uFXp=PoDt|i)5HGJ{400)H0BFRp zoK|UeTbi@me7UOE*k>e;FD8AOV^I z2M7Tbj}G|%ngIt00u@OJXaAZ38wdj$7YNk?5(sOc<^MK@TK^gd00000004kLpaB6= zED9hV#&-v;LnQLiXO=jJsvQPAjkR_&`c#ASA9!LcuS*ru5(sT-cX3ooPEeCM0yd`@ Bl;Z#Z diff --git a/app/src/androidTest/assets/backupTests/account_data_03.binproto b/app/src/androidTest/assets/backupTests/account_data_03.binproto index 31d7af97dcf0e09f245f754592e4cd58eec5a9c7..38786a838f4b2e994f87983024b60759154e9e83 100644 GIT binary patch delta 419 zcmV;U0bKs11kwbMPJh({3ep1#Afm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!VA*a%p8`VJ5leGW)C0KctJ|%j&M@O}4<$pIW8<+Cf>KL@d;qnAH0#YC}YG3($F@lo4Zgc;T zBF6e}uDcakV?AlrU77ayarlE803ZUI0S5>H6~H!z|C#{@2uK1I4?4I1ngJUK0~!|y z@c|MD9ZC!TP=1U58VCRY00000fIm_s3Lq$s0=Ob z=n@NUX=in1Y%Vc4H#HhI3Lr##rVgogAPYi?z17y}{)LSb@ZVRB(A2SZ_Ua&K&GI!-AHAYP(){iey*OLd;| zr(Ht~#Vk@5h;0{A~9gDO110Lteb{Z#+829MG!2vh|QXt#WOGqPa zb$=%X^n~5{oJb==#zBY3PB)?@-rl}8cK;dxAOe~J2M7Tbvv&&rngIt00u@@GG5?wY z8VCa#76=m(2r^jW|J0@}{~8DY000000DwPIBnluHHC647K+;1U7cqV TC*0h&bn{6fHaAn$lL`Vz;_Qt- diff --git a/app/src/androidTest/assets/backupTests/account_data_04.binproto b/app/src/androidTest/assets/backupTests/account_data_04.binproto index 9049824f432363089834f4dcec0a7dfcf51a2d60..5dafa8c76891b645df771c584f84bcda957d16b9 100644 GIT binary patch delta 353 zcmV-n0iOQz1N8%tPJj3U3iSdCAfm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!V7-a&~EME;KeZHX1exAQZT&xwWOg(;L4IhIGn}?3F~AdpHdsivG>S#c&$e>=F1Tr0HbaZfYIxjDCX=iR>Y%XtdXDcsab!1j~M0sa;O-k(n z5CI?oC;>RdhX2X}SOIVVfB^xB0RfT$odFV<0g?DBe`^Xr(`Z?_(6-WA%uQN?S%)cd z{DnNGSfL;%3?jPOlug8ukgcn_igLcYO}RPXG%DaV7?-cb zF*pNKAg~8G;U({LaC{0HRHuqlYMJXNmv6GAozFBWppP|pnHm5f1DXK`2muwbNwxo) z0S5>ICl$%)fd85S8wdj$7YNz`5(vzjPX7b$-~Sp200000004kLr~$|Ulg0rp0Z5E1 delta 351 zcmV-l0igc%1M>rrPJi|S3iARAAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@HbX>@NcG%_?c8a4_b)B5!u80QDie6&PiS^H%gl{F>ZU8$;hFY-Sz${@5hRGI84U#C4D%0|+kh8pn? z81ws>zX3P{QXqo3ejqjwZtM-F2fyf61mxpq4|nVJ=OGlIS)Hp-oQfI%AOo5K2M7Tb zDX3QengIt00u`rv(EpkN8wdj$7YK_15(w(^S^pTgC;u7<00000004kLpaB6=ED9h* xw8+t%B}dDEctj_kw4~`L#q(=GbY8_+^^D3DUH6zC7~Y)RqW zY%XtdXD@kLLsW7`VOnuQZdFxjIwuMs)U5bc%VgV=7HlQ#s}4vpKD|6 z=W`A45(8CJL`w1j2mu%YFabE9^~$#gNC8j*U;$_WZ~=G$hyenU0iFRk0TP!1A_{43 zVP|D8YH(#|T9ZKm9)D>HKxy-JMM{;Io$n0k(g+Q>^j!pG9olpsffNq@a6D%xsMX-} zw3##rVgogAPYi?z133nE68UP>!ngIt00TrKD5dWG12M7WcMN(<1|C#|B2m=}x2nrGi zB~Y;c=dOqU8VCRY00000fIp}K$pKO<3LsEhEeu9RGelgm`KF3wNJr*iv-|3fpZ|BJ Xk@xTZE%g|Rw8f3H^X8Olll=iRC^WyF delta 406 zcmV;H0crm31h52s0=Ob z=n@EJW@c$+E-*M6HVPncCu2&vi!1H^x=Bd?Uf{Ebcw*UX8 z8EtFf#;5I4i6SjX2p9z-22*rpc4=iQ22F2lX>MUM9B6cOaA$KmFE4XxXKrC^E^l&Y zFLY;eSVl}xQ)@aY3LrTPBTitAHgSX}CI7dzHk<=bFCik17?1a4dP{XaT^kYuRZ~P5 z0ZP095CIqgC;>S4{@c_CNC8*@XaR5mcmaR`0f+$tk^yTHXOlkxD}Ol(5VZgMC0Kct zJ|%j&M@O}44^=kRrzVZ?3x)Sz|qE8UP>! zngIt00Tqu9`2UM7WcNeE~EngJUK0~!|y)dCU-YoO)-HilaN8VCRY00000fIm_! z3Lwna8QDzbiG}S$7$1};qlQJREmt`xp-S5>kdSei6;JIL#pC6x!ua``eUm!^Gi&Ud A!~g&Q diff --git a/app/src/androidTest/assets/backupTests/account_data_06.binproto b/app/src/androidTest/assets/backupTests/account_data_06.binproto index 7bb18720c05e408607482b0aa29ffffedc612398..ca877a768338080881bf5ee1ee7568f5c5c3edc9 100644 GIT binary patch delta 366 zcmV-!0g?XZ1C#`iPJfpJ3X}s1Afm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!VA*a%p8`VJbbYx;=e@=776g%MGMk^9B6ZMH_}+zL}1lfn`Z z2PHJs_h-7U#M6u1d#7SI7zQE)OmAs(Dg{@0VRUplDGDIkPDO_1rtZ0mAbo}Kv=iWQ zbUf}oOYGzx$u6ayXYs=C5(7n5QWybB>H!b|AOR==IEAa)rvz95Z~%Y-0f+$sk^!Cp z5}5&$6#*)LYzjaa=LgSxv_xT9`(+xHH6`6$sj7J|@;@=kAV@y$ zV>2S5{~VVx*hOw|Cu2&vi!1H^x=BbFw8Y`^1ULXvAjaVcS^IF?pAw3&8EtFf#;5I4 zi6SjX2)(M@`Rb&Qj~W0V1)2c|2muwqHirM20S5>f0u>KBxBr>}8wdj$7YOkI5(phi M3;$4li<71SK$?)1pa1{> delta 343 zcmV-d0jU0z1m**fPJihF3g!X|AbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@NUX=in1Y%Vc4H#HhI3LxsFkdMbR!bA)@<}ONFpu6^as*q;dQ_A)XPRRhW-sKVy zDWkISm9X|Z)W{e~hK30j7zQE;LS=GpVRB?|DhE?^VQy??c}O}Z3Luhs=*R`whPj7% z%!IZ(I|xXwlIGwIQQjxxgLHU9mt+zHMO9KtxB&;03?jPOlug8ukgcn_igLcY8UP>#ngIt00Tr`%3jdk`2M7WcTAnfgngJRJ0~!_x p6A}nASmOWGrY-*(2mk;80001hKUxMcGBY$aHV6_12mzDq0VqiWhT;GK diff --git a/app/src/androidTest/assets/backupTests/account_data_07.binproto b/app/src/androidTest/assets/backupTests/account_data_07.binproto index fd91e243f70dbeb12c02314bd0e9d41ed5c32e8f..7a33ed670576ff22ea44b56350d020b4f8c60614 100644 GIT binary patch delta 298 zcmcb{ypVZAlMIk4h#A|)Z)pLZn zGKKqJSdwZan^96yP+x4NuV0**o|l-TmtT~w zpH!L>R_RiiUg2w{&ZXeA-}R-;rLC7*G<%qNtHNvj+@#l9x>c-xara+&==rwELd@K`g8>X0>{l?JV4S>w(F_2F>u7cW delta 351 zcmV-l0igb&1J(nOPJh_~3f2M&AbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@HbX>@NcG%_?c8a4_bTgig@K4jPKsFy#GDE@>Uo-gssSeyL)R}Kmgwjj}35)ikF zJ9e5>p*d-4uo`vtkc$`xA_qcYa$;d}VJZhhVRCYBY-}AlMIk4h#A|)Z)pLZn za}$fQ@{2N4^$g6V%(xU}1ivh`K2a@TW>i;kZ9o5Sxnt$*Yn?w`OrK`azDkzOMo8dS zNb_g;iX@%&-lCU;o?bVQ;4o6mC@Co@w$j%x&P>ls%+bp)s!!LijB*Ysa!ZUVbjk}2 z&GZTtU{qk#V6>S3_0)Fu2*v`221dpXM#f2uEF4S40RR^@W%mF8 delta 279 zcmV+y0qFj$1D*qrPJf{S3Z4QAAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@EJW@c$+E-*M6HVPm`jB3k$wq@mK{mUB0g{ZFE(wwv|m`!Ca*9n%FO7*7_5G9cB z(TpUX+r;_`S%b;x0~iQ09B6cOaC15@FLP;UZeeULZ*pfZbbn`ZSVl}xQ)^072mv4g zFabFC{@c_CPyt{8Z~%w_0g?d*H~|O(AP1TO2M7Tbj}G|%ngIt00u@OJXaAZ38wdj$ z7YNk?5(sOc<^MK@TK^gd00000004kLpaB6=ED9hV#&-v;L-NsQmNAlMIk4h#A|)Z)pL~C zeKV6YQgc$Z*qw?pQ_@q5t<<>`uB`bHb~@!{!k?=>OB;4@bUbT(tbC09>eTt!$#0$) z^L`Lw4h?qk3gcjuU^HN~XkC44Ig1Bl0Am7U24ewZ1!D&zQ~V@GHVZ}$W(AH}jO-kY zq6f^{{)1RdqWo6dfh=hbW+`!wkBmYbvR>T(1M0f}OK~uOL4$pe3YUV$La*C;6DAbS h6!m{QecsA`$r~OAt1IGv@LsyuAGKi8!O2>T`T#I#RJi~E delta 232 zcmcc3bdza0n7*q4vqN;DrnmkFHoMcW(uc?%Nki zY{4a|Wtpj3Y`*z9nR$s;np_H&+{%6ly=H|i>Z<>@Z#A34?60q=)F;vZJ*CRK)Gk(9 zh&eRaMS{^QM1WC(QG?OqYv2BV>>i8}j2Vmtj1`OxjEo(Ou}qT~SvZ&#IA$@jb1;f- zF6a6WVljzE%`*hDq&S$R#5jb7IE*45{lBtI_rDYe0~j>e2dQu=NSKDc?Q^)~ENfV& e`_6Lr4@M8ZdFprWY%BTfsbppzd}Xo@qdovROigwG diff --git a/app/src/androidTest/assets/backupTests/account_data_10.binproto b/app/src/androidTest/assets/backupTests/account_data_10.binproto index 05df879b4a3b3e79ad548f5cbed18d9aea39e662..012e916fa5d07b808ab1946227895733496d23a2 100644 GIT binary patch delta 292 zcmV+<0o(q|1DFGlPJf#M3YY>4Afm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!V7-a&~EME;KeZHX1exAPhR@E=pRUyY_pkkY?Ib%JvLS$pEt6<$(u_@Op qngJUK0~!|y+8F^72+W&K{{!yd{~8DY000000DwQJ0muQ9m;p0J$!viD delta 343 zcmV-d0jU0%1Iq)DPJhk<3d;ftAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@HbX>@NcG%_?c8a4_bG%DaV-M)Y1W&N{7*)(6=TCvY^um?EdCGT@^dc&Y-M>eAAe|cbZ~PzFE4XxXKrC^ zE^l&YFHUE0SV(kQXk<)zXF4YeAd-3L$OYJjxrceogtj|72uQAy=HLxc-Y4UOba+FT zWD)~KRZ>b*2mv4gFabEbrlZ~mPyt{8Z~%w_0g?d*H~|O*APJfQ2M7TbDX3QengIt0 z0u`rv(EpkN8%ziT8W#wQ0TKx6^I88GxF`P_2mk;80001hKcE2tQY;D}M6}4!oJY%m pctj_kw4~`L#q(=GbY8_+^^D3DUH6zC7~Y)RqW&M{jIoX=N$|P+@dsG9hSmbboMjIxjDCX=iR>Y%Xtd zXD@kLLsW7`VOnuQZdFxjIwuMsLcc}n9MZMYgei;z4SH97PDUH8IYxM^=-vKzRnLZ# z5(7sr-1t1EV0S5>H6`xlS z|C#{@2m%#FX;G^GngJRJ0~!_x3K9qs0=Ob z=n@EJW@c$+E-*M6HVPnV^L0f^m6x6G4C&Gc4Y>4O1Y{lBbRU5f4*qaFXD6r<5Sm4e zpxIyE0aV#D!VMY(&KLqB2SQkdSei6;JIL#pC6x!ua``eUqI5HR4@>O#lD@ diff --git a/app/src/androidTest/assets/backupTests/account_data_12.binproto b/app/src/androidTest/assets/backupTests/account_data_12.binproto index 0591b596b7f22ed290a48b30d7588b8ccd2303d0..eef7602f9017a93ea08457e560cd3e346da01304 100644 GIT binary patch delta 182 zcmV;n07?JB0>J{1Rez$%Q&d$hFvyx$L=KB>@lLkv#sETIa#YDe7kx~3Cu|Z6W^!p| zWMM8dHa0REHVPnT{mUB0g{ZFE(wwv|m`!Ca*9n%FO7*9tS!D_(knhnF5XAZlS%b;x z1N_*OGWegd>KFq`PY?kh0Vn}Dg{#`91XuxZ0Du7jhyekT0W1Uv1|SQX0S5>H6~H!z k|C#{@2m%!kI=BCt0UHPd8W#xh0TKuuN(=u`ev6U;K}w-Q$^ZZW delta 182 zcmV;n07?JB0>J{1ReyVUU-%8u(T`f7lEHLdaVyDYQ=tHn#i*qo-lz;M?dTE_Jd;kCd diff --git a/app/src/androidTest/assets/backupTests/account_data_13.binproto b/app/src/androidTest/assets/backupTests/account_data_13.binproto index 88689ac5c82ab7dd2d1e812dcff377ea880ef5b3..5d416ba16119afd4c781815e80ef1947e0628095 100644 GIT binary patch delta 302 zcmV+}0nz^C1GNK?PJg%p3bg_XAfm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!V7-a&~EME;KeZHX1exAQZT&xwWOg(;L4IhIGn}?3F~AdpHdsivG>S#c&$e>=F1R@7bX=7+*Y-K73LUL(jXJvCT9e-$abZ~PzFE4XxXKrC^ zE^l&YFJg6MR(V8uXLwCICki0ctoT;TWa(i1)r_TpxCn^mf#V~_2i29IYh&!^a}Dqk z165N*N?Hg37y&Q=IK_tl$^u9MPyt{8XaR5mcmaq30+Im+H~|O;APkxT2M7Tbu}QW6 zngIt00u{;VfFu8!0UHPd8W#xK0TKwzn@;}&?%)3!2mk;80001hKd1r70h68qMqqz% AQ2+n{ delta 349 zcmV-j0iyo31LOmcPJibD3giL`AbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@HbX>@NcG%_?c8a4_b)B5!u80QDie6&PiS^H%gl{F>ZU8$;hFY-Sz${Y%Xtd zXD?1?a9BumT4-cUd1pE)3LrTPBTitAHgSX}CI7dzHk<=bFCik17?1a4dP{XaT^kYu zRZ~P50ZLU60T=-&0XVy+quvKd0ayWO0dN6$0e}GkhyenU0R#vKAPkxT2M7TbDX3Qe zngIt00u`rv&{F@J0UHPd8W#wQ0TKx6^I88GxF`P_2mk;80001hKTZfn diff --git a/app/src/androidTest/assets/backupTests/account_data_14.binproto b/app/src/androidTest/assets/backupTests/account_data_14.binproto index 31c6f8b855c2c62f4bd296851bcfb2a2135002c3..0b69245b73a5ef1dfb12c03bc74430af6068e0e8 100644 GIT binary patch delta 349 zcmV-j0iyoF1Iq)DPJhk<3d;ftAfm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!VA?VRCA3a%p8QFgF@D3Lx=~z7UY(QhI6h_BIQClbc4hlwmx3FZ$1BN`P5jDyI?< zrf41z6Aw$rOOe=V4^0u!7zH8(OmAs(Dg{@0VRUpdA!u}TaDQ_;FE4XxXKrC^E^l&Y zFL_!+RB}dPT5&>dRaI#^DGDIkPKM^D?zxK~eTDF}6X0=lJnlV9?BpKFE~TDl@xt#C z14UI*7y(LE5CI?oC;>R1^~$#gSOIVVfB^xB0RfT$1PBNq4VnQ52muwJR}lZ20S5>I z6-8;P|C#|B2vP$Y76=Lw2qjRk|L3lU{~8DY000000DwQB0RgB1$pKO@3Lu$`xJrm>v*8A8ry1NO^TkM`T8KdSz}&lav81#?gOm delta 339 zcmV-Z0j&PZ1Hl83PJhG#3c&&jAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@EJW@c$+E-*M6HVPncCu2&vi!1H^x=Bd?Uf{Ebcw*UX8 z8EtFf#;5I4i6SjX2p9z-2ts9YZeem{Zz=~b*2mv4gFabFC{@c_CPyt{8Z~%w_0g?d*H~|O#YEtwZwBXO=jJ lsvQPAjkR_&`c#ASA9!LcuS*ru5(sT-cX3ooPEeDc0WH3oe#`&> diff --git a/app/src/androidTest/assets/backupTests/account_data_15.binproto b/app/src/androidTest/assets/backupTests/account_data_15.binproto index 5c9a002e9aa6ea6bb43d31b0bdd2026c6ac877cf..cbfb0b0c2af659d8d28170540d73d34e1c63f8a0 100644 GIT binary patch delta 300 zcmV+{0n`4b1EK?vPJg8W3ZeoEAfm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!VA*a%p8`VJbbYx;=e@=776g%MGMk^9B6ZMH_}+zL}1lfn`Z z2PHJs_h-7U#M6u1d#7SI7zQE+M{jIoX=N$|P+@dsIwuMsLVv$S=^WCv(u66D0}Xmt zeNILjtvN<`tLWYScU8}ZlM(|*LQqOp2mu%YFabD)tJkdSei6;JJ#o~e%+*hs;9cwhJp($SAvppwCpaRD_Eux;r8 delta 304 zcmV-00nh%T1EvFzPJgKa3Z?=IAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@NUX=in1Y%Vc4H#HhI3LxsFkdMbR!bA)@<}ONFpu6^as*q;dQ_A)XPRRhW-sKVy zDWkISm9X|Z)W{e~hK30j7zQE-LSb@ZVRB(A2SZ_Ua&K&GI)5n&AYP(){iey*OLd;| zr(Ht~#VkmU57y&2&IQ5Rd{s%|_SOI7OZ~=G$ zfB^xB0RoZ%1PBQr4w?Z62muwdcMAWS0S5>I6g~ CeQ=Ke diff --git a/app/src/androidTest/assets/backupTests/account_data_16.binproto b/app/src/androidTest/assets/backupTests/account_data_16.binproto index cfa08b99471d0de79a6dcb514e94cbb5c8e310e0..f0226447360e907a38c50ca95eb3f8655db29239 100644 GIT binary patch delta 235 zcmbQp{D^6SU;R@?u1Abq3X4t#hlJ`GoR}5v!q=Vq(Qn(EV+>AlMIk4h#A|)Z)pLZn zGKlG}( zsKBVfXmPad|0$*j#sY>0M#c_C#z~AU99#p{^rT|vUQRM&t delta 283 zcmV+$0p$MT0+9odPJfgF3XuW|AbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@HbX>@NcG%_?c8a4_bTgig@K4jPKsFy#GDE@>Uo-gssSeyL)R}Kmgwjj}35)ikF zJ9e5>p*d-4uo`vtkc$`xG9PGkbZ~PzFE4XxXKrC^E^l&YFMm#Fa9BumT4-cUd1p#f z2mv4gFabEbrlZ~mPyt{8Z~%w_0g?d*H~|O>AP<@W2M7TbDX3QengIt00u`rv(EpkN z8wdj$7YK_15(w(^S^pTgC;u7<00000004kLpaB6=ED9h*w8+t%N6UbCL?@rLr0FNc h^J_qKUd34Tj1bBdUH6zC7~Y)RqW zY%XtdXD@kLLsW7`VOnuQZdFxjIwuMs)U5bc%VgV=7HlQ#s}4vpKD|6 z=W`A45(8CJL`qo*0T=-=0XU!a%C`qd0Z;*80cZhm0eAt30RoZ%1~>r-3m_1h0S5>H z6`xlS|C#{@2vq_VMQN)4ngJRJ0~!_x3K9qs)wD262f delta 340 zcmV-a0jvJk1Iq)DPJhk<3d;ftAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@EJW@c$+E-*M6HVPm`jB3k$wq@mK{mUB0g{ZFE(wwv|m`!Ca*9n%FO7*7_5G9cB z(TpUX+r;_`S%b;x0~iP*22*rpc4=iQ22F2lX>MUM9B6cOaDQ_;FE4XxXKrC^E^l&Y zFLY;eSVl}xQ)@aY3LrTPBTitAHgSX}CI7dzHk<=bFCik17?1a4dP{XaT^kYuRZ~P5 z0ZLU60T=-&0XX;m+tde00ayWO0dN6$0e}GkhyenU0R#vOAP|}X2M7Tbj}G|%ngIt0 z0u@OJXaAZ38%YQQ8W#xF0ul&opymHIhFbp`2mk;80001hKT<3TAk5bp*-Yh$h3!Ka mlqaKxMXN1WIVhn@+b)ohahVlQ?HI-5<*UN@`I>!`p#e5Cbbx38 diff --git a/app/src/androidTest/assets/backupTests/account_data_18.binproto b/app/src/androidTest/assets/backupTests/account_data_18.binproto index e175c08f4140df3a25941a276e2af48fc312f358..613c074437e9d779f893f16b0ea9832719dd9392 100644 GIT binary patch delta 176 zcmV;h08jtO0>lE4PJhP%3d8{lAfm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY$60qZ)tNX1y^}tbaXl?3Lx4}hUTX3xr-ouh48c!;Bj<3?mbKFI e6%RVM|C#|C2m=}y2=M_D2pvib|4@F5k@rzg_&#m` delta 180 zcmV;l089VG0>}c8PJhb*3djKpAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=pqP0WpZv|a%68R2UB!mZfs?FIwuMsl6mOJ1=xnUhk49|wmUlrNUoCR;0;mUC*y;3 zcte+D5(7n5Qc6z<0U!Y|0XX%Jzy1eM0bl`e0Ehtrk^u%d0V)U#AQ74Y2M7Tbvv&&r ingIt00u@@GG5?wY8VCa#76=m(2r^jW|J0@}k@HcNwn9q) diff --git a/app/src/androidTest/assets/backupTests/account_data_19.binproto b/app/src/androidTest/assets/backupTests/account_data_19.binproto index e3fdef2dc3d0bfce33b7cfd5ba4d91c092c13d8c..db77f9640cc74fb454e773ab030a4dad46e6ed48 100644 GIT binary patch delta 298 zcmX@hJcD_HU;S(*t{F^R3X4t#hlJ`GoR}5v!q=Vq(Qn(EV+>AlMIk4h#A|)Z)pLZn zGKAuu7N8^a@`qbuI;`{jM)%E^WQkqS?dDTNPgG=O(?@(ye0ki@X2IL(jKO7GidH z3h;{JV3c4qV6-^e_Wu-<2V($Z0%Hba0b>PY2P4xYMm7sZ4qgSJS&Zx)jG`MoxBdsQ um_$#$XaKUL3e5rvAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@HbX>@NcG%_?c8a4_bG%DaV-M)Y1W&N{7*)(6=TCvY^um?EdCGT@^dN!H( zxrs$t`9+zjdIsiFW?Tv@rrS@@_}3ykPygfTh}nPshVyX=Y*V-xHFs}}*7h#zG9iJ? ztPN77-zIe1y7X;!?a4YV!DOVEQBqP+Y^ASXoSB}Nn4_0pRG+S28RZ;O4 zn&}lPz^K5e!Duo6>#6PR5sU>44UCK(jEs{QSvdFeFJNR`!FZA}$bd^>j{E6`3K#YHTb8_3Kl(Y_ pp(O5Tgw)rbQ=+loXUGXS%I693cvP19xTm<4SEc58PL5zS1^^jGXFdP` delta 279 zcmbQq+|4|}ufC6otDA{Sp}Hde2k)he{ZR`h9W03})IOOOypUny(G^SO?yca_efvU) zBQ-58GgZ&PLduLwA@g&otJl=&bKmp4yu`t~<4Y_{itMct`9=}Ge+4$_>MMi)d5JlC`9AEuSisQ1$T*3S&4Q7GPeFJVBRdD9Xg}YN{~#8Vs3%7{kR{E*EG5oy zl}U&rd%@HHW^Gabr8pSCpuv6tBV&*bmxA1}a`v^(pDw0PvuIx>%VyKNwaoZeNb_g; biX@%&-aMk0ggA1u$_qoh`~oJYF&YB^oIPR> diff --git a/app/src/androidTest/assets/backupTests/account_data_21.binproto b/app/src/androidTest/assets/backupTests/account_data_21.binproto index c52a09b5381f5d0f19f0192b37e825a3e93e22ec..d2d32bf3b04e06344c36e3a9d591e2a7ed01b743 100644 GIT binary patch delta 304 zcmV-00nh%X1E>R#PJgQc3aA1KAfm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!VA*a%p8`VJngIt00TsYDhX0xY2M7Wc4?4I1ngJUK0~!|y@c|MD9ZC!TP=1U5 z8VCRY00000fF(atBnluXp-S5>kdSei6;JJ#o~e%+*hs;9cwhJp($SAvppwCpZvi(O Cg>+v4 delta 302 zcmV+}0nz@b1EvFzPJgKa3Z?=IAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@NUX=in1Y%Vc4H#HhI3Lr##rVgogAPYi?z17y}{(Q*>o^X=N$~O>b;zZecnp3V$Fu3nNZojW%(FCnf*4 zwKkjsPcI=Nju?;kWO_?=K3y9U165N*7y(LD5CIqgC;>S2j=%l~NC8*@XaR5mcmaR` z0f+$tk^uw=4H6|;8=|C#{@2m%#ao-zNL0U8Jc8Wso>5(qL_;{Vj9E&mz_ z00000004kLQX?b^AQ&}O?T$dwLme@GE$%tH_yI@`o+sSgwsiAJA~rWu)RS=mHysLT A@Bjb+ diff --git a/app/src/androidTest/assets/backupTests/account_data_22.binproto b/app/src/androidTest/assets/backupTests/account_data_22.binproto index 34b4f9ad4bb1072e40b144ffbcf1d73bf1a5db91..b358a6aea10f65a26a85d8b663ce04058a5c64b6 100644 GIT binary patch delta 292 zcmV+<0o(r01DgYoPJf;P3Y!87Afm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!V7-a&~EME;KeZHX1exAQZT&xwWOg(;L4IhIGn}?3F~AdpHdsivG>S#c&$e>=F1R?}XZ)tNX1y^}tbaXNuXmoUNbALK7FLP;UZeeULZ*pfZ zVs&Izc|>_@Op qngJUK0~!|y+8F^72+W&K{{!yd{~8DY000000DwQJ0muQ9m;p9lDQtNF delta 343 zcmV-d0jU0)1I`1GPJht?3eExwAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@HbX>@NcG%_?c8a4_b)B5!u80QDie6&PiS^H%gl{F>ZU8$;hFY-Sz${c&Y-M>eAAe|cbZ~PzFE4XxXKrC^ zE^l&YFHUE0SV(kQXk<)zXF4YeAd-3L$OYJjxrceogtj|72uQAy=HLxc-Y4UOba+FT zWD)~KRZ>b*2mv4gFabEbrlZ~mPyt{8Z~%w_0g?d*H~|O{AQhSc2M7TbDX3QengIt0 z0u`rv(EpkN8%ziT8W#wQ0TKx6^I88GxF`P_2mk;80001hKcE2tQY;D}M6}4!oJY%m pctj_kw4~`L#q(=GbY8_+^^D3DUH6zC7~Y)RqWY%Xtd zXD@kLLsW7`VOnuQZdFxjIwuMsLcc}n9MZMYgei;z4SH97PDUH8IYxM^=-vKzRnLZ# z5(7sr-5g-H6`xlS z|C#{@2m%#FX;G^GngJRJ0~!_x3K9qs0=Ob z=n@EJW@c$+E-*M6HVPncCu2&vi!1H^x=Bd?Uf{Ebcw*UX8 z8EtFf#;5I4i6SjX2p9z-2SQkdSei6;JIL#pC6x!ua``eUqI5MoC+Pu>b%7 diff --git a/app/src/androidTest/assets/backupTests/account_data_24.binproto b/app/src/androidTest/assets/backupTests/account_data_24.binproto index a8d380e976414e7b80ff92b33806e6a6bb259cab..f81f0b0f59eb74374a7056ef74ecd01d38ec54ac 100644 GIT binary patch delta 182 zcmV;n07?J20=NQ@Rez$%Q&d$hFvyx$L=KB>@lLkv#sETIa#YDe7kx~3Cu|Z6W^!p| zWMM8dHa0REHVPoR9InWS&ujXKH6~H!z k|C#{@2m%!kI=BCt0UHPd8W#xh0TKuuN(=u`ev6U;IQx-7$p8QV delta 182 zcmV;n07?J20=NQ@ReyVUU-%8u(T`f7lEHLdaVyDYQ=tHn#i*qo-lz;M?dTEq>zutGr~j+I_54)TA;i3d#aFT+EdE*3{J@avfkwq5GkXw@s+Ul zJJiS+Nrr|A7Z?UgPY3}Z0WbkL^^U*(2T%cE0dN3_0RfT$1}r!M2ofj(ngIt00Tr`% k3jdk`2M7WcTAnfgngJRJ0~!_x6A}nASmOWGrY({IIF}nl+5i9m diff --git a/app/src/androidTest/assets/backupTests/account_data_25.binproto b/app/src/androidTest/assets/backupTests/account_data_25.binproto index a3aee1d81f226d28486377778ad5d15c7bbbdf04..b5ca4fb2696614a3f021621a7f9eed44521f6ca9 100644 GIT binary patch delta 302 zcmV+}0nz@^1EK?vPJg8W3ZeoEAfm}rR8=l8$eLF~4vTH^PPXjE0771JRLMdYeN1;J zY!V7-a&~EME;KeZHX1exAh0HkU8ra1v{ZFNS=2LnJjC#aSMn=onU)X{M3{7+KN1j3 zw_{GJt26e4D6vup61A-u2Os0=Ob z=n@HbX>@NcG%_?c8a4_bTgig@K4jPKsFy#GDE@>Uo-gssSeyL)R}Kmgwjj}35)ikF zJ9e5>p*d-4uo`vtkc$`xA_h}*Wp-(0Dh5q&Y-w&`G9PGkbboMjIxjDCX=iR>Y%Xtd zXD?1?a9BumT4-cUd1pE)3LrTPBTitAHgSX}CI7dzHk<=bFCik17?1a4dP{XaT^kYu zRZ~P50ZLU60T=-&0XVy+quvKd0ayWO0dN6$0e}GkhyenU0R#vWC<2-R2M7TbDX3Qe zngIt00u`rv&{F@J0UHPd8W#wQ0TKx6^I88GxF`P_2mk;80001hKTdRaI#^DGDIkPKM^D?zxK~eTDF}6X0=lJnlV9?BpKFE~TDl@xt#C z14UI*7y(LE5CI?oC;>R1^~$#gSOIVVfB^xB0RfT$1PBx;1DXK`2muwJR}lZ20S5>I z6-8;P|C#|B2vP$Y76=Lw2qjRk|L3lU{~8DY000000DwQB0RgB1$pKO@3Lu$`xJrm>v*8A8ry1NO^TkM`T8KdSz}&lav89#58}Y delta 339 zcmV-Z0j&Ph1IYuBPJhe-3dsTrAbWUU_zlw0k6NIT!E|16E6HY4p#YJ^sHGm>s0=Ob z=n@EJW@c$+E-*M6HVPm`jB3k$wq@mK{mUB0g{ZFE(wwv|m`!Ca*9n%FO7*7_5G9cB z(TpUX+r;_`S%b;x0~iP*2ts9YZeem{Zz=~b*2mv4gFabFC{@c_CPyt{8Z~%w_0g?d*H~|P0C#YEtwZwBXO=jJ lsvQPAjkR_&`c#ASA9!LcuS*ru5(sT-cX3ooPEeDc0W~XBfmZ+k diff --git a/app/src/androidTest/assets/backupTests/account_data_27.binproto b/app/src/androidTest/assets/backupTests/account_data_27.binproto index a2318802b13b240d014cdf468ddaa01b2f091747..4c98ebc8d3fd219be18e145ab159e2f54ac92998 100644 GIT binary patch delta 230 zcmaFD^nhuCU;Sf7t_O@<3X4t#hlJ`GoR}5v!q=Vq(Qn(EV+>AlMIk4h#A|)Z)pL~C z-1Bo%GE=o!0uoD7t<<>`oc6oEl)1F^Qj2B}GjCORt)H9pT1&Tz)i3V;D-S*2Hd%<- z-6_B;jDt~v(SXsSb@i>~EFO#jj0ubxj0KDpj2(^{OvZOhfrNlWtG753XdU5{`sO$bO#lZju4fa7QTnZWsy>9DGm{2%V)c@`D dc`N%RZ+IN6u89A^d+B0-)PhL|C+jd;004oDPkI0V delta 234 zcmaFB^n_`GU;T4Nt|yFK3e^?yKX@-)?2lS7>0n7*q4vqN;DrnmkFHoMcW(uc?%Nki z>`sYANr^>?TI|k=MMe2JIaZon3UP}n{w_Ot&AW8or{%HEJV$i`9*D}M8vOlstwfK{ zEbo~Rv%6D(1fy4o0HXw>2BXE-zWx8$Js2YxGZ+gPD;OIX8RI(`nI`>7)3n#e`T5Oe<=?X%4DFe0MQLn?EnA( diff --git a/app/src/androidTest/assets/backupTests/chat_00.binproto b/app/src/androidTest/assets/backupTests/chat_00.binproto index b5cc1a3ba49ec308d62faf83a1f65eec52fe8c2c..3319fa11d277a718118c9ee531a56cd24c2a63b0 100644 GIT binary patch delta 124 zcmV-?0E7S91cn8$_W?hR0UC+{2m=rVN`E*35_uvDX>DO=WiM)QWoK$>3P3Evw2V-$ z{!_D;PT3x7PN^jMx~S)S%r8@a3j*)xU@(&~0w6FLm#@V!QXp1ocI6j#RFJ&roO3uT eG%H*TUwfBQd4;zX%}zX4JplQse%3K{?!08sX@|Fj4HtQ*Jx diff --git a/app/src/androidTest/assets/backupTests/chat_01.binproto b/app/src/androidTest/assets/backupTests/chat_01.binproto index 0467e351230fa60244fe3482a7d05fc2c3346de8..548b599d1950cf1b73895704f309aea59dd06789 100644 GIT binary patch delta 168 zcmV;Z09XHo1-u2Y_W>ot0UE#o2m=rV7y%#wDDa}|y7vJv_=fL?%QiRxKmkgf0TP%2 zlNJIhc54biJJ&8zPzUi^AqGn~OniSC?@GA~;0{A~9gDO110Lteb{Z#+moWb-drq?+ zbJo&_fcD|Z+tEu%BW-nmCk6C`7`ds^0XP6sAig$s|H(>I&QzJ~DPN~O9?C}2pN1Oo W4?`tx)`Tevpc()m0Z{+gsmcLEokWQM delta 113 zcmV-%0FM8>1%(B$_W>V_0UC(`2m=rV7y%#wDCqpLw95l9;^n!!{4q*w5@?eg0xCs2 z3J@=^VhnOAX#i-%u$)$DcI6nU|CR_i08${AQh9~970pkHa`Y&k5wb2j*Dg^|2k}}V T21_?ge191l03ZQS!-nZ+Bp4~! diff --git a/app/src/androidTest/assets/backupTests/chat_02.binproto b/app/src/androidTest/assets/backupTests/chat_02.binproto index 25246afb3da6c7e34b076ccde4412481d9344696..a10347bcc1c571082cb7f8f9adb92f4ce0073cc5 100644 GIT binary patch delta 163 zcmV;U09^ly1-J#U_W>Wj0UEpk2m=rVDA48kpZFFq`pf?KvNuYh0XP8?ngNp-0xNfH z3P7GIK52ruejqjwZtM-F2fyf61mxpq4|nVJ=OGlIS)Hp-oQet$VUx7~`z2U;l|ChU zxkpE}YUO`7E*qEf*y4^=kRrzVZ?3x)Sz|qE)m@qP R_;L7y8UP>yQ2n3dst0@KNc10UC}02m=rVD8RO}jL`}(qmI$~oHIB9Kmkf{H~|uBlNJIi zM?4A;;0{A~9gDO110Lteb{Z#+829MG!2vh|QXt#WOGqPab$=%X^n~5{oJb==#zBY3 XPB)?@-rl}8cK;dxAOcXf?#i(P@76A| diff --git a/app/src/androidTest/assets/backupTests/chat_03.binproto b/app/src/androidTest/assets/backupTests/chat_03.binproto index ad32f43e940d55b3ad5673a0e00ef2c984d49ce7..9482ca4010cb731303e2fdfd3e94b345722392b0 100644 GIT binary patch delta 153 zcmV;K0A~O91g!8Q0UEIZ2m=rV7y%#wH~~NbN}T}`m;sXp0xETD3P96nS-H@* z(pt<-T7p@JDRTUUJf>KoASdK0LE_=`T9&*_awn|^5QYpQy4jRX#F3D#tGbGEzPnAi zIp8!Z;58VRuf;Jq15zNc2RPv+?{jc`3K~?Wic@Nt>nE3QvZbBRG%28uHF%jC03ZWU H!pYMQj`cpj delta 99 zcmV-p0G$7=1@{E7_W=)o8hr=@5Cj+jAOT8k5^0kT0xCy53J_G8>?vQTJs!$N(w~MJ z@edgD`-Fa$6rWk0t52MY8UP>zQ1-C@ FvWg0UEgh2m=rVDDa}|y7vJv_=fL?%Qi}$0XP8?mjRO)0xNWB z3P5S|bwx^*m!0nn>Cy-dxb$5FWF6XcAAuAO{%|~JC#con^R${pjiA|I-T_qEGr|oT z1kTwcne|7dlrEPO3(Xk0snP*bAky8aDo_5SBK<0-D+&XMW9zU#?SzK(8EbB3YzcQ3 OZyEp~1W^CjsmcLEY(;bc delta 113 zcmV-%0FM8)1%?H%_W>b|0UC+{2m=rVDCqpLw95l9;^n!!{4qEIKmkf^H~|u8lNJIi zLpcf%wEz1hSb3E`C3?9>N409@7^(l32vQ(;+09f#OUiOIYG3($F@lo4Zgc;TBF6e} TuDcakV?Aja03ZZV!-nZ+@boV* diff --git a/app/src/androidTest/assets/backupTests/chat_05.binproto b/app/src/androidTest/assets/backupTests/chat_05.binproto index 13db26d4ea8b5197b9d14b8e56ac5cf016107b9e..8a63b5823560c13bf91540865964cf6827f549b6 100644 GIT binary patch delta 169 zcmV;a09OBp1-%8Z_W>ou0UE&p2m=rV7y%#wDA48kpZFFq`pf?KvNt#ZKmkgg0TP)3 zlNJIhcWeqk80QDie6&PiS^H%gl{F>ZU8$;hFY-Sz${7_`LU@&q^lQXt0R2wD4Z+n*AOuo-P@;l`)!Qi&oh XNC>^E-1+LHkdGPwAO%qUpW~_rL$pgs delta 115 zcmV-(0F3{=1&0N&_W>V{0UC<|2m=rV7y%#wD8RO}jL`}(qmI$~oHI&o5^0kh0xCy5 z3J~~l_=B39;@Hz@S-H@*(pnhz=)u7OH~>;03?jPOlug8u Vkgcn_igLcY8UP>#P`2*Mu>*=}GM4}V diff --git a/app/src/androidTest/assets/backupTests/chat_06.binproto b/app/src/androidTest/assets/backupTests/chat_06.binproto index a818a196e5a8cf502913714f450e7a85b8983cb0..6ebe13f675361e3d17e441095250aff648d09f57 100644 GIT binary patch delta 28 jcmbQh(#^8rJEMrOlpqJQ0E-u!1tSNe0$aeLlb87cUMU8$ delta 33 pcmeBXnZUB)JENq8lo$uI0E-2q1EUw41tSNe0$aeh4ga^W0|0%z2rd8s diff --git a/app/src/androidTest/assets/backupTests/chat_07.binproto b/app/src/androidTest/assets/backupTests/chat_07.binproto index 0cc4d39eeff10ed858eb295469e8feb4cd56b672..2d180be2a0a826c24f228c006b0fdf0a76456e80 100644 GIT binary patch delta 49 zcmV-10M7rL1fT@4_W>y=8YTz>5Cj+jAOR@wqU*Z%0WkQ6?}y7aH~~NbN(2Z3AO}$Y H*s00^i|!ES delta 44 zcmV+{0Mq}V1e*k~_W>j$8X*V+5Cj+jAOR@o{IRsl12E#{xx4%^N(2Z3AO}#xhUsTS CLl6c4 diff --git a/app/src/androidTest/assets/backupTests/chat_08.binproto b/app/src/androidTest/assets/backupTests/chat_08.binproto index d854b90550dda26d58888d5d877a5afe0d9c6d51..9a37c056c43c32df6be64249458377cf8d085a52 100644 GIT binary patch delta 43 zcmV+`0M!4U1eye}_W>g!8XyP*5CkaD<@ulZ7BKqD{`j&tN(MLq2m>GpQ2n3dst0FM B5gGsh delta 47 zcmV+~0MP%M1fB%2_W>s+8YBn<5CkZ|wzG`U3NWLN(fXV-H~~NbN(MLq2m>GpP`2*M Fu>*P*5AFZ} diff --git a/app/src/androidTest/assets/backupTests/chat_09.binproto b/app/src/androidTest/assets/backupTests/chat_09.binproto index fe3a7c34e1bc0a2665ed5999e9cc1b07bab1c2f0..e103068976db842ff117fe425e1019097d96a66d 100644 GIT binary patch delta 34 pcmeBUnaHx?JEN4OlsE^o0E+~p0;2_^1EUuU2a5t{z@d|u`2l;82S)$^ delta 31 ncmbQp(#NvlJEORmln4j20E+~p0;3lT2a5t{z_$(mx3B{MZ#M_G diff --git a/app/src/androidTest/assets/backupTests/chat_10.binproto b/app/src/androidTest/assets/backupTests/chat_10.binproto index 165d34376cd59b50896f6f21b9b91fdda008ec81..640c0118eafd02caee3afbdca535e7d4b60920d4 100644 GIT binary patch delta 43 zcmV+`0M!4T1eye}_W>g!8XyP*5CkajqU*Z%0WkQ6?}y7aN(MLq2n8StQ2*Ge$^lnH B5M2NO delta 46 zcmV+}0MY-N1f2x1_W>p)8Y2h;5Ckab{IRsl12E#{xx4%^H~~NbN(MLq2n8StP{W4l EXN4sYi2wiq diff --git a/app/src/androidTest/assets/backupTests/chat_11.binproto b/app/src/androidTest/assets/backupTests/chat_11.binproto index e95a931df216002f2388666a47fccec988aa6f52..2cd8fb95e6fcbea5b0ca0a710a203295b477fe96 100644 GIT binary patch delta 49 zcmV-10M7rM1fT@4_W>y=8YTz>5Cj+jAOR@Q<@ulZ7BKqD{`j&tH~~NbN(2Z7APZ3a HpW~_ro*5CZ delta 45 zcmV+|0Mh@U1e^r0_W>m&8X^b-5Cj+jAOR@AwzG`U3NWLN(fXV-N(2Z7APZ2o?#i(P DKj9B| diff --git a/app/src/androidTest/assets/backupTests/chat_12.binproto b/app/src/androidTest/assets/backupTests/chat_12.binproto index f885eb5c3f41308ed86a72970fbdbf48610e5d9f..f3625535941e9b946b9d4c8622e65acfb0df9174 100644 GIT binary patch delta 28 jcmbQh(#^8rJEMrOlpqJQ0E-u!1tSN$0#Cr9lb87cUVR3> delta 33 pcmeBXnZUB)JENq8lo$uI0E-2q1EUw41tSN$0#CrV4ga^W0|0&;2s!`& diff --git a/app/src/androidTest/assets/backupTests/chat_13.binproto b/app/src/androidTest/assets/backupTests/chat_13.binproto index 3c8fc80abafb9ce7851aa2c28854ef6f4d8ed722..0b60b359f446aa16de338458c059be96e539768e 100644 GIT binary patch delta 49 zcmV-10M7rL1fT@4_W>y=8YTz>5Cj+jAOR@wqU*Z%0WkQ6?}y7aH~~NbN(2Z9APrFe H*s00^j7|{p delta 44 zcmV+{0Mq}V1e*k~_W>j$8X*V+5Cj+jAOR@o{IRsl12E#{xx4%^N(2Z9APrE%hUsTS Cmk<&F diff --git a/app/src/androidTest/assets/backupTests/chat_14.binproto b/app/src/androidTest/assets/backupTests/chat_14.binproto index feb44958e4f1c5c042f8e2cdee892c0b22a3e8da..9c324e585891684549e9404de210f6965e3b982f 100644 GIT binary patch delta 43 zcmV+`0M!4U1eye}_W>g!8XyP*5CkaD<@ulZ7BKqD{`j&tN(MLq2niq#Q2n3dst0GX B5heft delta 47 zcmV+~0MP%M1fB%2_W>s+8YBn<5CkZ|wzG`U3NWLN(fXV-H~~NbN(MLq2niq#P`2*M Fu>*Q`5BdNA diff --git a/app/src/androidTest/assets/backupTests/chat_15.binproto b/app/src/androidTest/assets/backupTests/chat_15.binproto index 78cb5217493d8b453557dabc1acc7d998424ba0a..d40d790fd57efb972f560b13ecc850ea22e66410 100644 GIT binary patch delta 34 pcmeBUnaHx?JEN4OlsE^o0E+~p0;2_^1EUuU2bThWz@d|u`2l<72U7q5 delta 31 ncmbQp(#NvlJEORmln4j20E+~p0;3lT2bThWz_$(mx3B{MZg!8XyP*5CkajqU*Z%0WkQ6?}y7aN(MLq2n!$(Q2*Ge$^loS B5NQAa delta 46 zcmV+}0MY-N1f2x1_W>p)8Y2h;5Ckab{IRsl12E#{xx4%^H~~NbN(MLq2n!$(P{W4l EXN7qXl>h($ diff --git a/app/src/androidTest/assets/backupTests/chat_17.binproto b/app/src/androidTest/assets/backupTests/chat_17.binproto index 668a4dc027609b52ef76fa6186aaa32677a4bc15..8b525a2dbeca449778cbba7b577f86cae25e0474 100644 GIT binary patch delta 49 zcmV-10M7rM1fT@4_W>y=8YTz>5Cj+jAOR@Q<@ulZ7BKqD{`j&tH~~NbN(2ZDAQ4dg HpW~_ro_P_w delta 45 zcmV+|0Mh@U1e^r0_W>m&8X^b-5Cj+jAOR@AwzG`U3NWLN(fXV-N(2ZDAQ4cu?#i(P DKtT_K diff --git a/app/src/androidTest/assets/backupTests/chat_18.binproto b/app/src/androidTest/assets/backupTests/chat_18.binproto index bedaf696bafceb4891078e4d100ba577cbbb36e7..b57666d52ffce3c403a23207558c8ace24273a5e 100644 GIT binary patch delta 28 jcmbQh(#^8rJEMrOlpqJQ0E-u!1tSNqf>6Mrlb87cUeN~1 delta 33 pcmeBXnZUB)JENq8lo$uI0E-2q1EUw41tSNqf>6M>4ga^W0|0(}2u1(^ diff --git a/app/src/androidTest/assets/backupTests/chat_19.binproto b/app/src/androidTest/assets/backupTests/chat_19.binproto index 86b532747efd8bf91016905a94734e7e7dbe3c31..1524f1ccc70a363026aa0a9d9125c834199d7fb0 100644 GIT binary patch delta 49 zcmV-10M7rL1fT@4_W>y=8YTz>5Cj+jAOR@wqU*Z%0WkQ6?}y7aH~~NbN(2ZFAQMpk H*s00^jII#= delta 44 zcmV+{0Mq}V1e*k~_W>j$8X*V+5Cj+jAOR@o{IRsl12E#{xx4%^N(2ZFAQMo-hUsTS C>ku9Q diff --git a/app/src/androidTest/assets/backupTests/chat_20.binproto b/app/src/androidTest/assets/backupTests/chat_20.binproto index f6676c2937f5f4e26b18123199c8d268486ab01a..bec2d45a026ca04563e011d1cc5014a9f3e9cc81 100644 GIT binary patch delta 43 zcmV+`0M!4U1eye}_W>g!8XyP*5CkaD<@ulZ7BKqD{`j&tN(MLq2oE3>Q2n3dst0Hi B5i$S( delta 47 zcmV+~0MP%M1fB%2_W>s+8YBn<5CkZ|wzG`U3NWLN(fXV-H~~NbN(MLq2oE3>P`2*M Fu>*S65C#AM diff --git a/app/src/androidTest/assets/backupTests/chat_21.binproto b/app/src/androidTest/assets/backupTests/chat_21.binproto index 4ea0f9d7b55059e0741b6b104773d3700f338b9d..023c04654cd6821c81c0705f087baff64b66f029 100644 GIT binary patch delta 34 pcmeBUnaHx?JEN4OlsE^o0E+~p0;2_^1EUuUhk$};z@d|u`2l=62VVdH delta 31 ncmbQp(#NvlJEORmln4j20E+~p0;3lThk$};z_$(mx3B{MZ}$h! diff --git a/app/src/androidTest/assets/backupTests/chat_22.binproto b/app/src/androidTest/assets/backupTests/chat_22.binproto index 63797f65f66a75d592933dd8692217644c53eb90..1fe1fc2447e5418f74e0067753ec8869cd2c8f40 100644 GIT binary patch delta 43 zcmV+`0M!4T1eye}_W>g!8XyP*5CkajqU*Z%0WkQ6?}y7aN(MLq2oWF_Q2*Ge$^lpd B5On|m delta 46 zcmV+}0MY-N1f2x1_W>p)8Y2h;5Ckab{IRsl12E#{xx4%^H~~NbN(MLq2oWF_P{W4l EXNAoWp#T5? diff --git a/app/src/androidTest/assets/backupTests/chat_23.binproto b/app/src/androidTest/assets/backupTests/chat_23.binproto index befe449f73931869d85754c051b3f71c43f79084..834028b6a31b30004180df7c3b945a16f64ba36c 100644 GIT binary patch delta 49 zcmV-10M7rM1fT@4_W>y=8YTz>5Cj+jAOR@Q<@ulZ7BKqD{`j&tH~~NbN(2ZJC;?FY HpW~_ro_`U! delta 45 zcmV+|0Mh@U1e^r0_W>m&8X^b-5Cj+jAOR@AwzG`U3NWLN(fXV-N(2ZJC;?Em?#i(P DKt~UO diff --git a/app/src/androidTest/assets/backupTests/chat_24.binproto b/app/src/androidTest/assets/backupTests/chat_24.binproto index a73835b84bb5d1de6a4ebc4f8c834c00c2f94a87..e43cd2b12728b178b7455efce6c0f985854b5d04 100644 GIT binary patch delta 28 jcmbQh(#^8rJEMrOlpqJQ0E-u!1tW*B22;SHlb87cUfBl7 delta 33 pcmeBXnZUB)JENq8lo$uI0E-2q1EUw41tW*B22;Sd4ga^W0|0)42t)t? diff --git a/app/src/androidTest/assets/backupTests/chat_25.binproto b/app/src/androidTest/assets/backupTests/chat_25.binproto index 06a3854c052b4e212f6f704c251aed5a496ea1d6..2ac1c25d1f24f75462b901a501b30748aa10c982 100644 GIT binary patch delta 49 zcmV-10M7rL1fT@4_W>y=8YTz>5Cj+jAOR@wqU*Z%0WkQ6?}y7aH~~NbN(2ZLC<9Rc H*s00^jIj$8X*V+5Cj+jAOR@o{IRsl12E#{xx4%^N(2ZLC<9Q#hUsTS C^AH>W diff --git a/app/src/androidTest/assets/backupTests/chat_26.binproto b/app/src/androidTest/assets/backupTests/chat_26.binproto index 595468e1c98e928ae73b38765bd913c3698e07fd..f647224ee82832ff3ca917fed7be62d8474aec88 100644 GIT binary patch delta 43 zcmV+`0M!4U1eye}_W>g!8XyP*5CkaD<@ulZ7BKqD{`j&tN(MLq2o)LtQ2n3dst0F` B5gq^l delta 47 zcmV+~0MP%M1fB%2_W>s+8YBn<5CkZ|wzG`U3NWLN(fXV-H~~NbN(MLq2o)LtP`2*M Fu>*Qg5Apy2 diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto index 0b93708d00740d42ed4a508ab347ba1662a26cbf..492308ad2b89987f8388f285436b5288ee30f618 100644 GIT binary patch delta 187 zcmV;s07U=h1(pV&0w1Dw3o%{1yUe8|1=wgfKab= p6aL3wcFEsm&!{k=8eF(7hb>|+e78Cp06GdnVhBrhZ*)R-b4wC7P@w<- delta 138 zcmV;50CoSC2Id8z0w?4FBH;lD0uTfkmBhHG|1m-k2(Qtc?ej1YqQIGqk}((oV!;6l zzLO^cXje)i3TbU&XJs#HaAjv|Itmc{a{K3QwHm;UhaR_YE`B%|_nF?M0#YD(5$Ab= sMDareq+3-AneGkq|1!ibB8>3tlH(XGkF4Yx06GdnVoP;zbV7D>OAysLSpWb4 diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto index 5958964467bf3ae2781c55e5a6bec723432fcee5..6a28a4d2e7fe6be765bd35715d48d5ac24c6966d 100644 GIT binary patch delta 226 zcmV<803H8_2+#zBFIz%fb&3IqrQ8USLo1PZbQvmOFs0Up5t zA_-}2VP|D8aBgQh33Fvmb8=c!c}YO56iB2Clbiz|e}VxDKZu7NGljb$eDHIupKg1}3N{TW4P1 cP`PyO6pX#>NpuE2mk;8 delta 152 zcmV;J0B8Tu2!{xu0v?3~B7y`60uTWh>zBFIz%fb&3IqrQ8USMK0}AN_vmOFs0UUWE z32AL%XJs#NZf80PVQy|`d3sKGdO+L~NI#RF10PI03J{$emDqr)JtDE>Jy-bAiai+o z$ocL9A_qi7W>`jPPbdN~-pIh%@G)8tsFGGpzV*&v0)OEFBHjTA0uTWhmBhHG|1nAr3JnMZ5aW!%#;7nN0tf+OzX1xo z0SXHm1Wjpkb0PytNl7xS0U`=%ZDD6+FKTdQXF3aGd0ALzM0!C;N<%=W0!XM5S{zJA zM=EA4Eom-nEpI7;Auv?pPT|^;_`WlrP&MqWI!eUfP(iJv)+*eI08~2 l`%r-fW@1pI(3M=}I@d5)<;p}8f(4;95XqZzQim}28USw+S=j&p delta 158 zcmV;P0Ac^*1+fL70#mO6BCG)j0uTWhmBhHG|1nAr3JnMZ5aW!%#;7nN0tf+OjR6XZ z0SXHm1Wjpkb0PytNl7w$A_{43VP|D8YH(#|Itfu{VnS#_Ze&G3vj|Ae6O&c~A3r<_ z5E6ARFHWpFEgrE(wo8yQd>HEZ=Yj$_0#YCcuGdO$V-#mx;*%TPLTF_Uw4_fngq9yt M=W?n~)@h>}07+0aK>z>% diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto index e0ce2f6a4de1d47d77d354d6eeb5a5d2d1a9e4d1..5d9a80d749921d49f89095fad5b6125e4d76ee97 100644 GIT binary patch delta 219 zcmV<103`o`2FV7X0wu=+BE$j+0uTWh>zBFIz%fb<3JVAX5RAdl-=sAn0Ai;C3Zw#) zB?4d)wgDmuX>DO=WiN1UXF%@*NSKqB0w8~a0SZ8&^e}|-Ha^*uaR=gPQzBFIz%fb<3JVAX5RAdl-=sAn0Ak+(3fuvc zB?4d(Zz2h4ZDD6+FK}*WK%5gu?vs}SAWJ+75GGvh{$aqJES2{`s9$pSVn12C;%|t$iUd}FOCduy AhyVZp diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto index ccf43166f6207b74b00d160b91dd6d67fadfd97e..1c214eafc75673423c9224670f11fa4b9e343410 100644 GIT binary patch delta 223 zcmV<503iSE2c8I^0w0_NBAEmT0uTWhmBhHG|1nAk3I+%SDgp=rVu1t-{<9wfO#y$S z0U`=%ZDD6+FKTdQXF3UUWlnQ)T2pyRS{zJDQYmQ!*tpS64}I zb8TvB3P8u!QX6(8s{4-_*IxG$mlK37vaP-n`tq8ED$mI2PuesLbDqgA!9oBbs;QbmphC;Z%XA6khQf06Gg*R%CQcOnPKZVs>A) BHn9Kz diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto index cbf7a83214fe8879ea43347dc9f042b85b19f3a9..68cf9954dcd243d2471e323157ff9a67e76fdc31 100644 GIT binary patch delta 245 zcmVzBFIz%fb<3JVAX5aW!%#;7nV0Alz73iXpD z0y2NX0U`-$ZDD6+FK}*WItycYSy*R8dO=7^LqMz)NTdr|985_~I($CPTS|FdbG5j=_ddv|+!gB7{j{i(ug^-QeMr7*1L#TNQrREv{i?U}F delta 144 zcmV;B0B`@A2G9kd0wm4>BFg~?0uTWh>zBFIz%fb<3JVAX5aW!%#;7nV0Aj8I3agVO z0x}$VA_-}2VP|D8aBgQh2~lTaLTEy6WJN&S5=cLjb^;$iJPHtwf&9z*<-F(@Ysp99 yb(F0b>iFk^0wM=QL}pkzBFIz%fb&3IqrQG5})n0SfMu9Rg@MdLjyG zZDD6+FKTdQXKHE+K>Tw1=Wewcz>S9NZ;$=_wqs4$@#T(~WVEn+Wxw>laCItoH! LOLcE_LUwaYM4mp< delta 109 zcmV-z0FwWV2HXXp0v*}`BG&;30uTWh>zBFIz%fb&3IqrQG5})10Sdm89Rg@6N+Jqr zZDD6+FKTdQXKFeM5d3oc=Wewcz>S9y`+9YIRv$VOzH`8PQ06Gg*R%CQc JOnPKZVs_`TXw?7! delta 159 zcmV;Q0AT;u2#yG#0ws(DB8dbD0uTWhmBhHG|1nAp3JVAX5aW!%#;7nl0AlO|3h4v0 zB?4jr9C;!MX>DO=WiN1UXF3UCZf<9JdQNzHK->~YKa-^cA51(75S<&9*np}%BC+H> zSNPG2JsAAR`R)QD2Sh|>SVn12C;~9v$iUd}F#06Gg* NR%CQcOnPKZVs@T*&v0)OEFBHjTA0uTWh>zBFIz%fb>3JnMZ5RAdl-=sA<0tf+OzX1xo z0SXHm1Wjpkb0PytNl7xS0U`=%ZDD6+FKTdQXF3aGd0ALzM0!C;N<%=W0!XM5S{zJA zM=EA4Eom-nEpI7;Auv?pPT|^;_`WlrP&MqWI!eUfP(iJv)+*eI08~2 l`%r-fW@1pI(3M=}I@d5)<;p}8f(4;95XqZzQim}28UUP$S`h#M delta 158 zcmV;P0Ac^*1+fL70#mO6BCG)j0uTWh>zBFIz%fb>3JnMZ5RAdl-=sA<0tf+OjR6XZ z0SXHm1Wjpkb0PytNl7w$A_{43VP|D8YH(#|Itfu{VnS#_Ze&G3vj|Ae6O&c~A3r<_ z5E6ARFHWpFEgrE(wo8yQd>HEZ=Yj$_0#YCcuGdO$V-#mx;*%TPLTF_Uw4_fngq9yt M=W?n~)@h>}0A=qrc>n+a diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto index c947cbc01f13840012ac2a338ed6f78eb45ddfb9..dcc488f65ef218b41838d55e7d0d838d9cf59155 100644 GIT binary patch delta 212 zcmV;_04x9c1;PfP0v^BuBE13#0uTWhmBhHG|1nAi3IqrQLI7f?0t%!8lO6(K61D*% z32AL%XJs#NZf8L614x*Yj{+cnf&mIZq4Y3>@-{x%lyL{*Xj7INM#%y{Q3bB1t4y(+ z*NmU4M7$Lo5V9G;MUb9HlJZf<9J zdQNzHV<-SH&Dra-_Ay!@c}KANYhlA|fOT0S35D@X0#fKR>Y9YZjXc^DGH6}^h8h4m O3PNH_b#HV+c5_R0XH@6_ delta 139 zcmV;60CfMt2Koh{0v`AQBJ}|X0uTWhmBhHG|1nAi3IqrQLI7gl0Sep!lO6(K5pN<1 zX>DO=WiN1UXF!}2NbZx60w7B~3J@k-?fzlFoGg|1L8xDIBQ+TJnck%WA_qi7W>`jP tPbdH|-pIh%@G)8t>p2aMUKlKpwuut_UeEgS8UQ*9LSjpGZ*)R-b4yRYGwT2V diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto index 4a8ba09d7e800adb7f096946fcb39d7398f0c38c..f28d7950be30e6bce3b853e5ea7665d48244e93c 100644 GIT binary patch delta 201 zcmV;)05<>f2crm}0wkdXBAx^Y0uTWh>zBFIz%fb<3JVAX5aW!%#;7n#0Ahgz3jVVs z0!;xKqX8lcX>DO=WiM)QWoJ4Gb7f9*a#~Y)Nt1~KA9`vEK*!cn8+IhB`;QsdUiT80 z6ND|Yt-cca@|uMz(v7dhC<+zBFIz%fb<3JVAX5aW!%#;7n#0AkPs3eB@5 z0!;xJb0P|9ZDD6+FKTdQXF3UCZf<9JdQNzHlZpc$N;(PMrxafC8UQ*ARaRtlOiX%Y GO=5P55<2Jr diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto index 823c042aa127f3dc04a3a62b5f94949d083ccd7d..77fc669c824f9ec83559dd20baf988ff879ff0e0 100644 GIT binary patch delta 247 zcmVLMtQ1J33tAjZNliL^QbIUCEnZA6 zWHen*E^cc}UvhOxKW}7efdL9Y_-*>dZrDgXXDz$q`w=U(u<_+Q)OiwkH4U;7JwNmO zcB&&c?zZG8UV%pXFmV{ delta 146 zcmV;D0B!%A2GRwf0w&M_BFzB^0uTWhmBhHG|1nAr3JnMZ5RAdl-=sB40tf+Ot^o?G zlO_T(9C;!MX>DO=WiN1UXF3T{XJSHVLT+S5K->~YKa+R@A3r<_5RQTT%lhTK=of3r zN8xpptr+U~=Yj$v2Sh|>SVn12C<8Fw$iUd}F-mclkRjE1rtV|vn0NAlQ AF8}}l diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto index d6589a066b770c8fb39449afd49d05b83ea6d656..b73adbd8aa92cc6a00666ab6e0ac06864ff30337 100644 GIT binary patch delta 18 acmdnVvXf;42NTKoASdK0LE_=`T9&*_awn|^5QYpQy4jRX z#F3D#tGbGEzPnAiIp8!Z;5FU8f8=HTvqjl7U))-;&vF>--@FG>AWD^&o$n0k(g+Q> a^j!pG9olpsffNq@a6D%xsMX-}v>E`bTS@Bx delta 140 zcmV;70CWH41+)dA0uZtRBCi1m0uTfku>Pgl!8el-0u&dH0U8ks1n{4dfDi!~-`uW% z*D)Xg3VD+}0wq*aA`^6Fcyup#EpusSZeeUKaBN{|ZfZIT5d4KardXjMC*&zX;^FjK umKf8Dr>O%{AWgYB;4~`WHQl~{EqN5->k2kknn74;}pLdD)~41WYaIZl$$*rsqXYVO_`Es0e(pLeh+@j7`pM+NzpxMn0f`=)9z8C?FY v@q7Iz!zhJWAqy=tvo=VTew)y3>(aN`wI}Oz?Y7jX>3>g49cx{&PKp5lCv;`r delta 173 zcmX@W_KkG`lgk%IrH_mpOahD&8~-i6dC=U8jf;hYMT%h-<1I!hK`xdL^CvX`CGX!^ z*KplX0V*`HSAa$00Yr$2YvW`WrqI|JCE=3PiW2<_-Qvvjyu=*cf}F(6JS*0WWM|*h zEE_I?oW}=?mDYOyI`)tw@^``Q`4VSdpTEPR#2#K58IYHqsKI3Lf5M9EZw;daa_BeE`N~$A`^6Fcyup#EpusSZeeUKaBN{|ZaNBNOHfXAMp$`pYHDl>K$vu&KhkLH z{!F)HPN}Oi_Jb&~QU?;Xt*cz(rW_IUr8~%b5H>P?c-FrU`yR%32dzW$(Px%8hpHV0 zJdL$>GZ==Nh`0tg0#YEa8%dHx{Cg!EWyaI_-V~o?#ryF8-+Gja+cIZ~uDrFO8UQW= BQ!4-f delta 150 zcmV;H0BQf|1-J#E0w=ZsBC`Pq0uTWhvi_yn!8b||3JnMZ5aW!%#;7nN0tf+`0h0j= zkdr3@E@NUM6Le*GbT4=MwP0SZ9a zvmOhLU`dr-sF^N~vUwjy@|>Gzow2;6z{!4@gP39g#!vyfd&sQp0CGJ?+eFq9aG=~i z@Upgd)Zp%~GjReK?BBcxA`L=FLt0W#bVX=mLrrBU05H@0`>*mbS|D+xDc~MG=2FL}V0yxG2BEta)0uTWhv;L*o!8b|`3JVAX5RAdl-=sAn0Ga`%0U8ks z1n{4dfDi!~-`uW%*D)Xg3XhXG0yK#h0$r#g$r>O%X2UmGnP;P5sC;%}3kf_(~F})G I%~7Bl0A)`)s{jB1 diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto index 7960524537b97f0b496e4dab92bf219f8a31bc29..191784f974057ce6866ae03e1884867f0d0a282e 100644 GIT binary patch delta 48 zcmdnYx|wwY7Zcmu<6Eb#Fr6&GBq{lR-nQmQf?O;g=1=SuV3BwL7MkqDR0sgx C;}eho diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto index 3481b30745798f12d12892b451019e8b49e73bf1..753f189334615282f934bd734c8ac6ff2bb5a5c9 100644 GIT binary patch delta 18 acmZ3+vW#T|2NT=8<6Eb#FrCcDBmn?Fcm`bn delta 18 acmZ3+vW#T|2NT=Ye@ky3G@s1JBmn?KLI(K& diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto index 965181cb18b90c3a0bc0735eabfbed05808a631d..e5483bfc4af3c19591993f9f997990882b2d19db 100644 GIT binary patch delta 33 rcmV++0N($*1iJ*V2m%J5$F-KIHIohk9}e%HwuA09AOR8t@Sl;5+`|oO delta 33 rcmV++0N($*1iJ*V2m%JS{-xQ$Hue4V diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto index 9dc49d38af9c7a6c050b624dcda5732298c7a7fd..845738cf23437f1060a857f55697b57dedc9e873 100644 GIT binary patch delta 52 zcmX@ga+GBQ2NTVo3G@K~ D86gy? delta 52 zcmX@ga+GBQ2NT=&e@ky3G@s1JB&K-(&bo%{h6;>Qf?O;g=1=SuV3BwL5n>Vo3G@K~ DG_e&_ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto index 2277ddcfad50b7565cc17bb53e632212a7729881..5256a20871bc2d2ad3b889e011929e7c9848e113 100644 GIT binary patch delta 18 acmZ3*vWjH`2NT=E<6Eb#FrCcDBm)3IA_i;# delta 18 acmZ3*vWjH`2NT<0({ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto index 82d73be647f0bab9a096e749805340f68476cdaa..993a29e197841eb192617e087c9894c8a8809c7a 100644 GIT binary patch delta 40 ycmV+@0N4M*1i}Qc2m%J8$F-KIHIohk9~JMOwuA09AOR8!@Sl;X;((3tpOU*$a}sa> delta 40 ycmV+@0N4M*1i}Qc2m%JV{-xQ$HQf?O;g=1=SuV3BwL7Mg6!Bmn^G CmJ@RT diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto index 91c5378c39b07910cd5d8d920c5bb92cf7f2fc9e..b86dc0c069ea504f0e94ed49d58965245e7a611b 100644 GIT binary patch delta 183 zcmV;o07(Cx10uTWhq{p?Es5MFr3JVAX5aW!%#;7n#0Ga`;0Sc)B zlOzHqe}Vxb6Le*GbT4=3?jPOlug8ukgcn_igLcYO}RPXG%DaV-M)Y1W&N{7*)(6=TCvY^80_D?2T~wP lm6x6G4C&Gc4Y>4O1Y{lBbRU5f4*qaFXD6uD1>p0v8USk=P2&In delta 113 zcmV-%0FM991)T+;0wkLOBA5XP0uTWhyZ)uw!8b|`3JVAX5aW!%#;7n#0Ga`N3VD+z z0wpq2A`^6Fcyup#EpusSZeeUKaBN{|ZfZIT5d4KardXjMC*&zX;^FjKmKf8Dr>O%{ TAd`*)7z(flIN>Glb8s2}mS-r| diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto index 8d726bfff8e1027017acc4071905ebf46ef22a58..98966797572466b1af0ab2fe32047620e5734650 100644 GIT binary patch delta 221 zcmV<303!eF1-1sD0y?w;BC!Gp0uTWhrN_0Fs5MFt3JnMZ5RAdl-=sB40tf+`0g(b4 z5efwGpOSzO0T}O|wuA09AOQ;dlR5%b0;K_ykOCHe2Ww17Ol@>bYJvd@KmfAd<$(u< zN-3kV@s+UlJJiS+Nrr|A7u8i6{aeX``aWdW?x>ePkSP9y9iA`o%UGNI{Z|eO5Vj!E zTAjUIDj2HS=ZFR(4MIpmT2fDRMQCF~O=TzoFw^_{uktZkAevO6IcaLJ8g=%Ni#}5Q2PD6 zZO!jY6`(>Bdj(h|K0t(+xDHHqW74ai$fzV-l3G!sU!hx^nVy%Jqg#-Zn3-qAmEs-X zSLzl~S&)^L!{soeWWN2SjMx8swkP|oTy6ZVSz}`myU^CPt79H5lM(!~)cQoVfSFNU z#kKwXzvYgVv#)jjbTNIJMf)mQHk;n9WyTV1vpROLSuh1Dte5tjEdU3qm&>Q%ZK@s8i3OG z@2qRMZm0kin%FDABJlts#KbjWvKy0La*~p8NoqxjeuZvvW_n&?j&4CtVrHHdcUDGT za9T*ZTYk1rmJOG{`82PF$T+R#svDm-EX$A+kl4QI^fwj@rXYom$Dh0um$wQAHc$M0 bbW`p&w-F delta 138 zcmbQqI+t|;Q~hj4r5TJIOad$t56{g0xYE=p8q9h6bvlsa#K&C7AqvCD5PX2mn15r<^wr7nW=fDxeB@YIXOVN X%+g|@dDp?V2s{8&vlu5=Gsyt}VjMQI diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto index bd969ca9d9dfeddeff10b8ae035fcf7990e5c7de..d9652dbc13f8b077f6057256e85f65975bb2a82d 100644 GIT binary patch delta 420 zcmey(evEwqQ~eQUrGv~IOad$tAK%Q`*k@`K4Cb6WF$2hP65==lW(b@GQxc2{jI$UG zx%9boxwMNi^7E2Qixrad^NLfGOHxZpQ;QTb^HTDYOGarx>~PCl@js)K6nn5-v%tDABLbEzV5OOU%(N$Vtr1%c|va2+J&cDqa>c zVb6;>#THs7+A%!w)zgD2Tepjz_3teDqA^c!lb-c;y}$tWk5P(j-sV0v^^)(sc5*-9 zb1s+d-uzQy;nF)d*_1d+()@i3QZl_X7z`GCov{3~VU$9dlzQKEga2C9l75@zimzR2 XZ}|4`z9?H3;_3Er&TBH~N*MFdc delta 468 zcmX@c{+oRPQ~gh7rEkm}Oad$topZ15{b_0x4d(P7y9nes@o_YR83H|EY8Im{mo=9q zmw9e!u|h#nVMIctB{+YlLM5? zEG;(51RLH5F3h~2Xo zJ-NUZ)t6e8|3dM;9K=+rV<|?EYC6;BTBr4?RW|ovB z=7HRll$iun2=rWDVy=@A$NxE?uoLJ22O-2Cix{N@xmZ5TpVT10D6xC_v6mN&6d1XB z7`gPh)KkHsQk0abFqw;4g)wrn0kfF11D8NpX4zBmvXBXTUd$=B&@$1M*n93-l@d=> tRjyy2SCwmGS&oMWgTcv9`>wnqY_!~97N0*n#|@4lRL$xs0(1`?Xs3v|&Th!7Lkg~=y1F^%X60}>%zUjrJ%7{Ex#vwZ z7xbG}%$(_~8JPLG)YWV1^ttbOUS8th-SH)sB}MjDiF~67-@gKzboCWiAAH_2%e8mG z&G>ta5{Fh!X<)Tr2vYF>w^-?~)^cqw<__`X*Bk8LwzPeb%+5>A;Vc)+zx?Z~oD>59 D+RKJy delta 278 zcmeyyc7$yKQ~e<(rTt7COad$t56{g0xYE=p8q9h6bvlsa#K&C7AqvCD5PX2mn15r<^wr7nW=fDxeB@YIXOVN z%+g|@dDp?V2s{8&vlz7wGfD|^v3!_6sX>5IV)yc6FE1D=K!qmu0$sHSBE-ZsYw}Vi z>x6hE;gZyf68#F@;>`5C#2np%oW#sLD-M^C^a4+>!pbZgE`f-J3hGZZ9UndX5;bj) zPm#LB&TC8Ovsf?$DVS(IFul94{z>ZJ&8|01;_pOlJYTed-QuC@`{IHcE~yYH1_1qd BZ@mBj diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto index 820e2212ff8c27cea996ffeade37f7edba89523b..c7cc3208624709d33c0885bdac11483e99100b9b 100644 GIT binary patch delta 388 zcmeyyzK4AQQ~fSxrR~fdOad$tAK%Q`*k@`K4Cb6WF$2hP65==lW(b@GQxc2{jI$UG zx%9boxwMNi^7E2Qixrad^NLfGOHxZpQ;QTb^HTDYOG3>g49cx{&?)IfQTl8l5rs`eioHpI->+&U$sa&cP z-e2rdnRolhFRsYulP{V7+?ZnYWB$fh%iF@HO3YgHXg9MGM@gE$Z$V0?mj<)Jg0B;n ue>RL#*t&H8W$FEVZ6&9A-%NFxQEkDi(Dm=^k)s7t9M|7?|5*N2iU9y@=by*` delta 446 zcmdnP{*8SBQ~eiarH{-UOad$topZ15{b_0x4d(P7y9nes@o_YR83H|EY8Im{mo=9q zmw9e!u|h#nVMIctB{+YlLM5? zEG;(51RLH5F3h~2Xo zJ-NUZ#g=83rRJsNE2JeRmF6TCD`Wt9K>e8|3dM;9K=+rV<|?EYC6;BTBr4?RW|ovB z=7HRll$iun2=rWDVy=@A$NxE?uoLJ22O-2Ca~Zj2O@6^-%9uJ?o>|PFGutQ7-8HDB zJUGjdOW=3G?fF7o8zghHA0Au&HmFnLz_-K8*_3#qs&f7EysBIi%W^z4m<>*T+IQu> aVU)n$Rd;^AS~8*kxbYzu9;;`1QVal3bFp;* diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto index 070d17cd378b56054c3ec0c3c35028a1efc006db..6a26501af7bc7331645cb5208223e402f9a6b93b 100644 GIT binary patch delta 277 zcmdnQ_JC~xQ~f+IxdOzuprjFay%iRI^TIjq~W zbz$1VC-?WhVwCdn_qi*kshY`axMG)7^^46-TszGqOhe!HIb3pC7AqvCD5PX2mn15r<^wr7nW=fDxeB@YIXOVN z%+g|@dDp?V2s{8&vlzuUGD-<@v3!_6sX>5IV)yc6FE1D=FmlbFJc-FYG(<_bB(wiAmll@k%HvZPEu`!5UXzN-j1^~{4WfK4Z diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto index eeb307c85e202bf34f77aee64f03d7217c46d10d..ea4151dd73211516d578db9f4665b12e4094b95b 100644 GIT binary patch delta 278 zcmcc2{(x-(Q~fOePb|g&c8I1M%wC}+`d15FJ#+6oQ=j_bZ3%- z@JUa@GbAf?nJ&>q;SBU$Rik7Y1Ve5tvuJ>oP-0;jaOFjXTsi?lRh7@7GZ}{A=W%#D zIUEfpm^9Kl1jvwV&~>^-R|_Q#x7<1neT~BR^9rp7uC>ybdp=6bH8;Krm@eEOSQSod zAGcXAurB_M97Q9MJtUhnfCe?zT$T!USneujVAm_(j}{E;`~58!(9^8Ol7SLvEt8X- za?E|9Hz%3swv(Tm$?ekPaKh+gZ*G>hzV5E}Q_^{S7=6BGKw{|f%wPK{hOTLI>lb{0 BnH2y4 diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto index 954c1aa3ef6f0ec8044eabbd2e085ef56f467f10..342a3dd298eb39ed2efb7f4c0b731cd1dc904263 100644 GIT binary patch delta 136 zcmZo;ZD3u%R9~-D%fTeTBJuRv?DId&jDo?OLz|`pIZi?xJHQNqgJ4R6QGsz5qal|* zmoArfQAU1Va%r(ba(-TMYH~?xNoi`4LS|k{esW1^u0mpoLRn@>X+dgHVo4&psI41p(LY8Im{mo=9q zmw9e!u|h#nVMIctB{+YlLM5? aEG-6_cO7htzymNfi;llNeuuB5I5=o diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto index e884d8c364ec029b2138d7f0093dd17a801f4da2..93c5e4e08568a5440bc3401a3214bf9f2b61fe0c 100644 GIT binary patch delta 262 zcmey!_K$S|Q~e)CrJsx(Oad$tAK%Q`*k@`K4Cb6WF$2hP65==lW(b@GQxc2{jI$UG zx%9boxwMNi^7E2Qixrad^NLfGOHxZpQ;QTb^HTDYOGABInI z7M>|tr)zYTt_Wvfk}YTvQ4+>Cfz8MG~9CQG>kL~-_I+w8o1UDW`ULj%avSaVq_*kie?n1Ow-d_P(+Y~=U1T)-KiZNjPEWV_|Wg_C9W}4ieITxNlycG9alBTuy!gwK0>T diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto index ac64e2dd17eb6f786d963cdddc1ae9e74d9d77c1..f0ee0c54afcf308960e9a3914ad3ea6feece3ead 100644 GIT binary patch delta 176 zcmZ3(x`K59Q~feVrNxXKOad$tPp{2B|HI5E7|c1eX*!VOB*d`;%n&#TrX&~@7-umW za_MvFa%mT3C7AqvCD5PX2mn15r<^wr7nW=fDxeB@YIXOVN z%+g|@dDp?V2s{8&vlw-Cqy)KGKFpugAiyZGd-<`K7mO4bAwm;-fsWb(5n>Vos+rga E0LtV?TmS$7 diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto index 561c9391183dfdd00beb1942c21481ca744ac906..6315aa52a5bc416382c54ed68599e7093797de87 100644 GIT binary patch delta 247 zcmaFF_MUYCQ~g^;rB{p`Oad$tAK%Q`*k@`K4Cb6WF$2hP65==lW(b@GQxc2{jI$UG zx%9boxwMNi^7E2Qixrad^NLfGOHxZpQ;QTb^HTDYOGbF5XMPR30p`=b>-kA1VltEJQ493tR~5N4rF)3{z-d<3JRWwZBWh^(eio= zOF?`AueH+6Myr``cV>R`&DZ+p##21~h_~M3Bu>{xH;-@6-`n|V5VPg07vs(3A|&Z; z2wk+#_Si1l5zav4>XsyG5J=ouv}6D)sHn6ETzOFwmrj6Cb?yJinViD#yJ2{iTrQ_Q zCLL&_2%;`JW=HIh9h6EMZnxscs@zXH8;KrP?zoxtV*Y~f4BK0 zu;%|pt_C9myNga(097ruTviIsuy8dRIQPo;lLdo~-`{cp6OAoZ2uhH(DEplXDtw_g cCsB;E$vRd5FR*U(|FYhsq@c;k- diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto index 2a640f5e0c0ab425e6b16a3f573e249cc711dae0..728ceb3941ce3c8af4229337aa6559cb95a0b8ec 100644 GIT binary patch delta 164 zcmZ3$I)`-uQ~fMPrRj_uOad$tPp{2B|HI5E7|c1eX*!VOB*d`;%n&#TrX&~@7-umW za_MvFa%mT37CCl<*{-g#0Mu~%WUrxGYsK6-1{bByZm5&;Ff#SOX+73ZN delta 168 zcmbQkx`1^7Q~f+frP+)eOad$t56{g0xYE=p8q9h6bvlsa#K&C7AqvCD5PX2mn15r<^wr7nW=fDxeB@YIXOVN z%+g|@dDp?V2s{8&vltZ>qy)KGKFpugAiyZGd-<`K7mO4bg}6V=pSbc-LoZN#Hvof6 BM7aO} diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto index 0872e219b0118e0652706abf1a57e298acddfe4a..07832b33ba1a254ee560c2658b5bbf3c2d8aacac 100644 GIT binary patch delta 225 zcmV<703QFC1=$6l0)N*5BGds00uTfk>zBFIz%fD)2(Hnb?ej1Yp}?7pk})6wTC@QY z6bceza&>fNAa-SPX>@gSAa!naZ7Q1qA`^6Fcyup#EpusSZeeUKaBN{|Zfb!63P4z) zASdK0LE_=`T9&*_awn|^5QYpQy4jRX#F3D#tGbGEzPnAiIa=T}D&RHUzJKIp{j){c zG+*3WvCnd_2RPvvs@dm=1|ke@YhhPOLP$eeQcrX!05I=_u;%tLS|EH18dRr>Q)-#( bCzo%srJc_-DWH!vc$t|^DN$+jbwwHgj&om_ delta 142 zcmV;90CE4>1(*e(0z8%hB9j3K0uTfk>zBFIz%fD)2(Hnb?ej1Yp}?7pk})6wT67W= z3KC*+b#!GQc4cyDbaiteb#8TSDqNF30v1L?3J_SKASdK0LE_=`T9&*_awizf>(AT- wA`V$=Mp#WxLUCO~jFqt*g3yyu0zu#bBHaN90uTfk?3cOJz%fD)2(Qtc?ej1YqQIGqk}((oTD<`h z7YY?~VQ^_>ZXk4WX>)XGadl-Nb75>{Dvkk@Kmrzj2Ww17Ol@>bYHSKX0J7fYfd_?3 zDWkISm9X|Z)W{e~hK30j)m0h&Tgig@K4jPKsFy#GDE@>Uo-gssSeyL)R}Kmgwjj}3 zoxNNt7>1gNxCS@?QXnpvO=T|E36_^i^{1p+WeO#b@6n7Tp4-Iw3R#26=>r-7G7$;{ T@SlBCi1m0uTfk?3cOJz%fD)2(Qtc?ej1YqQIGqk}((oT8{w| z7YY?~VQ^_>ZXk4WX>)XGadl-Nb75>{Dq)jB0v28hV?#}4Wol?{Q)X&B3K08n+n*AO zuo-P@;l`)!Qi&M1vdi`aH~>;0_Is+3X4+HA_6$zR0J7fYfd_?3DWkISm9X|Z)W{e~ Y8UQj83Iy<R6Pa=_4wjf;hYMT#M+pJ}o*lSBP-MkV2r)QS@Q z3f4PQn!f8f~>4YMlOdLCG+hsWxW39vpv~wdZlf~#CQ9R6c`~w6MF?%B-$ZDOaKtEV8Q?Z delta 181 zcmZ3*_JVZ*lk_u2rN@jMOahD&Z>R6Pa=_4wjf;hYMT#NnEaPNpCWrboCE=3PiW2<_ z-Qvvjyu=*cf}F(6JS&cLxBP4$51-sDXD$JDRg3JnMZ5aW!%#;7nN0tf+Go&gdR z3KC*+b#!GQc4cyDbaiteb#8TSDun?e6Le*GbT4=O0me`PyL-s2>_Y%@JxAL_))H`_+&=KK zws+Lv?yoa(0vM{<=ZFS415zNXEmt`xp-S5>kdSei6;JJ#o~e%+*hs;9cwhJp($S9^ E07r#X6aWAK delta 152 zcmV;J0B8Tg1&{@x0)LJHB8veC0uTWh?w7gLz%fb>3JnMZ5aW!%#;7nN0tf+GZ4wj; z5@K?7bY&oRWpZhBb#owfZgp)cRU#8~Wq5Qicr9~jXKrC^EpTjMX>Mvf3J^N?o+*s{ z@<|$&=Lf(7S;rX6>(AT-I0I53O3Y9|)=sE4@;Xf73_>8QIT372j=k^Hn?$t8(VR!i GfEobK^g4+E diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto index 60ad2e1b1a4d2c651ac42cbddcfc1230f168b9d8..16d52312cdd71a8ff028860fb8dc249b4cb39dd9 100644 GIT binary patch delta 222 zcmV<403rXZ1?&Z&0wL-FBIf}J0uTWh@0YpMz%fb<3JVAX5RAdl-=sAn09wkEAp#qJ zn*kydbY*ySFL*6;X=iR>Y%OqXVQFq^fdL9YSfL;%3?jPO zlug8ukgcn_igLcYO}RPXG%DaV-M)Y1W&N{7*)(6=TCvY^um?Ed7^>Olhz24IZfjvz zNkT|NT2fDRC;%|;gs|rJFK)Z?dJG&on8Zk2QFinN2BCY4deO Y8UQj83Iy<1aU?!Pi10T`%UX#fBK delta 140 zcmV;70CWHB1*`?20wJmaBBuce0uTWh@0YpMz%fb<3JVAX5RAdl-=sAn09uNZAp#o# zT$4Tm7Fk0I5LlrgC*&zX;^FjKmb^@ICm77@&)fte4q0nPSWQntacx6nSyy=|05HMu uxSI7bS`Z8(y4jRX#F3D#tGbGEzPlO#G7$;{@Sl=^5CItdpQFB$Gav!oE;Ysg diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto index 64de0f9de760127a8b5dcd50806642e6a33b6833..c486c623dbc39d1c430c169aa3df5b55602bc504 100644 GIT binary patch delta 206 zcmaFLI+<+&lgvaWr9LJOCILo?57T#EIbi6;!NtbGqQ%6)81-$k43i^MALHaWCb4?< zY#$Gw+!CLx94-fjP4}KQvbTC^F5dKU>V|LDS58QHwzYAJUk#P~8-23rmtD&BcPpmb zPtf?+B0Eq22Ax&ll?2Aeo!}@YwRVL7fuYH=X{*V!;rk@U42)gtS}1r@ry{ rot)grB%&e3U?j-J@?rj@2A~~(=P%wj*;s)QA~dmAfJNdTM2HChFdsDi diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto index c1905bc0d00d172f2c592b37a3361563587ddc27..6355df9ce7e0f4f2051279eef9de8eaa93f37510 100644 GIT binary patch delta 216 zcmV;}04M*S1>yyu0wUl6BHaN90uTWh@t3*Oz%fb<3JVAX5aW!%#;7nV09wESlOX~Z zf2RQ=6Le*GbT4=D5Sb1=2YJmX?K$vu&KhkLH{!F)H zPN}Oi_Jb&~QU?;Xt*cz(rW_IUr8~%b5H>P?c-FrU`yR%32dzW$(Px%8hpHV0JdL$> zGZ^fovepM83~p;-S4l!hLt0W#bSMKbD({4_=JqjKARl;QEU!xy(h}v@FvG$o+#(*2 S>@^~#fNAa-SPX>@gSAa!naZ7OCW6Le*GbT4=3JnMZ5RAdl-=sA%0tf+Gv;h(q z3Ker`eMAi~;pxi$2vbJ~B;O?(8aRL~s+2@D` zI0I53t1VYKD4|N*E|8FMnH5j%m!7GQ8Q4g{dw5^?4bst%8UQj83Iy<1aU J?!N;vAOXb(Rd@gZ delta 157 zcmV;O0Al~x1*Zj|0zahzBBB8Z0uTWh@|U^Pz%fb>3JnMZ5RAdl-=sA%0tf+Gg8>p3 z3Ker7k57^MT6Tdp9;ID3r}!S3IAQJT zU0p@{cKhzMd|;yW!1V6E`X{M>H@n_6iN6!I@qEz+c8iA+t8PB;U{m7B%T5gUbn9k?s*f<1^uQKGiUm024;RPb(LZ; i669j}Fn>}5(D`jMCcfKmq`(Lfn%FDABGC>JVgdjdK3Q6KsA3gjMHEoYik-Eg0*XQrBDDg#RyG8i=I~C?S zr$mNVYA_fa{IFxzSHma)9;ID3r}!S3IAQJTU0p@{c1tlB339P~m_MljX#3y!i}y`7 VR$zn(P3#q5k@yD`VgZUV0RXp5K*|6B diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto index 053158a0c2401070c12d8184900abc66b9e136f2..302f3f18ce0ca04a4f35042ef9915d5d37c27220 100644 GIT binary patch delta 191 zcmV;w06_nm1<3`V0wTu&BE$g*0uTWh^q0BRz%fb<3JVAX5aW!%#;7nl09vO3lOX~Z ze~tkn6Le*GbT4=XOloWjKmfAd<$(uePkSP9y9iA`o%UGNI{Z|eO5Vj!ETAjUIDj0^E th`0tg08$_>m`!Ca*9n%FO7*9tS!D_(5s>fEj3l1h#QF+ZgURUw8UT14PYD13 delta 162 zcmV;T0A2sd1)2q*0)LnRB9#FM0uTWh^q0BRz%fb<3JVAX5aW!%#;7nl09ttx6bcez za&>fNAa-SPX>@gSAa!naZ7N|R6Le*GbT4=3JnMZ5RAdl-=sA<0tf+G)&UY1 z3Ker3JnMZ5RAdl-=sA<0tf+GlmQYK z3KerNLkbWFB{bFdXS%M$ z(~I1Dr(!o4=d{v*1tJbvYera2PeO5RLu6T3c_;%g!SJ}6^)XryuqKRMsAuT3RCPmH c)H8ZK8UQj83Iy<ksga7~l diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto index 2bf0b96178c1433d45886d33cdad935a0881e95a..b9cc85d89fa31421316861cc8e4f84c4b3fbcb01 100644 GIT binary patch delta 212 zcmcc4+QGJfNve%WshNp`Nq|w}+w`4R4j6i|aj|f)I59-Moh-%VSl`O1BwUhOQKDa= zTb!Ammzbklkdv61mzBfiaAUI^cW;8{)Yug>_4+nd%Da7Jw|;FcjIk-*&ksRIuQV-G@!v%C9_lx8AsrNn+K_=N)Vo%s~pPb;B(+7JA** zn=qkprl|kh>GM|hOWyD}SY4qP|AY6^#eOLUBS9{f5A!EA0NvR(W8%C0Mhc7&p^3c$ KEE4SyAtnH|lvg1D delta 162 zcmeBRyUx0RN$M)2(j`U?CILo?Z_{^PIbi6;#>K+H;=~ZOXR;KNV@;@%a7k)KiGGD{ zab|j6VvcS>PGV+WmJOGH)%SUtJ%2uVN=mO0*id*5G~?Xu;>#X0V$8>ASF1i4r~%%9W%wDs@&#rq~3D=^YMJXNmv6GAozFBWppP|pnVC%~QEBsa GMH&E5R#ig) delta 157 zcmV;O0Al~v1(gM$0)LYMB9H+H0uTWh_m{cUz%fb<3JVAX5aW!%#;7n#09tes6bcez za&>fNAa-SPX>@gSAa!naZ7N(M6Le*GbT4=+yo*HS!+gEO;18`Z9`;PS9vG^Fv0M+nilmjS`Z8(y4jRX#F3D# LtGbGEzPlO#J32gi diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto index 0375d18fbcc9ed04bc0dc4149c1cfb08ed1154bd..96f84920b498c64b7c312ac4cf1a91b59dba7de3 100644 GIT binary patch delta 216 zcmV;}04M*m1>pst0zlsZBHRH80uTWh_?NlVz%fb>3JnMZ5RAdl-=sB40tf+Gy#W#z z3KerpxATF3qWiHnVmX}KPr=(eB3MG*5(TpUX+r;_`S%b;x0~!D_5efwG SpOOrK5CIs5n33+kG9Up-B3GpV delta 169 zcmV;a09OCu1+xX90za_3JnMZ5RAdl-=sB40tf+Gj{y=F z3KerIpgFwCb4?1 z6z>4PQn!f8f~>4YMlOdLCG+hsWxW39vpv~w2-s{ht%#^D9QD|F;!any1i}2#CQ9R6c`~w6MF?%B-$ZDOaOQ+T1Ef> delta 165 zcmZ3(_KI}@lk5vdrKgM>OahD&Kd0}!a=_4wgNu!W#fyo9De5faWLYK$#2CSiJ{~@~S zlUo8HHrX^^+*+~Ea`e3JzNAUInR2?_^AQgnAyQFR(l3Q8ghX>DO=WiM)QWoK$S m3J_SKASdK0LE_=`T9&*_awizAv7gHWQXrFB0w4q$02l%4vKf5< diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto index cd01efba24abef1374e30bc2cbde110ac507e11e..85693feed808dce5bac93258a1a6c9d937e52687 100644 GIT binary patch delta 586 zcmV-Q0=50g2ayS&0#c6!B8&wH0uTWh?U%XKz%e)hN(Kr92m~4cTJ!`G3knHvNlI~f zQ)^678hi?RA_{43VP|D8YH(#|YHA8VSfL;%lU4#CTiG;U z+*+~EaZU8$;hFY-Sz${ z|6bs;7=(@R(g!#IQXp*O!E++5OZvv)2wD4Z+n*AOuo-P@;l`)!Qi&ohNC+AL7y%lJ z0Sbo!A_-x2WNB|Ne{FCxIt58WNJCmcp94tm18QpuKz+7lZgWQl@z$Dxfrg5$aOdZ zQXm_@4u*8fjqH^~n0q)4Ad3FY#KmwL*X&F9r}ZO*%BLCt78;}h3ZDTY33h2@Wp6KS za5O;14M^~lY6Bo~YzjbFNj@8}CX8LEXXvz4bwgRyGkQG4@P}9OD`%OO5D`R}be})c zXzTt=w_{GJt26e4D6vup61Ay!AT~07c-FrU`yR%32dzW$ Y(Px%8hpHV0JdL$>Gx}76^BMpc0o4Hd4FCWD delta 412 zcmbQpd6InrQ~hyfr6bH7OahD&Z>R6Pa=_4n(Tk0Xg@Z+kA!-e?5H}ZRfu~ntWpK7n zpp+k%ml9WIZen_>epW$hdX^QJK*T}?^(UH+j~;%BnzqNMNL^y>#`&k2gA{m_cHNxf zdt~B-wX1h^746&YyVLT4iPi(tyZh>&r2gIPD#akdC{@W-t|Y+;F|Z&n-HN@)v8u=; zGTTAcw^-?~)^cqw z=8ojo8|>e3#K3i&BdEcKTh57&HBm-3D34R zPVuXul7FL5HvO_ox&Cg&bo&WlKNNE1D{+=(rlf*wFmZSw>2YBai-JASJ;q@~_G*rK)Z?dJG&on8Zk2QFinN2BC JY4deO8UTnoI_CfY delta 106 zcmV-w0G0o*1^xt}0$P0{dk6v$0T}O>xzxZhH~~rx3JVAX5RAdl-=sAn09suV3knHv zNlI~fQ)^678cqsIA_{43VP|D8YH(#|YB~xKSfL;%lU4#CTiG;U z+*+~EaZU8$;hFY-Sz${ z|6bs;7=(@R(g!#IQXp*O!E++5OZvv)2wD4Z+n*AOuo-P@;l`)!Qi&ohNC+AL7y%lJ z0Sbo!A_-x2WNB|Ne{FCxIt58WNJCmcp94tm18QpuKz+7lZgWQl@z$Dxfrg5$aOdZ zQXm_@4u*8fjqH^~n0q)4Ad3FY#KmwL*X&F9r}ZO*%BLCt78;}h3ZDTY33h2@Wp6KS za5O;14M^~lY6Bo~YzjbFNj@8}CX8LEXXvz4bwgRyGkQG4@P}9OD`%OO5D`R}be})c zXzTt=w_{GJt26e4D6vup61Ay!AT~07c-FrU`yR%32dzW$ Y(Px%8hpHV0JdL$>Gx}76^BMpc0i9R*d;kCd delta 412 zcmbQpd6InrQ~hyfr6bH7OahD&AExiTa=_4n(TjtNje|vtiGwj}6|)d07rSdvNqKN! zsgxg=ml9WIZen_>epW$hdX^QJK*T}?^(UH+j~;%BnzqNMNL^y>#`&k2gA{m_cHNxf zdt~B-wX1h^746&YyVLT4iPi(tyZh>&r2gIPD#akdC{@W-t|Y+;F|Z&n-HN@)v8u=; zGTTAcw^-?~)^cqw z=8ojo8|>e3#K3i&BdEcKTh57&HBm-3D34R zPVuXul7FL5HvO_ox&Cg&bo&WlKNNE1D{+=(rlf*wFmZSw>2YBai-JASJ;q@~_G*rK)Z?dJG&on8Zk2QFinN2BC JY4deO8URVZI#vJx delta 80 zcmV-W0I&bA1^xt}0t0;_dy@qMA2?eQ2?_^AQgnAyQFR(l3Q8ghX>DO=WiM)QWoK$S m3J_SKASdK0LE_=`T9&*_awizAv7gHWQXrFA0w4q$02l%3IT?2V diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto index 9cc6cbee7077ae739eefe864d9ac55f63738b566..5bed4e6767f0318e16a7c77f4788e725e817e2b4 100644 GIT binary patch delta 586 zcmV-Q0=50g2ayS&0#c6!B8&wH0uTWh^Ow2Qz%e)hN(Kr92m~?!TJ!`G3knHvNlI~f zQ)^678hi?RA_{43VP|D8YH(#|YHA8VSfL;%lU4#CTiG;U z+*+~EaZU8$;hFY-Sz${ z|6bs;7=(@R(g!#IQXp*O!E++5OZvv)2wD4Z+n*AOuo-P@;l`)!Qi&ohNC+AL7y%lJ z0Sbo!A_-x2WNB|Ne{FCxIt58WNJCmcp94tm18QpuKz+7lZgWQl@z$Dxfrg5$aOdZ zQXm_@4u*8fjqH^~n0q)4Ad3FY#KmwL*X&F9r}ZO*%BLCt78;}h3ZDTY33h2@Wp6KS za5O;14M^~lY6Bo~YzjbFNj@8}CX8LEXXvz4bwgRyGkQG4@P}9OD`%OO5D`R}be})c zXzTt=w_{GJt26e4D6vup61Ay!AT~07c-FrU`yR%32dzW$ Y(Px%8hpHV0JdL$>Gx}76^BMpc0TylgD*ylh delta 412 zcmbQpd6InrQ~hyfr6bH7OahD&pQrDepW$hdX^QJK*T}?^(UH+j~;%BnzqNMNL^y>#`&k2gA{m_cHNxf zdt~B-wX1h^746&YyVLT4iPi(tyZh>&r2gIPD#akdC{@W-t|Y+;F|Z&n-HN@)v8u=; zGTTAcw^-?~)^cqw z=8ojo8|>e3#K3i&BdEcKTh57&HBm-3D34R zPVuXul7FL5HvO_ox&Cg&bo&WlKNNE1D{+=(rlf*wFmZSw>2YBai-JASJ;q@~_G*r diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto index 0d7c9c39e4f7de24333000f3d9541eb9eb8ae81e..54c5cc4d35d216147ff61040b96e2fb2aed5fba8 100644 GIT binary patch delta 157 zcmV;O0Al}u1+fL70$Z;EBCG)j0uTWh^_RKSz%e)hN)HMR2m}y}!O-8NH97(a0a}Xz z5(^3ma7jvWc~fglQ5t*-dLjyGZDD6+FKTdQXKHE+KvnQXqT^8dRr>Q)-#(Czo%srJc_-DWH!vc$t|^ LDN$+jbwwHgaB@1K delta 82 zcmV-Y0ImPA1%L&h0t0^{eUk+OA39wU3knHvNlI~fQ)^678cqsIA_{43VP|D8YH(#| oYB~xKSfL;%DO=WiM)QWoK$?3P4z)ASdK0LE_=`T9&*_awn|^5QdXf0w7!2G+*3W zvCnd_2RPvv_l(lZ22vn=3K~?Wic@Nt>nE3QvZbBRG%28uHF%ksO({`n^L0fU02;CZ z3atSm32AL%XJs#NZf80Sacx6nSyy>kP;P5sK+_#a@ePxe0v~^D3P60cL}6L`Wg3+= zCEZ=As(CN+KQYQ6NIv(VT9y^mt-bb`T$HwBGa{k?9G5cKMQ(5>V@kP;EA9TeNl5=* z;IkNnjquV3H~>;0Y~#UmBCSjM#^DHA`*7Qz5{j@HZENAir|nXSA}vS=8UPpp8j1l5 zhXEo9VRd9_Z!dpsa5FjuNkT|NT0oxzNbdt`YYISpwq@mK{mUB0g{ZFE(wwv|m`!Ca z*9n%FO7*9tS!D_(knhoqB%a&E`U+Wt$>{_9*pxE(pRwwvhE|mnxT?7ru7t>SI08~2 z8@~>QbjpqFl|-0(I1M0*{>{Y2a2nU_OZcbtBZSJQ8UPj=qyY+_0U`-@X=G(@FKuu% zK*kM7@RMi*AaQI8Kv+pW8?YvfU8ra1v{ZFNS=2LnJjC#aSMn=onU)X{M3{7+KhkLH z{!F)HPN}Oi_Jb&~QU?;Xt*cz(rW_IUr5N{&(#r-o15zM1GJbg0zYqH!#&-v;L-NsQ WmNFASJyk!eAT>S9ic273p@RAoO~*$MzeG*j<5Q$Av3BG9)678%lLMF(6r~s> z7^Nz?%9S`FnhNsLt=NkktBO1#vmInTZpuwQ%_LuM!zEBD^Y+&tKFz7Q2Opf3*l^!e z;zs+27Iq7UAO-(_i*p32TX97A`a2coI;S`+mhgDVnguleTlK05X}5w;edF;v$*}3(Q;A9MpC4ql zU+e=fx1Rv^LLpba5@%UvN-D?( z6Nd+q9v3G6V^**S8vXC=k)s7t*WY;mSpHSH<K)Z?dJG&on8Zk2QFinN2BC JY4deO8UR=GI&=U4 delta 80 zcmV-W0I&bA1^xt}0t0;_dy@qMA2?eQ2?_^AQgnAyQFR(l3Q8ghX>DO=WiM)QWoK$S m3J_SKASdK0LE_=`T9&*_awizAv7gHWQXrFA0w4q$02l%3IT?2V diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto index eb027926e689705660e832839137fb7d1c5be02b..a456fbecd485b98386d2a4f70a0989bbec8e10d0 100644 GIT binary patch delta 588 zcmV-S0<-zq3VI?6X>DO=WiM)QWoK$?3P4z)ASdK0LE_=`T9&*_awn|^5QdXj0w7!2 zG+*3WvCnd_2RPvv_l(lZ22vn=3K~?Wic@Nt>nE3QvZbBRG%28uHF%ksO({`n^L0fU z02;CZ3atSm32AL%XJs#NZf80Sacx6nSyy>kP;P5sK+_#a@ePxi0v~^D3P60cL}6L` zWg3+=CEZ=As(CN+KQYQ6NIv(VT9y^mt-bb`T$HwBGa{k?9G5cKMQ(5>V@kP;EA9Te zNl5=*;IkNnjquV3H~>;0Y~#UmBCSjM#^DHA`*7Qz5{j@HZENAir|nXSA}vS=8UPpp z8j1l5hXEo9VRd9_Z!dpsa5FjuNkT|NT0oxzNbdt`YYISpwq@mK{mUB0g{ZFE(wwv| zm`!Ca*9n%FO7*9tS!D_(knhoqB%a&E`U+Wt$>{_9*pxE(pRwwvhE|mnxT?7ru7t>S zI08~28@~>QbjpqFl|-0(I1M0*{>{Y2a2nU_OZcbtBZSJQ8UPj=qyY+_0U`-@X=G(@ zFKuu%K*kM7@RMu-uQ` delta 415 zcmbQtd76CzQ^ZMTrDMz-OahD&Kd0}!a=_4n(TjtNjf2IDiGwL>4YLq87iWQ|S7Bvv zwojmxAD5RBS7vTvda8a_L27!I6_-H7LIw3FnvRbieu!ixgZ-@Fbxv_uEaCBzH4A9`x9U|B(ryKx`o`mTl3~-mrxKIi zKR?K9!4#yRxp-6k$Eh2>SzkFJ;n~*4DSkCn@^AFXreAg`*Way}Za)F+g+i`;CC;+U zlvI!nCJqlIJuXN_$@sXtYo+PvX6ohW=G(ig)Y(Usm=}2X8QPY(8iQ>8clOB90;%h7 zynihJs@!sFIV5N-fPur8a$VD3cz(lF-oBL|MSJ%NOn4krmHFkH8F$^}*=}2>BuX&= E0B?Ywu>b%7 diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto index 668a69b07da9ea779cddd75445386c31ef037ed3..75a635add4c4cef2004899d1516147602e71a631 100644 GIT binary patch delta 197 zcmV;$06PEm1ib~I0)M*!BDetv0uTfk;-rqMm^DHW2(Hnb?ej1Yp}?7pk})6wT9^SE zl>rKl0U`-ub!2I8FKuu$YJUnqU@GRwi~qZ5c-hTVLrcnXG-_Y@d@+KOy>4^=kRrzV zZ?3x)Sz|qE)m@qP_;L7ynw;X;(`Z?_(6-WA%uQN?7`}?M&^`hp3UWwUYera2PeO4h z05JQf&ie2%S|I#|Jf>KoASdK0LE_=`T9&*_awn|^5QYpQy4jRX#E}{R5CIqgJhNA{ delta 124 zcmV-?0E7R%1@#1=0(EpEatHzt1Q@ZUmFB55LJ$b9(VXq`Fc6`@nT(P#AOTua8c_;M zA_-x2WNB|NZE!PcJPHtCD(1+G|GQ{-+09f#OUiN>@~MJ}2Oap e`0+7X5PUI$lD%$o|Bxca`fskg6&e5#0T=-cY%*p5 diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto index bfb4689640010a78bc0575463d8863caf98780c9..afd2be7730c87a161d4ae4cb4922f11b42d2cf9d 100644 GIT binary patch delta 81 zcmV-X0IvU!1DO=WiN1UXKF(V5Z&2VZ2~D~1g?pcsy*d|AQ*wAh{p#a4tPmYQe;h1ZbD*9 zb#HVi05G}wh3E4zS`c9NksEHK+HBE=B3hf!)WBUcZj5@%UvN@~7- zZh=WwEtf;wqKd!EPG0jao%d;ZtTWG1oqz|TGN}fCzg;WQ<1@>9wq=Iy9cgKy%WqFk z{}K?b%j4!|>=Lu_=d!L85BFyYn}18}|GG^=i8Cdv(xo!J!Z#vAgTY|$|2NM+8wM#j z#TA8|bP})iDOb>^^MTR(|EdyY0EGX%1@r`<0(5gCaR>qs0T{HUmFB55N)HMR2m}!0jKIdIFd_m70a{ZUQ3^{U z31M|)X>TuWa5HK=3J_o_=E#fxyJ&dX%~V56%5oU;se*|IA_sMKMMgtyLnr_+-1pe{ d@iAHud@+KOy>4^=kRrzVZ?3x)8UPRh7y+`oF6aON diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto index 55e859697265ee33399cd5d78c3fcf7419112285..b01ee21b64c153ce6e0249c13113795857f2c60b 100644 GIT binary patch delta 78 zcmeBSJzEv|!y?D8}IamaG4qmvw#8inPN<&JRi(iQ|GdD3k iRlguFJ&Qq#L4e6fkc;KR{7DT!ZJj$i{ysNVU<3eoo)=O8 delta 148 zcmV;F0Birp1dIis0)L7DB8LG80uTWhwWXEjsWeIr3JVAX5RAdl-=sAn09tDrRti!g z32AL%XJs#NZf9yk3J~4dS8W0*W(2N@l&U@DgdiA!rHID|A`W;-Qc`41Qf@+GOLcE_ zC;%|I`i1B7F_CG*65rjm7)2&x&jJ_P@(6C<>Hf5MY*IG!o=u`7nP{1JKc( WJ3Ib9H&uWNP3#q5k?4X5F#!M&5m@^G delta 154 zcmcb~I*D}wQ~d-+rCvr3CILo?ZA+&00OufEMmGW+%=FFB@@cKzykb?Vdmuo@=3+~u`*tD(u%7b_7jSHE& zSl$*DF425Yw&SwB6oUY>1f!847t4qFlNx}QP560r;W0x6Mq!B9#9jdwiHQ&~CIDpQ BIko@* diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto index 5ead9dc8489912b9df1331cc6e146ef9eba8e08c..3fc737c67af33e87d7779eb3ab9d224c5f7b9d6f 100644 GIT binary patch delta 194 zcmV;z06qWm1iA&F0)MyxBDDbs0uTWh=%kLSm^Dfb3JVAX5aW!%#;7nV09u#<8kGSG zjsYSGVRd9_Z!c|dGirYdKwv87$cz8GXn5JpR6|S3ax`jR`Ft^glD%$o|Bxca`fskg z6KMp&%#ZDM8}l^jem@OmZi!2M~q~BD&d>O~jEJ01yEf0mxERC;$Ke delta 121 zcmV-<0EYj%1@Z)-0&;O8ZwLYq0T{QXmFB55N(~AN2m}!0jKIdIFe(6AQyNhUOCkwj zb!2I8FKuu$YCH-MU@GRwi~qZ5c-hTVLrcnX81kuti3cJFb#+BXLv2GS05IJ5*!b}= bS`d6Of|9*%bN`Sc#`J$5CIqgly@%L diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto index 0164f1ced544a60e66f29eca6b3942c5fccb43eb..8e4e60f092cbce0d3ff551c6001c9220733ed1f2 100644 GIT binary patch delta 80 zcmeBUJ;}0w$`TT7=fjT#|I(~cu7)HWKB|TLSjpG zZ*(XCFuD4L=kqaI5McI^8*bQ(KtY8-NV6|kfEoZ00x}T_1P}0^l7J8a7?AnZp~f*F E0r0If^8f$< diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto index 0ab853721443537931a12d06dcfbfe9b03f243d2..fb873d68e0613c795b4b9bc5b410910ecf0d16e9 100644 GIT binary patch delta 223 zcmbQhdYyFvQ~gy&rAv$)OahD&ua@+!nqlh2#>K+HV#E-&hf!)WBUcZj5@%UvN@~7- zZh=WwEtf;wqKd!EPG0jao%d;ZtTWG1oqz|TGN}fCzg;WQ<1@>9wq=Iy9cgKy%WqFk z{}K?b%j4!|>=Lu_=d!L85BFyYn}18}|GG^=i8Cdv(xo!J!Z#vAgTY|$|2NM+8wM#j z#TA8|bP})iDOb>^^MTR(|EdyY!gmVm^Dfb3JVAX5aW!%#;7nl09u#<8kGSG zjsYSGVRd9_Z!c|dGirYdKwv87$cz8GXn5JpR6|S3ax`jR`Ft^glD%$o|Bxca`fskg z6KMp&%#ZDM8}l^jem@OmZi!2M~q~BD&d>O~jEJ01yEf0n|lQI{*Lx delta 121 zcmV-<0EYj%1@Z)-0&;O8ZwLYq0T{ZamFB55N(~AN2m}!0jKIdIFggHQQyNhUOCkwj zb!2I8FKuu$YCH-MU@GRwi~qZ5c-hTVLrcnX81kuti3cJFb#+BXLv2GS05IJ5*!b}= bS`d6Of|9*%bN`Sc#`J$5CIqgn`TT7=fjT#|I(~cu7)HWKB|TLSjpG zZ*(XCFuD4L=kqaI5McI^8*bQ(KtY8-NV6|kfEoZ00x}T_1P}0^l7J8a7?AnZp~f*F E0rku@{r~^~ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto index b499ac65184c04249222e4c1e3dd909b2540120e..3b02487fab3bc22a69ded13aa76624272a0baa5a 100644 GIT binary patch delta 223 zcmbQhdYyFvQ~gy&rAv$)OahD&ZK+H;=~ZOhf!)WBUcZj5@%UvN@~7- zZh=WwEtf;wqKd!EPG0jao%d;ZtTWG1oqz|TGN}fCzg;WQ<1@>9wq=Iy9cgKy%WqFk z{}K?b%j4!|>=Lu_=d!L85BFyYn}18}|GG^=i8Cdv(xo!J!Z#vAgTY|$|2NM+8wM#j z#TA8|bP})iDOb>^^MTR(|EdyYYm^Dfb3JVAX5aW!%#;7n#09u#<8kGSG zjsYSGVRd9_Z!c|dGirYdKwv87$cz8GXn5JpR6|S3ax`jR`Ft^glD%$o|Bxca`fskg z6KMp&%#ZDM8}l^jem@OmZi!2M~q~BD&d>O~jEJ01yEf0pK`PP5=M^ delta 121 zcmV-<0EYj%1@Z)-0&;O8ZwLYq0T{idmFB55N(~AN2m}!0jKIdIFiHSgQyNhUOCkwj zb!2I8FKuu$YCH-MU@GRwi~qZ5c-hTVLrcnX81kuti3cJFb#+BXLv2GS05IJ5*!b}= bS`d6Of|9*%bN`Sc#`J$5CIqgq0=t_ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto index 856ab1f68106b184d57ea390428b9030669076d3..8b4519ded200208625392b96096ceb888047fe22 100644 GIT binary patch delta 80 zcmeBUJ;}0w$7%oB#j- delta 150 zcmV;H0BQfp1dauu0)LDFB8dSA0uTWhzNMAssWeIt3JnMZ5RAdl-=sB40tf+GYZ_Jx zQX&ayZDD6+FK}*WYC{ST-Pu=d0x4z$u8EYYJ>`TT7=fjT#|I(~cu7)HWKB|TLSjpG zZ*(XCFuD4L=kqaI5McI^8*bQ(KtY8-NV6|kfEoZ00x}T_1P}0^l7J8a7?AnZp~f*F E0seb65dZ)H diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto index 4788c508ca43fd658c661d3b4f5962f82fc3538e..3a8ca89f28430d6b124e464c9cf66f7e98e8703b 100644 GIT binary patch delta 225 zcmbQldXselQ~h;Dr7MgaOahD&AC~m3nqlh2!NtbG;>E_CG*65rjm7)2&x&jJ_P@(6C<>Hf5MY*IG!o=u`7nP{1JKc( WJ3Ib9H&uWNP3#q5k?4X5F#!NDqFE&X delta 154 zcmcb~I*D}wQ~d-+rCvr3CILo?{Y$4lTWR9O!NtbG;>E00OufEMmGW+%=FFB@@cKzykb?Vdmuo@=3+~u`*tD(u%7b_7jSHE& zSl$*DF425Yw&SwB6oUY>1f!847t4qFlNx}QP560r;W0x6Mq!B9#9jdwiHQ&~CIETQ BIp6>Q diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto index 57c32011aab503e0cf8b8126b09d876c381cf884..5d768a8c9e04e5248ad5ef6cf6e9bec4b6ce152a 100644 GIT binary patch delta 153 zcmV;K0A~O21f>O_0%4;8BA@{X0uTfk>zBFIz%fD)2(Hnb?ej1Yp}?7pk})6wT7Ur> zehPXb3TbU&XJs#HaAjv|Y6?J9*)zfo8U)VSB$@R`rIaq06AR6G9PRr24k?vw!Qjmp zu-`S(-KZ*)P68M#7{mC) H8UPppyYE3S delta 100 zcmV-q0Gt1%1@Hu*0#0utZ3qGo1Q_d=xzxZhLJ$b9(VXq`Fc6`@nT(P#AOTuV8cYgG zA_{43VP|D8YH(#|YB~xKRM|7a4H^W_*(90uN2Qc57{0WLg#%I`lVJiF3JG@>Z`1nq G9vT2=Z6#g+ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto index 4089f263de877823941b4fa7a84d36189b001609..65e652e8123adbe4429337a11a5ca8725aa474d1 100644 GIT binary patch delta 685 zcmbQtagK8VQ~eoMrIV~2Oad$tZ>I0Oa=_3@fMfl|Id4B32rN1}6S5w6B!U>CWPH+mGR(sACs#9x)i*P8IUL=TyUp#z z9j;)R$%lU5SR~J`YI5~^`mS|HE_dIlUY=wg;b|wmL9HitMf!^^A*IfdSB$G{j(lhj z|D>HhbDDsli^R6a&F7hw_*{HKL$kfzL&6I}LR~{Nm<*OZcscv6VU)t9jMx8swkP|o zTy6ZVSz}`myU^CPt79H5lM!_Nvef!SwSW|ZlEB-Yk^0+Me9gKYY&Lg2kdBtx!N|24 z?#1-XG%GfD$ExsfH;0}49%p5PxT-vS{PVMYqXKd#i!#gC=WsbRNuO;xb6xVL&(qG< zx6Tq%)EBq8uGS5=)L7_sTW`XI!kMD}Z>P^&*)Ms+<6w0~{14ts7yF|YOgdN+SEzk5 zEqI~C#I@63vRg0(DSUeW`3PkxTF$njd%e?{V1_}`w@+ztD?KWopGVvt~z zI?u?p3+TYa(v-}6{rcPjW2}+jut?D3mRt~5d0~i`Ux05|WPTPX(Cas|&s)E9?`zqk zlU_VJ9xIXjHF;9*nXPXB3s3HnnU&dn@~ilg*(;m>-guR9%(*vj4okg{!{YCe2mjn+ z+t;6PL{8%Hk0Vdn5P=>64Rr>1sIOXe<(|yjikRCqyBTAOPb~Rt`M7R>S$OTk{+gW= eHq{zq3v?qvE|w4TCp8E#N_@RB`^f=w1x5h(NGHJn delta 501 zcmX@dIhkVtQ~g91r9Ku8CIJ?SH`8}sIbi4{z_I?~oVTA11Qs2b*)z#df-&kHvycdv zP*PE8Nvc9wYEfoMX|Y0SUTLn>GDfa`MkUV7+{E-${erx7Edd^@XL?>y3wD32UNs@@ zR`4l<1_3Mf&}?t_knjSBoq`_MWP%u?WPH+mGR(sA6D|EbCpR+*)!T3hOn4krmHFkH z8F$^}*=}2>BucFLeL7Q#!zZ`Iry|8WK!eF(_rDX{z8OXdoKN#=h>X)(uDbDg!?FxH z0VxIvMkN6kbDt|`^1V76-q!G}dcb-?s)v!Q6YjS3%rq;mP}h*issQJ*3P*<>VjgRl zgLne+lAJ3OomrjS9jn48M>5NUT(bB5mDw&^PF$She!8K;MSZ@+sja8Juvst#DZI)u zY0+w#ZN_XH`c7$WL+6dna@@TMo>OC2%+%}KR4FgTAl1dlRieb1SelZVub*3Bj5RK+HBE=BZ!7*8yNlJDlBi9l}CC;+U zl+=9v+yWCT?!qb;zks|X=gLIq$v#Z-^;ujF6F)Ob9=Mv~ce1ik{(rJLG)XBiD6CC9cfe#Pn4C ztOC{4bS;7HUDjo@LKa$PW^Irv{WhW7ph3Wj&E2soJlxIUgsjIMiOCO`6ziKAxg1Ul zyK$Upurqt5-Ja0d=w#o%@VusV*V0=Dto_WdWM%B|Ugdc{(BX2I)T;KM-H%QyF8JlX zKtjO${`m*@rn0B#Uyzu%cKS{kWkkU4Q7L74_?lGYZ#?)*7e7p zciOv@M4iKaDD^zFVB52W;gezB8b#@_$r`*&=LDq~lmy=HjMU%8;%nCJV6(aFfpoM~ z9aj~?OR4Euz(5VTX?%!Risjr*m6>1Nmrl`}F3f$lQs(WiKYW@~a}Pc^E3x6e>7~0X zv?ez)OQcF1{&D0fTabe2m9=}n&4`(@E!kLU;eVOwMmJpZ3e=Omc6MvO{kO~00~~@M z7`bi(;}jBt1$j8a4>_Wtfp~)%5{O4Pp1y0{k;~n8 zs+T93M|j#vZ&2%rU6KA`OGv46g=LzDE`rZd+iZ~8p#Y<=r2F-3iGo9k-ba7&GaUbpooOemZw z>i>57yp{cuH#`njSH%C|y>ziZYQdy~C2@t?C)0u#LQ;bTQ;@=^_g~&K3(Y%!vGe5T zD2p7gW&Kwqo`wJIS;M1& delta 676 zcmZ3?)5x`eN%}vl(jQh1CILo?x6^lCIbi6;#>K+HBE=B(jCHa!lT>{nSH2QwS!POV zzJ6|ji4}WjwzqpoctMnmPl~61guS1uWu!?+T|rPlP?oDf+0g)1 zZtb_7U2Xe=>`I@$m00upbY_qO_btBAS#N~qT|c7y$M5EE^9c{7Uh<{yTye?t2Gc2{ z*>9v6q*gO>O<`2x%FInnPu0=SDo9P&65z3Vrsoy4VE4D`RTI)~1)nl#5U}D3bq$HE z3UDr~aCF!y=y6SEvM94+y)Bo(?6Pf#-Mows?B3J2CUm|09*I+1Pkmui;_%5W@u^7h z4$xpW*!}Oswr_?}0@a*516HdPGp?MsN+*6oVxSa*1f!CGi@DF0Gx=Vf4R33BRy|<7 zAmzj51$7YEJy}*<0wFhz5AjN|oV%$q^Q-&PDS8t7wsf{K2Sq6O|68o|S8KU87jsAQ z>kamATiU)zX6L2maF&bZU;gz~4(P*Wj9mSUN}OOH>KEkU@EB|6OfnWT$$+1>g4WN6+StaRX!EylD+S*%y!vw;^G|l(+w3a>hmGNY{3+y z@G8rsMXP1D8MAHZJEgS^oi{eiarY*8PK{kLQ?GARrMwh_ksue#hxwBlfa$Kkp>OUX SQw2td(8OK=7KsTEAtnH^uLOz! diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto index d0db77285f2461535afc6ca457ec6e987dea5904..86c1025b10eb893e793d2fa1cd08ee34ce75bf99 100644 GIT binary patch delta 258 zcmV+d0sa2)1+@mC0wl8nBCrAo0uTWh?w7gLz%fb>3JnMZ5aW!%#;7nN0tf+Gkphz> z0ziMy0SdYSA_-x2WNB|NZE!Ox5VwjucA8Y7IcaLJ8g=%Ni!gu?K%x;y+8$C0cX3oo zPEbu&S#N5C0SZ8Wvj?89xxMQh#ggda$6Xj>^<$E4%(X`Uaml(InrVy4^%ta@se}F4 z>S)G8jc%L-e@sB5_gTUG+6KOlV8k96!}wCf3JnMZ5aW!%#;7nN0tf+G%mI@m z0ziL?0Sa^?31M|)X>TuWa5E|p3_9j6N?M@1_Is+3X4+HAFn|z1wi!t36;caEabaV6 zcSdA-NK9%y3J~B8QQjxxgLHU9mt+jZ8j%>jw26fSA_z=vbWC_;OHe2PFuVT9w)Qbv r5MH8q{iey*OLd;|r(Ht~#Toz@0U{7YH%txG%x_AGfbDz?s^A6CaJESN diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto index c23efb59c6657f0bd0887956767b8fc9bfa5ac26..5474d6c1e5d6c13c717d35a34ad7dcc4571790d5 100644 GIT binary patch delta 528 zcmV+r0`L8#2ha$h0zl3LBFh8_0uTWh@0YpMz%fb<3JVAX5RAdl-=sAn09vjD8mR#a zqyZucc4=f~Z!c|dG&&1$dPGi8Zel}uVMCKT0v~^B3P6$b0U5y6WKPL>fgk^4Hv#lo z3Q_ZzzJ79bM3maMJ@&Op_1A!+7q-|cD|xQkBRr1Cx1`8|Vh8<;{`EW=lMooT6`5_S|H6u_`L2bx*`=r zR`?=};W!4ov;gukZmc02R+A_V0?rW{03s0Wxmho^1Wh)JKs>XG;2T>SehPXb3TbU& zXJs#HaAjv|Y6?J9*)zfo8U)VSB$@R`rIaq06AR6G9PRr24k?vw!Qjmpu-`S(-KZ*) zZvz-V7{mC)8UPppG7$;{ S@Sl=^5CItV*qh|QHy{C3)ZFO+ delta 384 zcmV-`0e}9`2&4y~0y?4tBA){Y0uTWh@0YpMz%fb<3JVAX5RAdl-=sAn09t|r8gUA5 zA_;bBWMywJZE!R?2UTlJM^smElRyF=e>n;eHpNgS3oGr3iiW>ZK6T~o7_9rtX;L5y z+74Bk>=K^W#3TGp+50z;;Tq`bcw|dZC<8FN{>ZlWFBn%N+JqrZDD6+FKTdQXKFeM z5LDSS!VMY(&e4FHXu*_qayt(rz;8rh-2%pKkbBu^cibzWo!v| e7H`w~^&T1kG7$;{@Sl=^5CIsEfR3HQH6Q_uF_f+V diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto index 58b76fe6108b42f5f9e884cfabf09b00865ecfd4..d716347776e27149c8f642ac4f21b5e39770b455 100644 GIT binary patch delta 1026 zcmdnb^@V2vlk6uBrS}{hOahD&AExiTa=_4wgNu!WMT?1pG3q+UWLYM0iw}%kw;7c< zGjkKuQ}qk-(zOJ(cUhOs3R!5GnYBTx^xK4Pg9ZUB?!qb;zks|X=gLH9hZC|McO)if zFe%nIGjcf`-ITk{?Zq9gV42B>e&1Lm&#r26^?UlRbw@6D->F`nWFFyZC%r+fCw4{p zi!C9g&XHG)t89*ZXb=CSoj!A#fS`-Sw#UuqnU(lld_qIBz1>5?3qnF&Lo}ESmOXem z`>kP=!ljJY|9rM5`>kAU{HwO{x4Ev?4Y$--=yh9f!i2(^qW*8E&s*6qdBfvibw&IS z-b)wzqZUj$SQ1yLeKIY0p~S?s(_gY%Fa;@mdjI7;v(UWr7duaWj;#v6L zp4Hq9`@27D&y`}3V3az~$h8aTz{Jv&%zXX&+yY~)A@8tA(Bqa|5LbC&h?if0Z&+l0 z7AVl`H?z-MzjN_>$QxoB!T;m2u3u zH*XG0y^q7PZhu*L?Zf_>of9_I8e_F_WU+YYaQrPd+Bp|dYeQIE}6Nsygz*2ez!$4V<^a45fF zJ}vCVai+n}?3H$VLT96sefz@mn$}%QZym7q zGry9RvBP_n=lMW~%Ux2d+JAOGI<2_im-_+<0rUIkAKaVDo}zyNk|Yqp3=L&wcqpHB z{jukr_AVt+=dd42Jr6C|_H1GJWSF-`QQBd$1~1b&L2SWnB*?|`Vg95BV6OgpWA>8+ S<_e4up^3c$EE3-!LQDV@(Y1g8 delta 724 zcmeyuv!81Llk8qLrCn?sOahD&AExiTa=_4wgNu!WMT?1pF=`RpWLYM0lVyxt{ftVS znYoGSsrm(Z=~@CjR?qajq89A_R=sLM+O6PI1`PsM?4jA-?jhj?4m$-suE|W!VN$HO z;S!keIH)S~%QrLby2-QMwoXZuSo8aIrV@uwZi!Dtig$nplfmwPC$@bvj1oAX=G71x zr?p&lnbvC@M;aT;7^@3CnBUdNfG3l9UR$QU3A(2%9 z&Se#j4m-p=)-VV01mq<-S0*~MI=MSmg-;G-mIt|H@B1sWUACOKILG~TLxqd_e2G(A zPkmvtUB zVE3NBHKFU}_dr4$$##rVgogAPYi?z17{mC)8UPpp+0;n@ delta 144 zcmV;B0B`@h1&9Tp0)K`9B7*@40uTWh@t3*Oz%fb<3JVAX5aW!%#;7nV09t1f7YY?~ zVQ^_>ZXk4WX>)XGadl-Nb75>{8cYgGA_{43VP|D8YH(#|YB~xKRM|7a4H^W_*(90u yN2Qc57{0WLg#%I`PyVAK{VJy`3Im8^>##rVgogAPYi?z12?=)=Z`1nq9vT4eK{Xrz diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto index 0fdd517aea5bbbea52e6479d1308202f8b8ff4a9..0f371bcee6a2ec00c11f31ed9921fc4b4c4b33e3 100644 GIT binary patch delta 655 zcmdnZ@r`oO=qr4-t>9e+4|O5Vv73WHrLg<;g%W;y>9DGm{2%V)c@`Dc`N%R zZ+IN6u89A^d+B0-)PhL|OX3Q(Po@Pgl$f}7`b%~TrXYn+@4vif7MgedV&}=vQ5HE~ z%lfZKJPZHZvzohMfA?qYxl#-gj8f+rxpn~^m{^*UnXg};TVRYeHdvwx^N5^9&lD{TT%008y?SJ9PT{5#WyH9=4 zyJk0IO!0{&pDiEP?Jo8+<_e4e(QO-= delta 467 zcmeyyxtn7FlgdsOrEM%6OahD&pQi7;a=_4wpNp4+MWE;4h5JiPjhHwXqo%V=R$+25 zS;olK(inVXoNs$Y&#N9-8g#9ui*Quv5_E zn#|-mOp5h3Tmlmw2UTT$`DVslH+i<()+vb+Ykr^3RO0Z-E%B*H@ea^nGT8m^#I|pS zQ3B`Fyc#0ow3e%GeBQ7uLry@7L4r|9z{T9>%9(tx&W5)&JgXkCUXbcxYCwIrH@X3wL@*tP&eSc-P%a#)t=eVD4 zsBlrAFL7$?sV{66OhF2-vP@dET4tLu+lIbVTHDZhW3wE0Z-VF4*cCJN`ZiU{OEE}w zF>;kCaVD0gWajJV78qj<0f%jp9u>0r Jd&pFQ5dalpv?Blj diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto index 2963f1dc6378e1722ab873d1523dbe4d7917e2de..61ccd6c1ec05e3734e4bfa8d494fb1d8b36b3a7f 100644 GIT binary patch delta 992 zcmaFC*~PPfslJ0lsg;9+Nq|w}^Yoop4j6i|aj|f)7%@b>XO~*Z$hCw~iL)#-B{g3^ zx4^`TyRgc|FCZ_;xiZl?O2#L}(?7!A&($*0B&4n&C?F`y)iA;`%`~g1#4Ia|%VFYY zM#%$LQ~XX=Hp>4`HfQ`2#TEE@#=g3uQkN;Ww%dN&>iPA0eZwO0Z8x;EE7#ppw&^>u zeaVTYB=*1E|GwHtP8N{Z_PF^xbC5#gwigq+-gbBeEVT|14xN2*ih69mN`mZ!vo`j( zKUP{XOEE|=O1)v^y3VM?m6@BEo~oZ!keaR~u)WK=Y*xrZ%gn3|Ql;M}bQ?4XSh2Y~ zR)vSVIh>I7xFZq7F!>~te0?(`m&0jcH;yw6c4n`%+Y>q)o$T8ep4YVQT6*h%wV(Nw ztc)Grt31yKI$Z9OTGjru`_XB|1;5-ENC=qUKmXv~RQ4483lbC8PJhX+#OLA@8k+6x z9ui&<66zYF!ECVX!OPii4Wks!y8hVnPJ5Skpsi)ZBv)&Pr^!Z+hwO3N8PCip1y0{k;~n8s+T93M|j#v zZ&2%rU6KA`OGv46OCap{;9I$2?jlBUt}ssr89!0jvSLgOO`9++XRLY4C)xli%a4Y!FwKhmU`Lwr^BG zE-<0HyKANC=w|BW=;qtItJK*?m6#WJ_!-)kxEg2Wa5*$dpKUsGUGk>S)6Ukn&Jt79 z7q_{t)(y9;(OBqpTW`XI!kMD}Z>P^&*)Ms+<6w0~{14ts7yF|YOgdN+SEzk5EqEa$ z@mMegDSUeW`3PkxTF$njd%e?{V1_}`w@+ztD?KWong#fgz17t4qFlNx|| Y_Unz=PY#$XK!qmu3b06gg9tGJ0LpZqYXATM delta 682 zcmeC;dBM4W$@m$o(qmQ*CILo?&(n8aIbi6;#>K+HV#E-2mQ|{dD_@DTEHfoFUq83N z#ELyM+uJ=PykN2=lYG4;mw?&P099`7x1C*W`-ALCpT3n?^ZRsWkOKEDzR+23gyvm8 zqWs72=5O-}52ar6rSDvE$@B)(DWlnMq!^@DGjdH~RN~6aO-xVK&niew*An2ddZyQxicZUvt*Xb`aC3Uv*MtO{^0t8jGKDd=%cCWs+Q#>Xp2$INUp8?$)5EtkOT zvTcXmyo?X*-qW`xbiMo@iBnroePL7L@X0OlsYvk-&|o&${qMxKZ-!9<)toy6R;v^< zuAH|@Cw@X=pcI1yqmqD&xzCj|`Cgq3Z)eb>s7fWf^h;IQ-Vb$khpVOnPP-N(k=|^H{?i#1oL0^wxREo);4tB*eu80o8UP$cEwD+zD3 Vxra;@7$HIvdj+^yBql(_m;k{x1rh)N diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto index ed346f2c37e10fc60f0ba162c5f4460e1b0e4b73..92d4a49d7528a1b2591c80ff62df95346db841d8 100644 GIT binary patch delta 255 zcmVp*d-4uo`vtkc%*Y5I~|4NZKA!3U_f-N={Hs zR#|Uqg8>Raf3pXkuerVJ9mSI9;>TSWWA$T_ZOpYs|8dE>9GYp1$@Leco2i5S*y?D; zLyc~n1b<9GqxV_C{MrV-k6^?e7{mBd#N`Ge4n#~6`5_ zS|F;b)ZQHJcwF0jy8&Et$fWZ*<9@$(SAF4+e7TUaeKQ&WA`tDlSueH(O*V@_JhO`6 F8(aJ!Z{7d^ delta 186 zcmV;r07d_b2E_%S0wKczBESI%0uTWh^q0BRz%fb<3JVAX5aW!%#;7nl09vDyAp#hG ziUA6AA_-x2WNB|NZE!Ox5DYrzE=pRUyY_pkkY?Ib$}oTsK(-l3>J?H8MsZ#TtSiy)=PDs@~2%x48L^n(g)XZ;6iGb~V465J-(4`7U2LJ#7 diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto index 22bff7e2165b9aa5359a81d4d98d6806ba93beb6..0f8229653be697d2d1463703393dded6f3d7c306 100644 GIT binary patch delta 575 zcmV-F0>J&h2kQu+0$b?>BIX1L0uTWh^_RKSz%fb>3JnMZ5RAdl-=sA<0tf+G#{?1= z3Kerq{xC|2mOow^*kAq5E!=OgUHUcR1;O3(Ud1$ZzNzH zkj*?l+wpli0~!Dr0UGQ93fBQ53TbU&XJs#Ha3y7DDiF7dJ9e5>p*d-4uo`vtkc%*Y z5IP1&L3&qLMnK3NNZc5c=>j2tg8>Ra%M(Tj%z!>N>MMs}iGe~thoR3YJBp>+z&lPi z)M{wBOR7oFQ9#p*8mfo+i{i^6p!!Fk7!Wt#&*0vb2V^hM7?G`)=?5YXL`+pxYfDE| zS8!BSMN}vQFs9(?o9!`LAk9ViyzVQyA{9ec_#%wqI0n450P-DO=WiM)QWoK$?3P4oZGr|oT1kTwcne|7d zlrEPO3(a{P?fU!2S5{~VVx*hOw|Cu2&vi!1H^x=BbH02l!>5efwGpOSzO N0T}hzo8-VZAOVLq@d*F` delta 411 zcmV;M0c8H`2)_rQ0#&^OBDw3JnMZ5RAdl-=sA<0tf+Gn*$OT z3Ker;0CtozGpQXmW34po}$5}wz@Bm7R;`!|r`8tD#axv0`L z*aFHjo9r3@8mj>clmQ|NX>DO=WiM)QWoIf73_9j6N?M@1_Is+3X4+HAFn|y`3ROi^ zS$a@Ic6dQRxe-X#98v&U985}5EH*ZiC<7ONJqi$;cDBPtN;AN_ypF6@uOGY^%C*Y$ z1|kSdZFEd{WJ^#e12DV($hP(|S`d2)xlpSla{;NIsw`iSVNn_Y7y%*>L^n*-%x_AG zfbDz?s^A6C8cYgGA_{43VP|D8YH(#|YB~xKRM|7a4H^W_*(90uN2Qc57{0WLg#%JH zAW#0IBK<0-D+&XMW9zU#?SzK(8EbB3YzcQ3Z`1nq9vT2L5efwGpOSzO0T_>fj-A3a FAOTBEo=5-y diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto index 6fda1fcbb904c96018267172054a496b360d073b..d2624e452f0604b84cafed4b2aeacd3e57db41eb 100644 GIT binary patch delta 1051 zcmaFHHJf(cTOahD&-=^=pa=_4wjf;hY#fc%RfpfAnlY_+vMy}h8N}QRw ziRr2O1$pUO0^7T+%Vvcvw9L%fAXWNpLbpMKfE9OPm5X0MUXpWVqO-#ZS&ussllz$z z>zf(59FA_v-RAb<4p*?u4pm%Hy&FHbU$@U)ZOpw<(+BK^gd zkW%N!E5=neM?SQNf6`8$IZZ&&MPl3I=JU)-d@eqrq1oQjofp{^ksOa{vyyqx{k zFiPQ4#_NAR+mroPt~UPGtg$hOU1;mt)iIBj$q3eeS!#WvT0n|HN#O0yNd0XrzGmGH zHk-R1NJmTUVC32i_g8vmniZS7V^w&#o5N0ikF&BtTvZ-E{`uLyQ31J8GCuC^T4_4E znR+?8`S$KAb@ovu<^>*phPEZH##uRB4o%W$o6cO9yy^3_v-PdB#1!?#ZLX_z!!7GI z7JA**n=qkprl|kh>GM|hOWyD}SX~kSgZI+K{-_0$4wl3fYM)FCUMMkf?ev%I7ED13 zpWc6Y&nz_W{Kd|bpQ9{tyq5J}k$4vVw`VnX!~X8i+H<8CBp9X6Gji<$x;?QpB{N?? zx4;-{oH#5JtoOJj7sORw7~kW&`x23ahz$e zGkc}op3vFoWZ%BW_pdi*KRIBozz7kV*ek#y@eLxx1OToxy*D zx$4H}4a+j*1f&=w7?lKE%zdt$$@l7Pcw57>>H+HosUAkIPPk*zGt;cNLR~{5s{)+M zDjXelh?HJS7y6xIdO50`{{-X7xnoPr?#H@ z!e+q~r0^=sq(!S`wi&Z+=sTsg4V^bO%W?N6cutL7F;lN^Q>DBVgH#tISBVm5Vrfcd zzJ6|jG1d@p*e2=mN;HVutuQgUs@yH5%EKqimP_CPZ{WRD^~cR670%OBc#cXe^H5Vxq}@3NEEyi4bOS{~~RRE#|g3c2!?ILk6qQbCR}frtF$A1w0qmRtg6 zM*~#3wcmDjwe1hGD}DMF9Ogj^+_(5bXT1@ccm0U+AHSQw%_lsRddZi*bHydo8%(E+ zX1@V?b2TH^6hjQv3uG`kc;KR{7DVKRNCLrH}{aK R0wY9dVy^&;!~}>C698mr8NL7j diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto index 6dc70c84a466b72619d68632f259f10639b408b9..f95331ef6d6540f3604f825ebf77030052234381 100644 GIT binary patch delta 170 zcmV;b09F6(1fm6?0)L##rVgogAPYi?z17{mC)c&0!wTnY6t=l0T}m}xzxZhN(~AN2m}!0jKIdIFiHSgP8v)KN+Jqr zZDD6+FKTdQXKFeM5LDSS!VMY(&e4FAd_AK7zzn@7H`w~^&T1k DPCX&@ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto index 39a12a83cf7cd0f7633fc2b7ee4280e93d33a885..a4e839f7ccaeb575c8ee1b43e37278875b7bc343 100644 GIT binary patch delta 712 zcmbQlah7udQ~haHr4y_iOahD&Kc?@za=_4wpNp4+MWE;4h5JiPy_h%{qgJvCiEs%e z6_u8xDwL%bWtNl{E0pGy=1P5FB6)UIldIp;cda{ex%*D_@+9*JPdn)iYCW+l(qC)|DRqv#Vq9f&KdZKWU%bP%h_)YqZBS>y#D92J=t&N zYU6Ls8XJSyg|@C;9rI|Jj9~qjrPe2^1*9011m5n9)ZfP9Yu4>xv$^YmbhOkCMy}0p zKc;75g zfrp==ZHcRKRt}d#ll0l9GuI_=`aJDyed{bSMSXFb>uTL_%X*E4UbpooOemZw>i>57 zyp{cuH#`njSH%C|y>ziZYQdy~C2@t?C)0u#N=#fk{Uy5vQ;@=^_g~&K3(Y%!vGe5T zD2p7gW&Kwqo`wJIS$zPKv<(}E<_P_AtE}2=G-6y|_ zFPXiv`R|Qa8ONM^^X9PB`#3EA9(nN3Ew+9A2}k544*xjvlno<37~t`-YSoo{GH)wl zZr9lEW{fF5vE;Mm2 zPZ=}_Sh0s@d%K5(7dY$`^tdJy#1JLpljf6Q7M7oA>E{_fxtU3@-iAwH!sDQ-%rD=} zxa%g*cH257QDV*S)0s*fKDi}66)D~U8cYVe|DD+O%`i&fe41B7WSrJ=)s4>^mSxBZ zNHIt-Dharl`&>Db@73AxwuWcb1J(;tJ&atPaL1)*rde@?x`sqn1vr;gI6CYQ^H{?i z#1oL0|EqlD+S*%y!vw;^G|l(+w3a>hmQ|Z9Vmc&4MXN;Z>GN zi&o2QGiKY+cS>s;I&W;2oTsPo9F>|Vv2ROfD>G6UFu=ng rZc)YGWhbwBm(KgNJk}Yg7;6|9339P~m_Mlj7`OcmeRB_)Dlh^7DSy8e diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto index 915d255bce2dd43c1cc34d919dadaf48f02d3a10..2c1eefc57bb261f5b3fb0fac475c68cc548a0ef3 100644 GIT binary patch delta 973 zcmZqXTFSG4Np>-Z(gF?+CILo?pVN0Ew!MCZwVO!D6Bx$c&-P2Y*_OHMQ;vH$J<_ti#nvVg?4$Ia)N zgA^LKy_nGTw!J1~;bw(ww%-qEE zRQ;@i`qXqSf$d$^WwSyST4rW#kShH)q1&KAz>3Y?u_`>=&EbTs#~q0vhA0^yuOJ;W zvsAr0=ZaEQpL`$RnqVVU1(~1jzxi65Y7cjqn{=vPe>?!&eBqpw%{*qmZ z&&4M+G~3%fB)lLb)HOtd*u;Cx3Tz|bvxK>?s^~{Emg-=h45}_dKNIiLv9)$;+0}KcT;6% z{a5#;Q}m__bDyo0dHd@RpXSuugAdM1Y`AZF>Fx?G|9^{>{%S4P=3?$he!ao|ZA;r1 z$?Uw;9Erm}jyz=xQV_kecJH?tF;liB8!IjRFEicfhHGAdda~EfZtb`Kc6oY$L;M3H z*KJ@LfP{EK9%^_?!vh>SWk5oG@-1e?dQiw7-ITk{?Zq9gV42B>e&1Lm&#r26^?UlR zbw@6D->F`nWFFyZC%r+fCw4{pi!C9g&XHG)t89*ZXb=CSoj!A#fS?N`fnWqI6Fguq zWxW39vpv~w<&h*&2W#UXQsi^%uarf zv$8>4RUSV6`Psfv0lAawS>)?;xEz|K&o-U8E_u`EX=m$OXNf85i`!gR>xNruEcCjq zH(^5IOi};0)90=1m%QO|u(~4t2k)he{ZR`h9W03})IOOOybzK?ESQ26KE40)o>^$# z`HP(=KSx>QcrEL{BJnKzZ_jG(hW*{2wdaCD-bj#(<-`0*4Z!^Q^~P+8CkM}G{Xur6Pv1(c`F%PwNP+tnU+AniLi4U4QU2q1^SAkghf**3(s!=7WO{?? zl+o-rQVde78M&q~Dsg4zCZ?zA=w}tArfUiCSUuD8idwMyTlK05X}5w;88ir3afP~u zL{=g94CNo)_S+U-hOJH`{w!>~-#s_xq>01-JUVe|nsja8Juqko)0(i=x8V|)@HnU{^UF6g?z+jd-L_6i1P3CL zN0{IqIiKd$5E-YnTy^8~hGiLY0ysRd9I9QV@=6)x)YAz^C46r}Jf%cMoCWwsf!ZRk6twGEv& zHp_AMCU{PbT`^OyZ&Rhb6oZi<7t4qFlNx}@tiPde?jchJMu^bFUI7+~2@oMB0RLzC Aa{vGU diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto index 0857d50063f903794d9bf992f8883abec10a5fc4..a16dd6df977a5f8c0f2ff1ffd3f1b6cbd393635b 100644 GIT binary patch delta 251 zcmV4V`+40AZB4=b!=gCDA?(S$GS5z5efwGpOSzO0T{*SzUh-OAOQdi BY(xM6 delta 223 zcmV<503iSV2I2;w0wmx9BHaQA0uTfk?YsQK_cTHf2(Qtc?ej1YqQIGqk}((oTD_Ab z0%ZZjlZpZ`e_tXBX>DO=WiM)QWoK$n3J_fcWF6XcAAuAO{%|~JC#V>OgOH8`A__%l zV?#}4Wol?{C;%{E0LDE!3i ZpT{sV5efwGpOSzO0T|_=?X}V}AOWayT15Z= diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto index c504d4e19544c4bd31ef048d514dd5bff142e8bd..ea977f47587993eba446338fb2ff49bda2d6a024 100644 GIT binary patch delta 112 zcmey(`hj%;lhiv#rPqucOahD&?{@z=^xedZjf;hYMT#Nn>SQSGTi$pK7utSyWl zXE-KLW>R($%gxWp$t+gL%q>VQO36$uQ79-aDlOJH^kK&NiDpKETr3~vPig=f_jJMA Ut(S}x7$HIvdj(h|oP?c-FrU`yR%32dzW$(Px%8hpHV0JdL$>Gx}76^B;I(EU!xy(ioZ8 zi@5_L2Ww17Ol@>bC<8Fl=i~12F*pKJAo<>(WX1dN|KEC)irX@0iLSi0p=P1v-@WPq e8ca`2-4z-DA`fO|b!TZ|bRcPAV|8q4b0`4lqh9?0 delta 247 zcmV1QGeMQCF~O=V?jXl^J2Fq@mqr}i;80#YD|oOBbRcA9W@&C|bZKvHWpf~5 xV`Fb^Z76SKVRB_4aAj<4Wo~q3b8&TLAaHeTc4=;5av*kZY;|ySVRC6V8QAHD$GS5z5efwGpOSzO0T{*SzUh-OAOVv= B5*q*j delta 43 zcmV+`0M!5Y1@{H8wgLtD5lFfhle+>V8T`cTpT{sV5efwGpOSzO0T|_=?X}V}AOWOj B621Tc diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto index 6a829d50da146d187de3af249e702e5cdae72a6e..7f51e47bfaeac60f0093de0cd0a9132de65bf664 100644 GIT binary patch delta 271 zcmcc3_ML43lgw8prB6&8OahD&A9w#b^xedZgNu!WMT?1pG3wT2875Pfe~eu6lMR{V z1%$YL^NW%)6#|O#GxMZYF-~q~(yp)Ja_Ii7J-5l=V%Vo1%ZUiOzWsAWOL{fx++Ya}lG-+6~ci9OrL z!zZ`IM}x`W^7F^$Am=Eg2pr875PfM~qzZlMR{V z`GvTB^NW%)6#|O#GxMZsC$}(Z*ZXq`^d@*tja@NQuWwVOyxXTavn9T6_`ii+iOV%3 z+1WQWH7g@egUMj_>@&;183rl1-*&ksRIuQV-G@!v%C9_lx8Asrsf*=pQQ;EJ2W2}h z+e15>RrWWNZBNZ13DmjWXX3~_aDbRchXZeetFb0`4iCK+7- delta 86 zcmV-c0IC1U1=9tf0wK`>BF+H_0uTWh^1J-P_cTfk3JVAX5aW!%#;7nV09vt=Ap$Z1 sf0I-KJ_UpUNX!V6mjWXh7Hw~AY-w{KX>D+2a%5>`bRckba&>bk0R8$MEdT%j diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto index 593a9f05c61dad081eab88928b0e1a5a1ee6dbb6..075ed3e8601ba361786bd4469d86c5d35576a7f1 100644 GIT binary patch delta 16 Ycmdnbx}SB!b|#La&-cBYY^cBp06-B3G5`Po delta 16 Ycmdnbx}SB!b|#Le3*K(MWTe0d06;YdMgRZ+ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto index 56a951829e281506e4dc36528cdeaa84f26ef8eb..0d84a192d4edbd592959f800f5b1aa44bdb4df66 100644 GIT binary patch delta 241 zcmdnZcAaejlhjovrAtg4OahD&Uv~dF^xedZjf;hY#fTwl&txekQ^p6A1DFh~dKi_s zGIJBtQ}we7Qq!|)xEx|xQe`(@v{y_CH8C|51-r;9}NbB%g-Ob`)C-XP_xA)G4gk+)KpW|yRj=* zRqB7TH$0`_VfTGO)HKm6YxhbqC`lC*@&;183rl1FP)+{U6}i9rOex3fA}<~<{o@-R${|_(@S?(X!-wJtR%&tq?3`Kn_85w zkdvC8nOj<{kei>AlUb}#l3!FBNZ13Dm;xgd3~_aDbRchXZeetFb0~nx>W{}aeheK} delta 92 zcmV-i0HgoT1=$6l0wLD{BGds00uTWh^}GDS_cTfk3JVAX5aW!%#;7nl09v<`Ap$Z2 ygaMOO0zL(V0Z7aUla~S`9u{qHY;0+BAZcxIWpZR`Wpp5Lb#ircD8lfV&yhC1h#^S; diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto index 5ee32d7d02b9e3e7db7b08d029f5c529c28cc805..eb31d0db2d2e7c1e521352275696b6517668efd5 100644 GIT binary patch delta 248 zcmVXOeg~|)92&v@i908QXu)>pJc`R@c-X>l#1IjXNj)7wV`IA%w5G7$;{@Sl=^5CIs)=f3HaF(3gzE@p@T delta 267 zcmV+m0rdWn2c!p}0wkgXBA){Y0uTWh_PhMT_cTfm3JnMZ5RAdl-=sA<0tf+GfCG~x z0%QV*0+WgYEfj@6CZe?>I zVPj)&ZEZVmWMOh;AaG@DY-MhAWpib> zQXrCf=*R`whPj7%%!IZ(I|xXwlIGwIQQjxxgLHU9mt-0MBO)4ba&KvFAY^ZDWn&<8 XVPk1@X&`1{Vs&g`b0~nx>W{}ax$j`# delta 193 zcmV;y06zcI2Db*F0wJ{mBC-Mq0uTWh_`CeV_cTfk3JVAX5aW!%#;7n#09uukAp$Z1 z;*(SYFadp&h5{>pPYMu?U`dr-sF^N~vUwjy@|>F(^|1f62OD}~b11^_n9q?mmOoDF diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto index 8e9929e92bde20ed04439e4bd0d18ce67f184e51..1d39e9a7348376603b55220176805136589c7b36 100644 GIT binary patch delta 97 zcmV-n0G|Jw29XA!0wa$CB8&nE0uTWh`MdnW_cTfm3JnMZ5RAdl-=sB40tf+G?UN${ zWdU`Qi2^2TbYXO5Aa8AHbaY{Dfr}Z~ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto index adb25a5f41f73f678187c070688af7c31a263f62..49543d8e70bd84475d7987ac296198df71522b87 100644 GIT binary patch delta 459 zcmX@c-pR3mN&F(C(m6&BCIJ=+Mkh87Mgc|%#;CoFLX&qesn$zPVdUy(RN~6aO-xVK z&niew&#LEgNYHwAqWk~ujEb9QL!7-&6`5qk|Ew`=nzT2s`2Pf@W54p(?G}wpw#~d6 zJM-I*!XM4E<~+J_IU{oCg>9Fj&iF<(N$l&|a)C*StH>iV+bzP^->Fc8!Ql7ubH6?q zMk)MhwOJOiP(l5PrsE^~hhL(m?eQs6U&}7g#-p_B<`mx}6Qvj=7`HGfZDazw`Pb)Z zC$^e832>~xIOpwW1A#>cX7)@n1bSg26W8a-o0xR!k1%o}xnF84BiAMrA31yy^w=jH zCF7IklVKK?pJ?gl8E#+h=cb#V@1tuS?igW_Uzt_Mh<9r re3kY7^*lSI7&I7#*tl4V6LV6H1i4r~%%9W%jH%r}Z*AOcsK5vSPdK{N delta 372 zcmeC=IL5w!NvxAmsg03?Nq|Ly(TRT(lpmLm5?5w!VtT56RzYfd zmJOFcg4VMW-T!xIRNOop;_Q8@NaEAVrcQPx_R>;UH|Jbu4F-cd-*5c*Xc#3>W7srl zZ(i~L2};L)<*(ZN(Au%OCC$%^^HLn=R%qUG(NY2kIF3Bt@Ey-8N$ShXKEiFkb wQOGPPF3nX_NJ%WnOezHmCT6A<1I06ojRd(^KFpug01VO_yIZdQH&S2(000b$X8-^I diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto index a9aaecc1059465a2437754ab406f4b4111e3b10b..e5adcb702a9799ccb463585c7c49b2a8c7a87e0f 100644 GIT binary patch delta 853 zcmZ3=b&`7llXyR?QV%N!lK_hZqZ1nkqX44>W7KaJp~?I#lBQBu7`gT{Dsg7!CZ?zA z7v!aD3H;&HoSJ*^!C8q7_f0R|U7=;rAYjEF735#ynvv{qRLJ8A@8oPI#rhmBhpVBI zf1^(}{jy8B{%*x|`w1HVT4d+xe>@#A`_JESJ}!Z63Kyg1?v2sf-ep}jD`cT%X4VF& z(r**GZC&~{yY^(Ambl!td?m95Ly*FeUtE#RCtouExiQ7)$NY`2mbZmX71^VZTH`$j(zP_Hz;jI2d-mhs*?gGg*?DEfh^HYxg z{_y{P)s(K=M(LgF_H134w(!aQy{{OheEfaxifO85@*1w#C2{8U`8zC1Ttyy{*=`ZO z{!WD&%m%-gpZoQ}FiN3`Yp0onY3SQNhfB_~hIP8{EO-B4^x&JPe&^1%lFy#?N>U6G zj8Z!oxfTOmomiTZnXjK)V2m}y9X<+qT#^mqc8jPi$a3)s4bAq>0*3gr@V`B)xf}L( zf7YJcWN$^W+q@tVwCv(dD@Asre17ZEF3IS3{i8LxUNm+WKmGt%*e$BNlRG;sp(Qn z7`f&%Dj|tDEMfI%X9CAYHkX63^{0)>d!s@FADj@^PZi|VWS8cc<;Y-T{p3r)_B|r| z4z2sX=9K8!ZF^5F)S9byVY2)8Id;+csx$WPI1u|lX0NWqp3Sd~ESQ26f?g|CEB`$9 zs>w9ui)8`J^T;C;6koVF7@uk~U#Q!k-~tMG4MrguE~)gQ#MIqZ}-nz8#fy&FhYbT_5$rEC5h9HHh8@^dzIU(WM*2XD*HB|C%^vR}Qb}852t(a~;3$CxK7&}%1K<8YGmZ9hq*F6GtG*%#5E(?+2NA3#}oD-_Oy_6xBP4$ zpnKfiwd&J!bTjpGbo1@qRqE`cO3Vv9{0wbNT#d7U4l^^VtGKqG|F_(+a`v^(pDs$= zJM&~NqY`^*sjHiFuCoTS!JY3neta~H5?Ce6X4AX1%=lMG^Jn>rBpoRRsWwKg0wvDG z(v-}6{oDd$tU={4tDfKEsZbDyPi~1%MT&O-$X1`Hovm-3C8nq^ZgX9&8*VA_X=PI< zy9INQ0`H}Z{ZR`h9W03})IOOOypUny(G^SO?yca_efvWFVP7cr;MmTjw1o*6%Zw7! z-ZkvLY3#+u#lpcN#Sk@*iEHuXbu0??4UAk|kT}gMNKKb20y-Rt?{HVpW2p!vxbTHm z-L37DoZoT%n(og(aaQ&jMv2ug{~u$uUUyIpU(Q!-k)Ej}n zH_|*jY)gd-YdfSEG#G^fxct&mb25t+iW756OA<>;ixpDxbMlK)6-tT{lYs*H#R{oq zsYNB3C8b3QDXAr?MMb5V#l@*53Z=!RK!KdpWRRxZ{G8O{lFY_KP*=%&BO1%3+0li<8)oA}I!t^VTsbt!4tcm{H=-=V>Rl zntJhb@p7;TJnlJgY=wam69;2d4-?l}Mxb96{Mz1ZDr)z#HfTM z;!yA7@lY;G#wW$oKf>P6)iTl~q^=++ASlb#Fv2p;G^?n@EUTW&VQTXKUd{QTa)(%I z`Ytke&A+zw{@PuQ*)y&;E?v|pXLDS{Pk86=YO&s5zW-L3^KrJz@3<%J$9Vo+#m4EG zGI!YKOB{IjZVrEcv-Wia~=>$coD%wJ5(>Av3QmGo>`IL?IZtB_h$lwSk@t){;o delta 310 zcmaFJzLsqPQ+={hA_tQIiv*(+8waBRqXc7App-wCrxIskX-a0ker|zrmKB$PdTjx_ zP4(-;p3~~O-$`}tm6*8k{amIX1(U4VwrAL{Z5EVCaq;Z*jwskVuYqAs%VoRNR}oSi zx@}SnAR~`6Dji`2+QKL?{awTEo5o)JT)Z4C0*`wR9IIbppv1(%7`2pb_9gI;jJ}I955%zwrmXRhQbp=5IL0PVb5teDD zSw$sgS$13ksqV8TswlMnId)d!lzA@O7m1IT7X4;a;tcbvaxW^$$jH=SFt~sA-fsQZ zhEW3Dh1Y_Wo^C7=kCtC2xTw)fia~-=gHcGBOR%gor=YYXu_RR?KR2_aBrz8N1_x)L diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto index a08966a22d85d4121a1b144ff2ff7fc525cc45ee..b250b15f1dd706a28593e68ccd9f691613dcf1b9 100644 GIT binary patch delta 70 zcmZo<+sV4Yl}Wx>sgQ$7fKlS_=V>RlntJhaadWT;^c=i!e~GCQLsaPGbS7&lHZGRp a#GF(kK`xdL^CvX`Rqy_JYvX1^1x5fJ92aB& delta 142 zcmdnV+Q_!Sl}TwAqtbRp4kiIci5c%2cHcDi;^pGzU=ip!c;WsMQzeF|S&WlYn5^Ty zxjc(f3yLyxGYd;o6%teOb5e_wQ}c>}%#6}xh2;Fa;*!jg(vp0IjLc$%+|rW75{1ly r;?i7&l*EF}q*9<*VrFVFP&l*LNRW%=!~97NKs#^jZn^s3NP!UmsPi*$ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto index 74181c146dbfbab2aeaacf38436a4ade0ef68393..20ef99df94b821c6ce6910990dbddeb8812d2c39 100644 GIT binary patch delta 467 zcmZqYxW%!6N&F?F(lbU5CIJ=+Mkh87Mgc|%#;B`|LX%H2+15)9Fj&iF<(N$l&|a)C*StH>iV+bzP^->Fc8!Ql7ubH6?q zMk)MhwOJOiP(l5PrsE@vhhL(m?eQs6U&}7g#-p_B<`mx}6Qvj=7~e7}yRlntE|?v2n0yF>x?PU1H+uW}1A2$yx0PBNvjxrM5D1Z9?&i!zV$HeZrHqndR&2 zxExY^@2ZMQOB?>L*KByHb8^E)@qfpD?opMuXbV<$2ox8Z5UZGU?eVumwRK-!uKcHJ zTI{Oy;mw34ou!$rjsovYdL;I2er=@0Rb1llRGQ+R=jN@!Y;gX_ld124etJ?EJz=@K z(}{x--lnAr?;_kDEDMhi{U0QkS@&T^^zBO?QVbf5LNZ)Z=|zdD$(afT`6a1&B_O)E qBsEbXKP5BYNRW%=!~97NKriq9d28clLj^{N(8OL~%~-UO^ioV> z{q^#)z2l2YJ?-;Tvh277)V|DlJu@(27vmkHrYV&?auTaw{y)a5#2MySY?*5VfS!z*?x>@R1_U-@btMs-@F-S0KFbV~5`K6`iWELwFC+3uvB$kvG zE2QM-hR2QFEm!{=DKJ8WCiViO<0e>$Nr4FfUO|=b diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto index 0e1cf09ce448e55f6df0c8975acfb41048f8b891..8b1d909ab811af2927ac7a9d3c276d3ac863402d 100644 GIT binary patch delta 123 zcmeywGLvrfA`M0%D=v%FqWofo%)GM9l+wHsg_Qi{)V!2Tg|htQ%%sv{h2s3Y a)Dnff(wv+`g`~_Rpj>ILLTXV_eh~m?9w@~C delta 84 zcmbQq`iW(O8k3K=k|zg~0HegLcMZF58hi0_adWT;JnlJgY=waqLzFI;7zd*OixeLh oPe5u(YLP-fVo`Q#kp`oXFqdFiX-+|DNn%N=LVj*$Nl9WZ00rF`jHCY+U_Szajii&=ILQEm4bJJr#Fx?CSc%jysC}rleU6*B%)+vKqZ=0=Iz07d=h-sR#kGDztW@#`UViS+#w$7w zC`<8A>x(^-zCyX6=F#%X74B!WgL=v&LM5ioxPO=>NFh+G{P>Y|_63p(wke+`UpcI< zzk2ra^sTk4H}&Yftz6S1#n8*7)Wrn!4x>cFmuV-qntJhb@p7;T^c=i!e~GCP69;3| zYeufKj6jdFC>>$s;;M%@G^-#rT?**uO^ixh2oZ-*f*$*Xqhx&2d@{_!@)IrnJj3nF z{oHi(^L=!!!yO|m@+-6IxEx-8&fag;Z4k9;L08!gfj>zz_tja&In{CY-QE%J_qo5^ z^|#jcm&E~(_AkF)Xn0GjUCp%P&ooOdjr9Ia3I0nBJYyveFPavj#8q74?^K%Np6BMR z!DMj$$djq>4Wkrp`-@af4dXO4GR)?<5qiaZ-)9+N^Hr}8@8GMf_pj&KA;qA5)IQ23 ze2I|4md|~{3{zIWx#3p%q244#ubtj9k5pKsVL2S<|NKKb2<0?`@;yb(*_qfRtCF7IklVKK?pEy~I zS+w4cOCaIr(q(@%^u8r%=U)GxtW_oPck$USCMC`=zbf~ll8lT@4JL#8XYcKP4Rqgo zs}w_1lW*A*zOSwN^S&}$ia~-=gHgzv%d;r8peQppv#>N(Au%OCC$%^^HLn=R%qUG( zNY2kIF3Bt@Ey-8N$ShXKEiFkbQOGPPF3nX_NJ%WnOezHmCT6A<1I06ojRd*CVF~o| NjomF*{~IYV0sx;qp#uN_ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto index f42379c44239e27c912dc4b8cecc52a8cad2e5c5..89fb265544985e9e16d0c15213ae19b661796dce 100644 GIT binary patch delta 521 zcmcc0K9gesQ~ggyrEiQJOad$tj81GEi~@`jj9E_^xgIfc3G^>$ncw@Ef9*`I?Aqh2 zy|)M{?8?s!s<)ePth6p9blXZ_`$buM?LIC4_Gixaj;?9RWfPTHKFpuktF@F-i7PWV zF+Ej3u^=zqin}t=%QL{Wsw~Z|%Hg)S$6n^FMn*1&gNX+`m(;g3Pbew~u%5f0-OBRz zjU%@g+^bg!2s6I(MfT*ntIlVN`SzZec6rx{fDQNWzc4#dxoP3I_enc1WrfE!&69ZX z?#}~uC7uZPRJYs+_sR-?*9r|LgJs8etovXXrEuY>w0@W*YuekbhFL7P52!WBovD6x zKqDYiU|+?=EY>qp40D*2+-5QXJX)p7)O4vOj9l~Kz5|IkEMfI%XPW$%NxnXt%fZA)_q@dO7!fuy(boG%~iWF+5P(*yXbt?8GCmehE7uD#l@}_DVf=6sSd08Jl=_9*>DMX1hb z%z4+a`=+rM8y5=)ixERq3lmo-BhVi#N)3!$P-kQnq^3(1aTUOv1>!s074%pt5>+qb z&6*;&zXOZ3zmfxkD>JUnbmg$g^Q7&I7#0=WFrQgbqk z6^avcN=p(;N{baz@^kWwQWZ*y5|c|J5=-)n6;jJmi%K#}N{bXyQcF^cib^w!i&IM! zN{dT@0y(M4AYHlnIjO}ZnTe@Jf?U90p40&J`;FZ#SN|I+FhYbT_5x$^CPat{0Gr{l A?EnA( diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto index 93cb1488a01c4cb43c7656419d067f31c5264a3c..c24ec461c9c4f317f75777bb44190212562217c1 100644 GIT binary patch delta 542 zcmV+(0^$Aq29pS&0)OKHBH#fC0uTfk0YU}{0T2Ng0cy_y3d{it5VADCmXp!)%V(k4 zu8+vIFcKiXGP=nACT#y#Y@ymh7ni6KFH5VTcU83zl(!PNVZQ7l1n{4cjw+7DBzB$cvB-$elb_!wL2N&_XX$r!<^dGDzM_urHf7j5CkH`0SXFfZDD6+FKTdQXBxEu3bFwr3TbU& zXJs#HaAjveOi1A#S{zJdNl#cmPDMFcG*o_YQczNAMKM@8W;JSZbT(>#3P6=(|BWf1 zRUX0we2&oril5fC->tfVYna!8rJ{izJjWDH6S@0)7JrTUP5!7i4he@JxZWF10ng5O zv6pEa+y$5$l#LgrxbP8UQE(5;_VvWpZzGAZc!PX=HV7bRcAJV`Xk+X&`oQV`*Y_ gb0BkXZWm>AAZ~SRY+)c`X<}t=WOZ#IWpZ+FavXoyS^xk5 delta 389 zcmbQt@rP{zQ~hQ}r45W6Oad$tj81GEi~@`jj9K#;x#lo(2}GxEn&}&SoH<47@8TcF zj@}efkkrsoSQy^1Up8w&*{$R5A6?c-TU|+VOL?`xtLI(*vX@FMALdW&(@Id{%FInn zPt`9^O)9YB$Z`xwk19wEa+u8K@th~iflFZ9`#mdP9dQZSvAF*Cg|yQ#(GrukoIb^- z#2w|H<{w-Z6y)bptif!s?Z@TiuMDFEQvLd;aQ}EwUgvb{kc69|mlVTMMx{d_S2Ie? zeb=!2rm+_<7dHosz~i0+$5t3vF+?q8&Dn5=@-bg43~BADYqe22Pg z;vPE~qhx$iJpCi={ah_0O+xAlf&zlFTn!^E(@e99O3bqCxCBz&XH8U5X#I2Sti&nv zT(&O~A1^KX&8Wl~=2zujRFaXAsli}y|LncpuYu0(F1!}3^mJp1c(nXF!9|Tg=SnbY bFbWBC36_=S6qJ@EmZU1==Vq3aB<2DD&H#{# diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto index e129edfe1a6b93be0d653b2bd350666f7cc46492..2fb79a75b5d766e928d9ad004e86296b3509c5d3 100644 GIT binary patch delta 459 zcmV;+0W|)x2j>T%0)OuTBJ2SO0uTfk0YU}{0T2Ng0czU;3fKV(5Yj#mgnWvT$(aH` z+$pwY8xkN0A3_}nd5Eoy@6S2N(rjoD9zd5Kc#Hc`U*Yye8|eHZ2=Jegjqsn3zABdi zA_-}2VP|D8aBgQn))z?36l#G13P7roI$PY#jZX@O;a~q%}GM2mxBs0SdGM2mufTBC7!k3TbU&XJs#H zaAjv2oB;}#0h8wfD}QMUKzVTE75Mgw0s^V|1?%C;YkRJ8U6yvzSbaOpx@oaC@A~e! zacYQw@Pw#g|I#jaP5YbSJ7?te3g0H&?Hkq=n;65QmQ+$8b;`Mtzd6BWw=3;SN>A@0^^s=JjZG`A5-G^Fn?n2hxz^cv;vhl zGjkKuQ}qk-(j88Vdu(CNvf&c=zh2VuwL!SPeaE*;8IvLfBr-Y{&-~12!5pL@*EHSy z{1mCf?~HpQTrN+wzo=Dlm!ebd;BpNp4+ zMWE;4h5JiPt(Z6%qaHJIH827_!J<^b#RaiGs~|O9DvK*)vLUl}y%m>0kx*HyZu9X; zZnrxN)y;m*m-xH*Y!_3ILMWfHkkj27gWoMGdjT!2kdN diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto index a9d4a9500ec5c92f24f47d0262581633a170377a..45b049c4763b1eccad3411927c25cc499bf36a88 100644 GIT binary patch delta 527 zcmX@d-omkfss1vf(gj8iCIJ=+Mkh87Mgc|%#;pB}TzeR~1PV?so2;m%@oy_1*zV?E?58at#HfF^j>kMrTrEaxpH$LQ`B-iBI3?~6^Czx+)X@83{-oVn zl}enMxryni`UQFESy@~TIW`})54E<>aTAwWSe9>ePW`T3)%r{fu@{Pnkrh#MBx053>X*1ZtHZKeEogKvKar z<60&t9IswRZKU9=*4fYkH&@)-oxrVgmY#QKIF`v=duRz1X-|I9Qw*qNXr$ zon-`ilSSzWBNta@Zav6-Sp})-Qd=3hHZdvzg&E%$ zrI^I}>*Zy8#}}1)+UKWa)p0qb_}*0&m6kUAU$5ElQs?A`i{k%|{oJD}Z_yU4><}m} zG$B?o>DuFOhidD-yj=ND)wI}E>BE}|OFBz4TO9@J- zTZ7r){E;V9-y23LJSmKxu-x70#K8z}(^7?Z5pEBbg-3|~50cBQ`!FN=_9ZC>4Mrgu zE~)gQ#MI#R80u24Gn1{&{QTWG Ifrv2y0G%n!ZU6uP delta 457 zcmZqSILE$#seUD+(lSO4CIJ=+Mkh87Mgc|%#;mD~T$32N1b(F|cXre^w6MmO*Y!nD zcMwvjx77C%=Q*|N^%F^-yeaKn5mU^f7A={o&9`0n`R1^KEjtXE|^QFj;1t$*=WaKj+u>UE$jQLM1vD&#eErU2U z7OuDB5>Wdx=k?6Mgk6kxjGCrY^2kZ7e)<0xs}g6JUzK}NNk&Gd2D8Eav-ftt20H9V z`e&&{G3sWiU)i_+tJ2#p#UR0`!6+2K<(HP4lUb}#oS0Kul2}q&tdNqQlV6moP*Rkb z3>3&OR!A*NEh@<@DJ@b+Ni9h&Dk{w^E>5*8Q7A1g1&ZXPCWCb4=I5jqmt-cU8VPc- d07J3?=;0f?Tdw{$QecD#P3#56*G-5J695)XsImY6 diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto index 8a3f8ae4a0c704bc068ad1b7eefe5335eea0b976..690474875c4091d23c3b4b2784bffd266c20ffbf 100644 GIT binary patch delta 440 zcmZ3;eu902G*f+q?&l)y?~I#@pUEiRFId~tQ7h1QE$IK`uTmkKh0;S!mpCQ*7oEy| zo1|85tdJFT^wr-({Hyu2n*vThbi`)Kq zdu-eu;hw#Cg<-zV^WC+DCzK1;95xT&YhZwY6G^8J=m$6|^j~XFNYI=r?RwI4G4H9! zh+`{XvsgVUXFJQ!bMn6R;zY$?cIVm?cqg+<#WEJEzN>OlKC#J#(TeY7-K0eJ8qdpL zjgv3EF?h2;a`k~(hgR3$chA3i?_P(0AAeO*`1Y&TCph`vnon^&pR*{JNvS!qMf1(e zuWsx2t-iqzbq50@lo4&OURZJPp{DS`=?_C0Ot}OYlavxTm;@LlTE9#?vDMUzmy4T& zMc{GIfnzHSycnWfxY#%t1z0qggsiwMQj7A76*BY63^G$n^GXy_@{?2ZQZg0F@{==@ gN{bbW^YcZ?N`a@aymzip$(RC^BDboeQ>LPAumgQ&W?V0)9uS|HvsZq5N~yw2p;= z-*OGtEe%d!F7EN=_~EGho4>jLeCFpezF(#ck}KSghE29ReYCv!4R=nCQ?tth?)ohU z*Ts4Eb3)z0zzAj7&0*bgz9QnYa#obrt))Ky1sJWBEIF727$p|GYuJ6$*o&8on}bE* sanFHcD-66CqGY+)I2Z+3G?;{hxdh8fa|%jJ5=%H!74ma4OG*-R0nAUOb^rhX diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto index d9c82f37c1bb7e7b1ec91c014238d2c09c9e41f6..1689b424959dad93a4db0b4c8ab1ee4740d9dac0 100644 GIT binary patch delta 76 zcmbQwdV^(y2$PGmk|PI`0HZ|PmuV-qntJhb@p7;T^c=i!e~GCV69;3IG8Y>MqX3Hr gvk)5>OL1aOs*xZU%ZK@s8i0Cs|Gc$vv!Mbb04b6c+W-In delta 148 zcmcb?GM{yW2vdD0qf#3q2a^D!#KLzCyKfqM@pJKVun6=Vyl{VssTUImV^jtg8waBR ziw3ihHx?OMNPJ25_gv2l1eX1Oij*I zD9A5K%_{-X#U-hU3i&CS`9^|VEFb1iY5;2A{qxqw&4vn$5TS{^0xS}HAVN$4qUIwG delta 180 zcmbQrdWLm_B2)cJMx|wp983a?5{uq7?7nI2#lgkK!Q#cl!4%cU$R)zTD8M4c!^LG_ zXk=_+YG!U>slg}|z~z^gnv+?qP@I@kT9Q~&TC9+gpOasds!&ptm<$xiFIGq`OD!tN zEGaEgNJ%Y8Eh;L_EG|whQ7A1g1q$S(CWAEP=I7|77MElurWy%yv3!_6sR8JW8@pSs U{x?!!ga}RS6=0FL2@zrf0GOCN6#xJL diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto index c292838eca6d5d67992eb66a2cdcd695fa0d74b5..d5ef58a35ac5c7235628e25339deb9dd7bd33bdc 100644 GIT binary patch delta 154 zcmV;L0A>HL1>Xgr0w>)8BH9560uTfk>zBFIz%fD)2(Hnb?ej1Yp}?7pk})6wYPtam zx05FVJ~(+I32AL%XJs#NZf9z03P9v3LE_=`T9&*_awn|^5QYpQy4jRX#F3D#tGbGE zzPnAiIp8!Z;5Czt0vIY7hMI`D22vmh4Y>4O1Y{lBbRU5f4*qaFXD6uD;PbSaMU9}@ IU)}*40O#~T!vFvP delta 106 zcmV-w0G0pW1+N950w=8jBB}uh0uTfk>zBFIz%fD)2(Hnb?ej1Yp}?7pk})6wYKj30 zhm$7)J}5~d32AL%XJs#NZf9yb3J~NeLE_=`T9&*_awn|^5QZ4Hvdi`aQXrF^0vHN> M3K~?Wic@MD06+dGO8@`> diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto index a7577a8940798531cfc8d0793a5c453b28808dec..a9fc32a4a3d7ce88ff1397c56343bedc48d3ad22 100644 GIT binary patch delta 236 zcmVD5Sb0G30!Zy0YJUnqR}Kmgwjj}3 zoxNNtw~9M#)YV^+tQr0E|^VaF4qZ` zmrC`g80@67)(0XAMQCF~O=V?jXl^J1FsP!1@j3M|S|BBm@6n7Tp4-Iw3R#26=>z=O mlrs3AvFfLWR+SXEs<|2f5)ldn@Sl=^5CItdw7HO&Hy{D`n`XuU delta 163 zcmV;U09^l_2Gs?i0w>b}BG3T{0uTfk?3cOJz%fD)2(Qtc?ej1YqQIGqk}((oYOnzc znv*92K5$$j3TbU&XJs#8aBgQh3S&b}Wo2q;Zc}DJq#sC|18O=75bC6mkH<5@L<~CS zE=pRUyBO!R(trgb1yF8lVOJ;uFxG{YlFAS zJypLvHL1XgBg@4nG&I}W-Ql9VN3&2?4wu7O{fWF^)0*4`l5<|Hm-d|G@~2u=I`!D) zpZDgc9R2;_|NW{dUAK+WJJ;>mx-f0wllyyLF-rOP``i`NRL$fyT(L`H@zRyM7%iBB z6oj`VCCm41ceJoMZ>D}Y>6NV4TGNx#A<3Nm;&TFC?crS`#ULce#qwePqz0gi|8Chi UVTQQ^BSdIouKK+HBE^t(n2~GNWLYM=`WPjy%-qEE zRQ>YQqyj6BbhrF$9}k~ghY8#s?Ku8+xXR|phxTxZ<6A#GWwBri zQfSuL7{o5Lb?xeyN6Taczbv&rQ7vF*R9A6rKmTvJW995p3_^ljEFb1iY5>~b|NCg) WXA=cRh|t7d0Tzh~Kp_^O7!v@N^gqM^ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto index 0d9528549ec3193b6fc1f125ac102cf111c2d87a..9063956170957a13d13ae7a6a11f872977fa8480 100644 GIT binary patch delta 201 zcmV;)05<=)1^xw~0w(+cBKZLb0uTWh?w7gLz%fb>3JnMZ5aW!%#;7nN0tf+W+5rmJ zlO_T}f0O|t32AL%XJs#NZf8KKA4u2(YJUnq?L!!pC!>Z%t1VYKD4|N*E|8FMnH5j% zm!7GQ8Q4g{dw5^?4bst%TA-4_bY5{Q$!1fb0FlM0r5@g>3@z>G7>1gNxCSB$MQCF~ zO=V?jXl^I~FsP!1@%1rUAi|DuFPc5w!-V8!7x|7ALo3cS&f^6F)j;y^^zQ=_p3fQp D2I5q> delta 130 zcmV-|0Db@d1-J#E0w%TrBC`Pq0uTWh?w7gLz%fb>3JnMZ5aW!%#;7nN0tf+WlmQBn zlO_T}P){NWX>DO=WiN1UXF&ZENR<(4ItmbUUd34TjLH>V_n00KK_6}yx3bIj1R@1c kZfjvzC;%|lg_V@NxvmOf?08_dyH~;_u diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto index 638b012d286a02717ef9d4b65a4dbcdd0aaa895a..b6680b313d259aa57b5b847e15fd7cc79368bbd2 100644 GIT binary patch delta 170 zcmV;b09F6S1@;A?0wnYSBJlwT0uTWh@0YpMz%fb<3JVAX5RAdl-=sAn0BY0$3ciyh z0!27^A_-}2VP|D8aBgR6Y6?K)DM8}l^jem@OmZi!2M~q~BD&d>O~jFqt*g31gNxCT-n2o1ROT?Awu+H@a*6b}AyJZC4U)!_5AnnjJE*(OL+CcFB@j7nUY zxryni`iTX3=~g_sB|a4?-T{84ZV{CZADBGe%4XGbIfV0Z32ali7&UiqjMnxp>#|uP z3oSFVHb|9zo6v3R(zn^QC+l?Ww$!KTe@{ytYhAJK_N6&n^k(>`>RsoYHr?y%a)~!f zHeF*^;&RPMcJ@t8&C1BrU@};-sP&`ISHma;)d}w}_NdIeedHHcWb?_F%zti7G5Rro vzNx8M8F|5J4ol=cW;175aS6OyGNJ#t@gWx;t7m#%Q44lUJl}Gu zfmMk$ATK*HT!YErTIx}g8} Y(Z0_n3XBk;iM;|W5)*(zEI=_P0F(befdBvi diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto index 799a01a0ec79e17a1748ad33db62c3f4793a864d..0bbb062e67bc123a0f237dacb6356b9ff63ebec0 100644 GIT binary patch delta 191 zcmV;w06_o01@Hx+0wnGMBI^MN0uTWh@t3*Oz%fb<3JVAX5aW!%#;7nV0BX(w3d@ru z0zQ9?0U`=%ZDD6+FLz~Pa5@NTL`+pxYfDE!(H}^I5^8J;K+P|a4fSS%M-XFd=&u_| zl0^J_B^zbN)A`)`x)`IS tsk#9;0#YCov|?i)j<-QLJkK^K!(!?kO05sc8&qQnj~AR!>bwoC8UO>BP9XpQ delta 141 zcmV;80CNBE1-}KL0wlcwBDw(x0uTWh@t3*Oz%fb<3JVAX5aW!%#;7nV0BW593YwE7 z0zO?_A_{43VP|D8cV%L5ItXV*Z);3QOl?4r3rOx5YCH-MsAuT3RCPmH)H8ZK#PEk# v7{|5n3JnMZ5RAdl-=sA%0tf+W=>ZDU zlO_T_f0O|t32AL%XJs#NZf8KKA4u2(YJUnq?L!!pC!>Z%t1VYKD4|N*E|8FMnH5j% zm!7GQ8Q4g{dw5^?4bst%TA-4_bY5{Q$!1fb0FlM0r5@g>3@z>G7>1gNxCSB$MQCF~ zO=V?jXl^I~FsP!1@%1rUAi|DuFPc5w!-V8!D*28TLo3cS&f^6F)j;y^^zQ=_p3fQp W5)ldn@Sl=^5CItdw7HO&Hy{C_=US2g delta 149 zcmV;G0BZk@2FC@U0w%=)BEkU(0uTWh@|U^Pz%fb>3JnMZ5RAdl-=sA%0tf+WqX7zy zlO_T_V^1OpX>DO=WiN1UXF&ZENR<(4ItmbUUd34TjLH>V_n00KK_6}yx3bIj1R@1c zZfjvzC;%|lg_V@NxvmOf?01^=j1n{4dfDi!~kNd@r^E4m< D@jEq3 diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto index 1845d7aae542ca52bd6af199b5580e26bd3b2a53..8af9edb5e364bf16d78f7e6dca273b1171eb32f9 100644 GIT binary patch delta 202 zcmX@l`k!?Hlk8tcrC*F3OahD&pQrDS^ z?!Njbsed=S-ZY876SeVt(FS&lhpO+33nbcRb?jgZQsCg-@gQoHl8oq zz;5wS^?h+c4VP5N@~+@4DFz`yE|w4TCp7>q>;HYU@3V;lBSdIouKk diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto index 76b0805f92c8ab2b05363cd6e37c94757b03f742..11f755b163ff8b2347d0906ffd92dfe03416a8c1 100644 GIT binary patch delta 214 zcmV;{04e{*1&#)w0wjzAB8dVB0uTWh^q0BRz%fb<3JVAX5aW!%#;7nl0BY<33h9$1 z0!4qL0U`=%ZDD6+FJW+QXF3dRbWC_;OHfXAMp$`3@B&Ef9cq6HKvxb55Vj!ETAjUI zDz}O|cA8Y7IcaLJ8g=%Ni#{_9*pxE( QpRwwvhE|mnxT?7t0K=eMDF6Tf delta 141 zcmV;80CNA12F3-T0wlx%BEbO&0uTWh^q0BRz%fb<3JVAX5aW!%#;7nl0BWQG3ZauE z0!3Y1A_{43VP|D8VQ_9|ItpV$O=V?jXl_$xK%^f?n*(Y(3J~g~kdMbR!bA)@<}ONF vpt~67w93JnMZ5RAdl-=sA<0tf+W;Q%3RaI+CM?ldZNP`k;YzjclFOd!PW`ai$V{GWJ z8%dHx{Cg!EWyaI_-k)T}`|$tYdX$RWGG~ddytScbq2%Aa>H!)|PfXnwDJ5wQF{rv2 zqot|30XPCuAQQA=V;_#UK{!0mHYdYk>K#h0BFP(6V+oHJoKWh#4Xhdf5)ldn@Sl=^ O5CItdw7HO&Hy{CQ!&EW= delta 162 zcmV;T0A2ru2Gj+h0w&S{BF_N`0uTWh^_RKSz%fb>3JnMZ5RAdl-=sA<0tf+WumK91 zlO_T_a9kn^X>DO=WiNMSVsJVLXGU*pOh`;^K#&Va?igx33J|Dg=(JRILs`@_dOXDN zhgTTKweaNxI08~2gDA052NJcdt6buy91--TJIH$wHZp#A*1r$?9>#YE8UPXz3Iy<< Ql7J8a7?1nKj`K7i0WkVJfdBvi diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto index b575a6bba106986d584bca0a39c03ca2ab657065..b66d6c72207870f21f9155e7f62a9d89ab571517 100644 GIT binary patch delta 230 zcmcb}I-P9+lk8L`rAbU2OahD&-=^=pa=_4wjf;hY#fc&74uTL_OO1tIxAi7WD4Z$k|91MkmHm=8JPuY@ z#Q)&Ebg@5b!K8yFafR9^(}EW=Ogy?`socF4Ji2dRNVLuB*ukd6<(iS~?3&LH#Q3{9p3iW5%-aXv%B+d3`pQy9;Ig@jbS(&ane0u-oJ+sif^HK~#f?O;g e=1*z>y8Q2!ofBr5D=2IOTYhHEewTx*>= z<(*-afL6s;I&W;2}5(8~VbNBcgTC@?~VCiV)jNKAkT GF#!PO7&yuR diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto index 246421dbb64c43e4fa8885407ae860b326f24fa2..8851528e37b5c19e81c2e83de6bac3119684b114 100644 GIT binary patch delta 170 zcmV;b09F621>6Oo0wmf2BG&;30uTWh_m{cUz%fb<3JVAX5aW!%#;7n#0BX7c3b&Ia z0zP_qA_-}2VP|D8aBgR6Y6?K)DM8}l^jem@OmZi!2M~q~BD&d>O~jFqt*g34O1Y{lBbRU5f Y4*qaFXD6uD;PbSaMU9}@U)}*401eAY>i_@% delta 122 zcmV-=0EPeD1*`?20wk&dBBuce0uTWh_m{cUz%fb<3JVAX5aW!%#;7n#0BVW>3Wt*< z0zOJfA_-}2VP|D8aBgR6ItmcvDM8}l^jem@OmZi!2M~rBx3bIj1X3W~zJKIp{j){c cG+*3WvCnd_2RPv+?{jc`3K~?Wic@MD0H^>kV*mgE diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto index b59484f06cf578e44808d4a840a8a5420ccded74..49f3eac3406de39c4bf24a93b83b7f0e9ef6b3eb 100644 GIT binary patch delta 235 zcmV3JnMZ5RAdl-=sB40tf+W`~eE) zlO_T}f1?2+3TbU&XJs#8aBgQh3~h8wcw|dZPIX3Dc|h<2NbMbJe+ocX4hj&qAkkW# zy<94{iaU0iRG~R(YOor0_K=G`M2@pXjB3k$wq@mK{mUB0g{ZFE(wwv|m`!Ca*9n%F zO7*80?4+{R2OZgWQl@z$Dxf%cx5efwGpOSzO0T}(XxsaGQAOU4aW1;{6 delta 162 zcmV;T0A2r}2G|9l0w&f0BGUl~0uTWh_?NlVz%fb>3JnMZ5RAdl-=sB40tf+Wv;hj9 zlO_T}a9kn^X>DO=WiMfHZf80QV?#}4Wol?{Q)WPZFj5$1}o23_9j6 zN?M@180WOofCVB2P;P5sS11B7)`gXn?lD>rX4+HA_6$zR0J7fYfd_?38UPXz3Iy<< Ql7J8a7?1nKj`K7i0VA3`KL7v# diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto index d8d5c3c6da8cd55d8aa9bb50d3c1d3e6b37b3b0d..a05d410f9cac2c815b63188876e49a7f2a7d1a77 100644 GIT binary patch delta 224 zcmaFPI)iNill(L$rO8YjOahD&Kd0}!a=_4wgNu!W#S18u^_!9F(qwri*ZLktC9cfe z#Pn4C^3D|pU}{3Z+C}_@*d4XSvgz|XZ0uYeobp~7f8-|v0mD9lFOfJRq51Y zmw(=ypK|o~hyVAhrgYslO7C2^XY0bWg-`D9eZ?r{l9Vjpx82dg=DeBu;iOlxUTaNHN{1wK_KVL6c(sRjjTD2BAQ#Jr`I8!eZvMMv V=Y$#N3XBk;iM;|W68|7VOaKe?SHl1R delta 175 zcmbQi_MCMAll)UgrALe$OahD&Kd0}!a=_4wgNu!W#fyo9DeDv?*TTv2Os@4YN?e(_ ziRr2O<*7*pRvhVW`Pn`mKDiDPxINxUWZ7^DtVn;cC8X3j@``bl&5;l7;S$HUet61a z!4#y>tg$hOU1;mt)iIBj$q0T~YJH+wz|5$w;@W=x-*U&w*`*kS1i4r~%%9W%bV2{` YqkW%E6c`~w6MF?%BqjibSb$C&QlVNZy$EB1}QkH`1sztoVio<_OY9ny}qj39XNQE xY0bSxow`S#<^&zQCLzTjuOtg}AEU%Au(P~)xwtu41om{yefq*!iD42W0|2Y{S{eWV delta 122 zcmV-=0EPd-1@i=;0&{XAa0mhr1Q_g>xzxZhLJ$bA(VXq`Fc6}^nT(P#7y*(2Pzp{8 zN+JqrZDD6+FKTdQXKFeM5O~?mR6|S3ax`jR`Ft^gk{I61W&i*H diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto index 06b53fb232dd4a6c8d7e89adcbaf4a4dae1e3d0a..6b9c6c41e950e835fdc79925a8c9445a0ffb20d6 100644 GIT binary patch delta 281 zcmdnZx|(ePQ%F0LQVSCYlK_jvt;Mgmt}}HK;S=ak2-Ke0@EaL-HlJ;EtpO zx6OZgTITQmx<%^F34{3O6K3k1Ub5_NTBEpy-QT^@`(#Xlfl&eJFmSmj8Zth<8`i#ftEeOo^ev;r bZLlZ3__=sFSOk{;xWD zEpKm3Ejw31SU7KaYCj4P>##rVgogAPYi?z133nE67}kfNm^=g`3UWwUYera2PeO4h x0x-n-#_R1dS`ZlL2hV)8L}6L`Wg3+=CEXeTA`r;vd6Bt>NCkw+Oy3W*zkK+cIApoH!F)n4~TExgTpHYc3GdD3k zRX;s5&EXNR$6evcmQ3>XIb05ze-Gc@**4+n(z%=WI860Eadl!usb1@y)B0jJSTmV; zr?p)2v^c+z`Kxu>@i|(Tx|hezTvsEQThwN-du!6oy3b7#kH5}*%4ES5q);^X3$y2r zr*pQIKMC8sbc5^D#T|ZgrKjF#SY@lU@riA?6oZ747|^kd5_iCE^kU=WV&P!XVwl9p F0063!SeXC- delta 134 zcmV;10D1r71(^k)0y&ofB9s9L0uTWh?w7gLz%fb>3JnMZ5aW!%#;7nN0tf+;0d)#< z3U49_X>DO=WiMxGWvz oAjJ9#S%b;x1N_*OGWegd>ZgWQl@z$DxwWOg(;L4Ih8h4E0nM^D#{d8T diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto index d3425e12faef0d9bbe9a86528c3a7c94c227dea2..2c3078e5d6532f733b4747b72fc669e8c4f0f139 100644 GIT binary patch delta 281 zcmX@ax|(ePQ%F0LQVSCYlK_jvoyD)Wt}}HK;83e0@Ea!=$hMVhes( zl~#wzTM6$gW>Z_C9-SU{KVWCcyPmyoJWF1m_|Gz@;_Wk)*^kTp?qB=jJ9FKe!%+)F zt6tACUac7GBGLHvVF#-cSE`pwX{u*lvR9A>gTd7OJFmSmj8d4_(^nImGpl*?pH?op zhfB{@RT1*^3uQC7tw0Lsv delta 202 zcmV;*05$)s2EqlP0)M~(BE10!0uTWh@0YpMz%fb<3JVAX5RAdl-=sAn0FnWp0ScS} z3WotA33h2@Wp6KSa5O3qRM|7a4H^W_*(90uN2Qc5Fn|z1-Wf=$1X>(SWJyn0KTbtC zSu|9Ba8giGYDF+LaG5U6M9v{ZFNS=2LnJjC#aR~i5!5Xk6xk-3IQ1%%9bhX^}6 Ewqc)4?f?J) diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto index 4cd770e6096c0f8d8f86ebf9a873728819932b83..e5fd1c18c958f4fab2ccfb7904057be36e1f349f 100644 GIT binary patch delta 196 zcmeBXeZ;zeN$UWk(q2XmCIJ?SyNh3MU1#dV$8iJ95P(pV80Rr^&1U49!8lowNxMFa z%ONb#x>fw>%yoVbGTnC1pTm^;=u>6a(wp4>QXEwOH8g!Mx^O0OvEa~ddq8nRzEu5`k*%L=1hS&H>rKDY66i# sx4zwxRVnP3Vvtvo1-gt;;vU#RUc6k~d>kwS%YWS8eACQ`VG<()09~$C#Q*>R delta 108 zcmV-y0F(dX1&als0wIY3B8CA70uTWh@RzyNz%fb)3I+%SDgp=rk^ycCYzkv02l!qVIS=ak4*?e0@EaL;l5?g?Vfr zpZZi@4!3MhJ(cm@`j{}og>SzM+}h*086?v7zTY!dc}m2CqtB98n9*E@>9Xsz<}**zHmrT|R!T_%=vzjK U`(RIcad5G5uoy9M0R6}S0QP}yqyPW_ delta 202 zcmV;*05$)l2EqlP0)M~(BE10!0uTWh@t3*Oz%fb<3JVAX5aW!%#;7nV0FnWp0ScS} z3WotA32AL%XJs#NZf7bGRM|7a4H^W_*(90uN2Qc5Fn|z1t{+I<23j0UNliL^QbIUC zEnZA6WHen*E^cc}UvhOxKW}7eKMD|n8_j~u*BRMN<%xyuLqiyp7>1(s<_01Pa!6Tg zMp#WxLUAYqFvR-C>+LaG5UVX$IVhn@+b)ohahVlQ?HT|g5Xk6xk-3IQ1%%9bhX^}6 Ewki%wmH+?% diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto index 3c319f0163e94171323325989c2311cd190e622e..58b3858a3242c1ed9ab101dc31d0e4a9295ea1d5 100644 GIT binary patch delta 74 zcmZ3)a+qZSle2=790!vCi^ToKueYuic=0cHq5s7Z_ric0c81&k68z~Wx~T)Z4C S0(&~q244#r803;_Om3;zHB diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto index f502647e44f392300dd89110565c70fb110808f8..7335c9daea74257e40f950a580abdc06f553520d 100644 GIT binary patch delta 205 zcmaFKa+GxeQ~hE_r3H)}Oad$t4;H`Py3W)|h~oyBApoHy7!?>NG1hU_a8)UBW#%TP zr|M@Fq^4(OaXHLxSlw6nF2+_Wv*pM1_(C&QlVNZy&mKum&lp`1sztoVio<_OY9ny}qj3 z9XNQEY0bSxow`S#<^&zQCLzTjuOtg}BcsGau+zMFxwtu41eX7}zxk$_6~iP(1^^@} BTH^o! delta 112 zcmV-$0FVF01?dE!0%>R>W(Wch0T}a_xzxZhN(Kr92m~?!k^xW(P6|pQ3TbU&XJs#H zaAjv|ItmbY+09f#OUiOIYG3($F@lm9-pu5k0a75EoZ{HiXj!??w$fV6OKMp&%#ZDM8{I02l$(jVtK@ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto index c560ee4874bbea2cc60d54e8a3f0cbe81cff4ebd..4da0245bf5e7601d9440262095d2a5541255610d 100644 GIT binary patch delta 268 zcmX@aI*)AuQ$RD5QUenQlK_jv!^N++t}}JwS=ak4*?e0@EaL-HlJ;EtpOx6OZg zTITQmx<%^F34{3O6K3k1Ub5_NTBEpy-QT^@`(#Xlfl&eJFmSmj8Zth<8`i#fE1@I?^eLmnBd`a( P*tl3YSezIpF){!E4d8F6 delta 175 zcmV;g08sy)2EqlP0#CpJBE10!0uTWh^q0BRz%fb<3JVAX5aW!%#;7nl0FnWp0ScS} z3WotA32AL%XJs#NZf7bGRM|7a4H^W_*(90uN2Qc5Fn|z1t{+I<29r<%A5=dI5bLl% z?SzK(8EbB3YzcQ3Zy45xpqKNCkwNF)n4~TExgTpHYc3 zGdD3kRX;s5&EXNR$6evcmQ3>XIb05ze-Gc@**4+n(z%=WI860Eadl!usb1@y)B0jJ zSTmV;r?p)2v^c+z`Kxu>@i|(Tx|hezTvsEQThwN-du!6oy3b7#kH5}*%4ES5q);^X z3$y2rr*pQIKMC8sbc5^D#T|ZgrKjF#SY@lU@riA?6ob5yEYQJ>5|6>|^x_rZ;^trx Q*wZoh=?h~ohDnSJ0Kbu4FaQ7m delta 134 zcmV;10D1rI1(^k)0y&ofB9s9L0uTWh^_RKSz%fb>3JnMZ5RAdl-=sA<0tf+;0d)#< z3U49_X>DO=WiMxGWvz oAjJ9#S%b;x1N_*OGWegd>ZgWQl@z$DxwWOg(;L4Ih8h4E0po%;{Qv*} diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto index 83834d2adf1d0ca665df129428803f4a7c7abff9..c585ec3046c0bd5f46a70dc1d0f2a259043a1388 100644 GIT binary patch delta 277 zcmdnZx}0qRQ$RD5QUenQlK_jvZ_C9-SU{KVWCcyPmyoJWF1m_|Gz@;_Wk)*^kTp?qB=jJ9FKe!%+)Ft6tAC zUac7GBGLHvVF#-cSE`pwX{u*lvR9A>gTd7OJFmSmj8d4_(^nImGpl*?pH?ophfB{@ zROV delta 168 zcmV;Z09XH~2D=5I0!X<5BDMht0uTWh_LsTTz%fb&3IqrQLI9Ehp8*P-0Sbo!A_;bB zWMywJZE!Ry5LDSS!VMY(&eDD?kST diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto index af2792e2fd21739ebe79a656e0eb6d60a6d5d60a..3ce64aab770acb53988b3af502f7af417ff35440 100644 GIT binary patch delta 195 zcmbQh`jB-2lim?VrGtzdOad$tPZq!4y3W)|h~oyBApoHy7!?>NG0tP;n$5^HgK@GN zlXiU;mqS>fb*uQ%nd|%>WV-F1KZhyx(WlC;r8l|%r8ubmYiRmjbm2_mV#%lRQ$FmR zdQfb}?q4+tS08D8WX@j~cP?N5NQK1ItqsSRgA}?~^p@BDtbTO9^+9dg&6xsmZc_VP r)dV7gZhgBWt5Vo6#UQ050dyUs#8a@Nyg0bnI5}9nm^hdwF){!EA4yT+ delta 113 zcmV-%0FM9R1&{@x0w#_DB8veC0uTWh_m{cUz%fb<3JVAX5aW!%#;7n#0FnW23Tz5! zlP&@)KROB!9ZIdq8&qQnj~AR!>bwoC7}kfNm;_QFI`^I_jQsLR8kXk=zyevvCQh|M TefuEU-a9NbE+=u@8UPppk((&^ diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt index 27e309320d..481dd88085 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt @@ -13,7 +13,7 @@ import org.signal.core.util.readToSingleObject import org.signal.core.util.requireLongOrNull import org.signal.core.util.select import org.signal.core.util.update -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.kem.KEMKeyPair import org.signal.libsignal.protocol.kem.KEMKeyType import org.signal.libsignal.protocol.state.KyberPreKeyRecord @@ -151,7 +151,7 @@ class KyberPreKeyTableTest { id, System.currentTimeMillis(), kemKeyPair, - Curve.generateKeyPair().privateKey.calculateSignature(kemKeyPair.publicKey.serialize()) + ECKeyPair.generate().privateKey.calculateSignature(kemKeyPair.publicKey.serialize()) ), lastResort = lastResort ) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt index cf0a8ff48b..2c24ae72fe 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt @@ -13,7 +13,7 @@ import org.signal.core.util.readToSingleObject import org.signal.core.util.requireLongOrNull import org.signal.core.util.select import org.signal.core.util.update -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.state.PreKeyRecord import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.ServiceId.ACI @@ -114,7 +114,7 @@ class OneTimePreKeyTableTest { SignalDatabase.oneTimePreKeys.insert( serviceId = account, keyId = id, - record = PreKeyRecord(id, Curve.generateKeyPair()) + record = PreKeyRecord(id, ECKeyPair.generate()) ) val count = SignalDatabase.rawDatabase diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt index f51d478c35..710d7b8e9c 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt @@ -13,7 +13,6 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.signal.core.util.logging.Log -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.zkgroup.profiles.ProfileKey import org.thoughtcrime.securesms.crypto.SealedSenderAccessUtil @@ -22,7 +21,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.testing.AliceClient import org.thoughtcrime.securesms.testing.BobClient import org.thoughtcrime.securesms.testing.Entry -import org.thoughtcrime.securesms.testing.FakeClientHelpers import org.thoughtcrime.securesms.testing.SignalActivityRule import org.thoughtcrime.securesms.testing.awaitFor import org.whispersystems.signalservice.internal.push.Envelope @@ -51,12 +49,13 @@ class MessageProcessingPerformanceTest { @get:Rule val harness = SignalActivityRule() - private val trustRoot: ECKeyPair = Curve.generateKeyPair() + private val trustRoot: ECKeyPair = ECKeyPair.generate() @Before fun setup() { mockkStatic(SealedSenderAccessUtil::class) - every { SealedSenderAccessUtil.getCertificateValidator() } returns FakeClientHelpers.noOpCertificateValidator + // TODO reinstate this for libsignal 0.76.1 +// every { SealedSenderAccessUtil.getCertificateValidator() } returns FakeClientHelpers.noOpCertificateValidator mockkObject(MessageContentProcessor) every { MessageContentProcessor.create(harness.application) } returns TimingMessageContentProcessor(harness.application) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt index 903c530611..a51b940e2c 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt @@ -4,10 +4,8 @@ import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 import org.signal.libsignal.internal.Native import org.signal.libsignal.internal.NativeHandleGuard -import org.signal.libsignal.metadata.certificate.CertificateValidator import org.signal.libsignal.metadata.certificate.SenderCertificate import org.signal.libsignal.metadata.certificate.ServerCertificate -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.zkgroup.profiles.ProfileKey @@ -26,12 +24,13 @@ import java.util.UUID object FakeClientHelpers { - val noOpCertificateValidator = object : CertificateValidator(null) { - override fun validate(certificate: SenderCertificate, validationTime: Long) = Unit - } + // TODO reinstate this for libsignal 0.76.1 +// val noOpCertificateValidator = object : CertificateValidator(ECKeyPair.generate().publicKey) { +// override fun validate(certificate: SenderCertificate, validationTime: Long) = Unit +// } fun createCertificateFor(trustRoot: ECKeyPair, uuid: UUID, e164: String, deviceId: Int, identityKey: ECPublicKey, expires: Long): SenderCertificate { - val serverKey: ECKeyPair = Curve.generateKeyPair() + val serverKey: ECKeyPair = ECKeyPair.generate() NativeHandleGuard(serverKey.publicKey).use { serverPublicGuard -> NativeHandleGuard(trustRoot.privateKey).use { trustRootPrivateGuard -> val serverCertificate = ServerCertificate(Native.ServerCertificate_New(1, serverPublicGuard.nativeHandle(), trustRootPrivateGuard.nativeHandle())) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt index 9e35a8c33b..c8dc57a4a0 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.testing import org.signal.libsignal.protocol.IdentityKeyPair -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.state.PreKeyRecord import org.signal.libsignal.protocol.util.KeyHelper import org.signal.libsignal.protocol.util.Medium @@ -70,7 +70,7 @@ object MockProvider { fun createPreKeyResponse(identity: IdentityKeyPair = SignalStore.account.aciIdentityKey, deviceId: Int): PreKeyResponse { val signedPreKeyRecord = PreKeyUtil.generateSignedPreKey(SecureRandom().nextInt(Medium.MAX_VALUE), identity.privateKey) - val oneTimePreKey = PreKeyRecord(SecureRandom().nextInt(Medium.MAX_VALUE), Curve.generateKeyPair()) + val oneTimePreKey = PreKeyRecord(SecureRandom().nextInt(Medium.MAX_VALUE), ECKeyPair.generate()) val device = PreKeyResponseItem().apply { this.deviceId = deviceId diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt index e719c81073..800973b5df 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt @@ -10,8 +10,10 @@ import okio.ByteString.Companion.EMPTY import okio.ByteString.Companion.toByteString import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.logging.Log +import org.signal.libsignal.zkgroup.backups.BackupLevel import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.backup.v2.ImportState +import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.backup.v2.database.restoreSelfFromBackup import org.thoughtcrime.securesms.backup.v2.database.restoreWallpaperAttachment import org.thoughtcrime.securesms.backup.v2.proto.AccountData @@ -104,6 +106,7 @@ object AccountDataArchiveProcessor { hasCompletedUsernameOnboarding = signalStore.uiHintValues.hasCompletedUsernameOnboarding(), customChatColors = db.chatColorsTable.getSavedChatColors().toRemoteChatColors(), optimizeOnDeviceStorage = signalStore.backupValues.optimizeStorage, + backupTier = signalStore.backupValues.backupTier.toRemoteBackupTier(), defaultChatStyle = ChatStyleConverter.constructRemoteChatStyle( db = db, chatColors = chatColors, @@ -212,6 +215,7 @@ object AccountDataArchiveProcessor { SignalStore.story.userHasSeenGroupStoryEducationSheet = settings.hasSeenGroupStoryEducationSheet SignalStore.story.viewedReceiptsEnabled = settings.storyViewReceiptsEnabled ?: settings.readReceipts SignalStore.backup.optimizeStorage = settings.optimizeOnDeviceStorage + SignalStore.backup.backupTier = settings.backupTier?.toLocalBackupTier() settings.customChatColors .mapNotNull { chatColor -> @@ -356,4 +360,20 @@ object AccountDataArchiveProcessor { } } } + + private fun MessageBackupTier?.toRemoteBackupTier(): Long? { + return when (this) { + MessageBackupTier.FREE -> BackupLevel.FREE.value.toLong() + MessageBackupTier.PAID -> BackupLevel.PAID.value.toLong() + null -> null + } + } + + private fun Long?.toLocalBackupTier(): MessageBackupTier? { + return when (this) { + BackupLevel.FREE.value.toLong() -> MessageBackupTier.FREE + BackupLevel.PAID.value.toLong() -> MessageBackupTier.PAID + else -> null + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt index 9cb2f0df3b..cb7236c0a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt @@ -8,14 +8,12 @@ package org.thoughtcrime.securesms.backup.v2.processor import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.ExportState import org.thoughtcrime.securesms.backup.v2.ImportState -import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.backup.v2.database.getThreadsForBackup import org.thoughtcrime.securesms.backup.v2.importer.ChatArchiveImporter import org.thoughtcrime.securesms.backup.v2.proto.Chat import org.thoughtcrime.securesms.backup.v2.proto.Frame import org.thoughtcrime.securesms.backup.v2.stream.BackupFrameEmitter import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.RecipientId /** @@ -25,10 +23,7 @@ object ChatArchiveProcessor { val TAG = Log.tag(ChatArchiveProcessor::class.java) fun export(db: SignalDatabase, exportState: ExportState, emitter: BackupFrameEmitter) { - val includeImageWallpapers = SignalStore.backup.backupTier == MessageBackupTier.PAID - Log.i(TAG, "Including wallpapers: $includeImageWallpapers") - - db.threadTable.getThreadsForBackup(db, includeImageWallpapers).use { reader -> + db.threadTable.getThreadsForBackup(db, includeImageWallpapers = true).use { reader -> for (chat in reader) { if (exportState.recipientIds.contains(chat.recipientId)) { exportState.threadIds.add(chat.id) diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java index 512a317129..f2faabfd47 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java @@ -20,7 +20,6 @@ package org.thoughtcrime.securesms.crypto; import org.signal.core.util.Conversions; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.InvalidMessageException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.libsignal.protocol.ecc.ECPublicKey; @@ -62,20 +61,16 @@ public class AsymmetricMasterCipher { } public byte[] encryptBytes(byte[] body) { - try { - ECPublicKey theirPublic = asymmetricMasterSecret.getDjbPublicKey(); - ECKeyPair ourKeyPair = Curve.generateKeyPair(); - byte[] secret = Curve.calculateAgreement(theirPublic, ourKeyPair.getPrivateKey()); - MasterCipher masterCipher = getMasterCipherForSecret(secret); - byte[] encryptedBodyBytes = masterCipher.encryptBytes(body); + ECPublicKey theirPublic = asymmetricMasterSecret.getDjbPublicKey(); + ECKeyPair ourKeyPair = ECKeyPair.generate(); + byte[] secret = ourKeyPair.getPrivateKey().calculateAgreement(theirPublic); + MasterCipher masterCipher = getMasterCipherForSecret(secret); + byte[] encryptedBodyBytes = masterCipher.encryptBytes(body); - PublicKey ourPublicKey = new PublicKey(31337, ourKeyPair.getPublicKey()); - byte[] publicKeyBytes = ourPublicKey.serialize(); + PublicKey ourPublicKey = new PublicKey(31337, ourKeyPair.getPublicKey()); + byte[] publicKeyBytes = ourPublicKey.serialize(); - return Util.combine(publicKeyBytes, encryptedBodyBytes); - } catch (InvalidKeyException e) { - throw new AssertionError(e); - } + return Util.combine(publicKeyBytes, encryptedBodyBytes); } public byte[] decryptBytes(byte[] combined) throws IOException, InvalidMessageException { @@ -84,7 +79,7 @@ public class AsymmetricMasterCipher { PublicKey theirPublicKey = new PublicKey(parts[0], 0); ECPrivateKey ourPrivateKey = asymmetricMasterSecret.getPrivateKey(); - byte[] secret = Curve.calculateAgreement(theirPublicKey.getKey(), ourPrivateKey); + byte[] secret = ourPrivateKey.calculateAgreement(theirPublicKey.getKey()); MasterCipher masterCipher = getMasterCipherForSecret(secret); return masterCipher.decryptBytes(parts[1]); diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java index f028211923..fe4b6eeff0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java @@ -19,7 +19,6 @@ package org.thoughtcrime.securesms.crypto; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.IdentityKeyPair; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; @@ -32,7 +31,7 @@ import org.signal.libsignal.protocol.ecc.ECPrivateKey; public class IdentityKeyUtil { public static IdentityKeyPair generateIdentityKeyPair() { - ECKeyPair djbKeyPair = Curve.generateKeyPair(); + ECKeyPair djbKeyPair = ECKeyPair.generate(); IdentityKey djbIdentityKey = new IdentityKey(djbKeyPair.getPublicKey()); ECPrivateKey djbPrivateKey = djbKeyPair.getPrivateKey(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterCipher.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterCipher.java index 0e0f19968e..a1b11d1fc8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterCipher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterCipher.java @@ -21,7 +21,6 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.core.util.Base64; import org.signal.core.util.Hex; @@ -89,7 +88,7 @@ public class MasterCipher { throws org.signal.libsignal.protocol.InvalidKeyException { try { - return Curve.decodePrivatePoint(decryptBytes(key)); + return new ECPrivateKey(decryptBytes(key)); } catch (InvalidMessageException ime) { throw new org.signal.libsignal.protocol.InvalidKeyException(ime); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java index ece764c290..85b8c46d4f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java @@ -26,7 +26,6 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.libsignal.protocol.ecc.ECPublicKey; @@ -139,7 +138,7 @@ public class MasterSecretUtil { ECPrivateKey djbPrivateKey = null; if (djbPublicBytes != null) { - djbPublicKey = Curve.decodePoint(djbPublicBytes, 0); + djbPublicKey = new ECPublicKey(djbPublicBytes); } if (masterSecret != null) { @@ -160,7 +159,7 @@ public class MasterSecretUtil { MasterSecret masterSecret) { MasterCipher masterCipher = new MasterCipher(masterSecret); - ECKeyPair keyPair = Curve.generateKeyPair(); + ECKeyPair keyPair = ECKeyPair.generate(); save(context, ASYMMETRIC_LOCAL_PUBLIC_DJB, keyPair.getPublicKey().serialize()); save(context, ASYMMETRIC_LOCAL_PRIVATE_DJB, masterCipher.encryptKey(keyPair.getPrivateKey())); diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/PreKeyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/PreKeyUtil.java index c556281d43..13326c6e40 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/PreKeyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/PreKeyUtil.java @@ -20,9 +20,7 @@ package org.thoughtcrime.securesms.crypto; import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; -import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.InvalidKeyIdException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.libsignal.protocol.kem.KEMKeyPair; @@ -66,7 +64,7 @@ public class PreKeyUtil { for (int i = 0; i < BATCH_SIZE; i++) { int preKeyId = (startingId + i) % Medium.MAX_VALUE; - ECKeyPair keyPair = Curve.generateKeyPair(); + ECKeyPair keyPair = ECKeyPair.generate(); PreKeyRecord record = new PreKeyRecord(preKeyId, keyPair); records.add(record); @@ -155,14 +153,10 @@ public class PreKeyUtil { public synchronized static @NonNull SignedPreKeyRecord generateSignedPreKey(int signedPreKeyId, @NonNull ECPrivateKey privateKey) { Log.i(TAG, "Generating signed prekeys..."); - try { - ECKeyPair keyPair = Curve.generateKeyPair(); - byte[] signature = Curve.calculateSignature(privateKey, keyPair.getPublicKey().serialize()); + ECKeyPair keyPair = ECKeyPair.generate(); + byte[] signature = privateKey.calculateSignature(keyPair.getPublicKey().serialize()); - return new SignedPreKeyRecord(signedPreKeyId, System.currentTimeMillis(), keyPair, signature); - } catch (InvalidKeyException e) { - throw new AssertionError(e); - } + return new SignedPreKeyRecord(signedPreKeyId, System.currentTimeMillis(), keyPair, signature); } public synchronized static void storeSignedPreKey(@NonNull SignalProtocolStore protocolStore, @NonNull PreKeyMetadataStore metadataStore, SignedPreKeyRecord record) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/PublicKey.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/PublicKey.java index 70460bf38f..c12f588f6a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/PublicKey.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/PublicKey.java @@ -21,12 +21,9 @@ import org.signal.core.util.Conversions; import org.signal.core.util.logging.Log; import org.signal.core.util.Hex; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.thoughtcrime.securesms.util.Util; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; public class PublicKey { @@ -49,7 +46,7 @@ public class PublicKey { throw new InvalidKeyException("Provided bytes are too short."); this.id = Conversions.byteArrayToMedium(bytes, offset); - this.publicKey = Curve.decodePoint(bytes, offset + 3); + this.publicKey = new ECPublicKey(bytes, offset + 3); } public int getType() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java index 213104bbd8..72029d3bdf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java @@ -13,7 +13,6 @@ import org.signal.libsignal.metadata.certificate.CertificateValidator; import org.signal.libsignal.metadata.certificate.InvalidCertificateException; import org.signal.libsignal.metadata.certificate.SenderCertificate; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.BuildConfig; @@ -186,7 +185,7 @@ public class SealedSenderAccessUtil { private static CertificateValidator buildCertificateValidator() { try { - ECPublicKey unidentifiedSenderTrustRoot = Curve.decodePoint(Base64.decode(BuildConfig.UNIDENTIFIED_SENDER_TRUST_ROOT), 0); + ECPublicKey unidentifiedSenderTrustRoot = new ECPublicKey(Base64.decode(BuildConfig.UNIDENTIFIED_SENDER_TRUST_ROOT)); return new CertificateValidator(unidentifiedSenderTrustRoot); } catch (InvalidKeyException | IOException e) { throw new AssertionError(e); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt index ec3c629ed0..d68e1facfa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt @@ -10,8 +10,9 @@ import org.signal.core.util.logging.Log import org.signal.core.util.requireNonNullString import org.signal.core.util.update import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair +import org.signal.libsignal.protocol.ecc.ECPrivateKey +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.state.PreKeyRecord import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException @@ -47,8 +48,8 @@ class OneTimePreKeyTable(context: Context, databaseHelper: SignalDatabase) : Dat readableDatabase.query(TABLE_NAME, null, "$ACCOUNT_ID = ? AND $KEY_ID = ?", SqlUtil.buildArgs(serviceId.toAccountId(), keyId), null, null, null).use { cursor -> if (cursor.moveToFirst()) { try { - val publicKey = Curve.decodePoint(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY)), 0) - val privateKey = Curve.decodePrivatePoint(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) + val publicKey = ECPublicKey(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY))) + val privateKey = ECPrivateKey(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) return PreKeyRecord(keyId, ECKeyPair(publicKey, privateKey)) } catch (e: InvalidKeyException) { Log.w(TAG, e) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt index 5fb5f7ba60..c6e722c3a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt @@ -10,8 +10,9 @@ import org.signal.core.util.requireInt import org.signal.core.util.requireLong import org.signal.core.util.requireNonNullString import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair +import org.signal.libsignal.protocol.ecc.ECPrivateKey +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.state.SignedPreKeyRecord import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException @@ -50,8 +51,8 @@ class SignedPreKeyTable(context: Context, databaseHelper: SignalDatabase) : Data readableDatabase.query(TABLE_NAME, null, "$ACCOUNT_ID = ? AND $KEY_ID = ?", SqlUtil.buildArgs(serviceId.toAccountId(), keyId), null, null, null).use { cursor -> if (cursor.moveToFirst()) { try { - val publicKey = Curve.decodePoint(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY)), 0) - val privateKey = Curve.decodePrivatePoint(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) + val publicKey = ECPublicKey(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY))) + val privateKey = ECPrivateKey(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) val signature = Base64.decode(cursor.requireNonNullString(SIGNATURE)) val timestamp = cursor.requireLong(TIMESTAMP) return SignedPreKeyRecord(keyId, timestamp, ECKeyPair(publicKey, privateKey), signature) @@ -72,8 +73,8 @@ class SignedPreKeyTable(context: Context, databaseHelper: SignalDatabase) : Data while (cursor.moveToNext()) { try { val keyId = cursor.requireInt(KEY_ID) - val publicKey = Curve.decodePoint(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY)), 0) - val privateKey = Curve.decodePrivatePoint(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) + val publicKey = ECPublicKey(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY))) + val privateKey = ECPrivateKey(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) val signature = Base64.decode(cursor.requireNonNullString(SIGNATURE)) val timestamp = cursor.requireLong(TIMESTAMP) results.add(SignedPreKeyRecord(keyId, timestamp, ECKeyPair(publicKey, privateKey), signature)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt index 78425638f3..8bae6862e8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt @@ -9,7 +9,7 @@ import org.signal.core.util.logging.Log import org.signal.core.util.nullIfBlank import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECPrivateKey import org.signal.libsignal.protocol.util.Medium import org.thoughtcrime.securesms.crypto.IdentityKeyUtil import org.thoughtcrime.securesms.crypto.MasterCipher @@ -228,7 +228,7 @@ class AccountValues internal constructor(store: KeyValueStore, context: Context) require(store.containsKey(KEY_ACI_IDENTITY_PUBLIC_KEY)) { "Not yet set!" } return IdentityKeyPair( IdentityKey(getBlob(KEY_ACI_IDENTITY_PUBLIC_KEY, null)), - Curve.decodePrivatePoint(getBlob(KEY_ACI_IDENTITY_PRIVATE_KEY, null)) + ECPrivateKey(getBlob(KEY_ACI_IDENTITY_PRIVATE_KEY, null)) ) } @@ -238,7 +238,7 @@ class AccountValues internal constructor(store: KeyValueStore, context: Context) require(store.containsKey(KEY_PNI_IDENTITY_PUBLIC_KEY)) { "Not yet set!" } return IdentityKeyPair( IdentityKey(getBlob(KEY_PNI_IDENTITY_PUBLIC_KEY, null)), - Curve.decodePrivatePoint(getBlob(KEY_PNI_IDENTITY_PRIVATE_KEY, null)) + ECPrivateKey(getBlob(KEY_PNI_IDENTITY_PRIVATE_KEY, null)) ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt index 71617baf7c..2b81fe92ee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt @@ -9,7 +9,7 @@ import org.signal.core.util.logging.logD import org.signal.core.util.logging.logI import org.signal.core.util.logging.logW import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.thoughtcrime.securesms.backup.BackupFileIOError import org.thoughtcrime.securesms.backup.v2.ArchiveValidator import org.thoughtcrime.securesms.backup.v2.BackupRepository @@ -149,7 +149,7 @@ object LinkDeviceRepository { val ephemeralId: String = uri.getQueryParameter("uuid") ?: return LinkDeviceResult.BadCode val publicKey = try { val publicKeyEncoded: String = uri.getQueryParameter("pub_key") ?: return LinkDeviceResult.BadCode - Curve.decodePoint(Base64.decode(publicKeyEncoded), 0) + ECPublicKey(Base64.decode(publicKeyEncoded)) } catch (e: InvalidKeyException) { return LinkDeviceResult.KeyError } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/secondary/DeviceNameCipher.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/secondary/DeviceNameCipher.kt index 74b28b01f6..b9f89fa453 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/secondary/DeviceNameCipher.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/secondary/DeviceNameCipher.kt @@ -4,9 +4,9 @@ import okio.ByteString.Companion.toByteString import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.ecc.ECPrivateKey +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.util.ByteUtil import org.thoughtcrime.securesms.devicelist.protos.DeviceName import java.nio.charset.Charset @@ -28,8 +28,8 @@ object DeviceNameCipher { @JvmStatic fun encryptDeviceName(plaintext: ByteArray, identityKeyPair: IdentityKeyPair): ByteArray { - val ephemeralKeyPair: ECKeyPair = Curve.generateKeyPair() - val masterSecret: ByteArray = Curve.calculateAgreement(identityKeyPair.publicKey.publicKey, ephemeralKeyPair.privateKey) + val ephemeralKeyPair: ECKeyPair = ECKeyPair.generate() + val masterSecret: ByteArray = ephemeralKeyPair.privateKey.calculateAgreement(identityKeyPair.publicKey.publicKey) val syntheticIv: ByteArray = computeSyntheticIv(masterSecret, plaintext) val cipherKey: ByteArray = computeCipherKey(masterSecret, syntheticIv) @@ -58,8 +58,8 @@ object DeviceNameCipher { val syntheticIv = deviceName.syntheticIv.toByteArray() val cipherText = deviceName.ciphertext.toByteArray() val identityKey: ECPrivateKey = identityKeyPair.privateKey - val ephemeralPublic = Curve.decodePoint(deviceName.ephemeralPublic.toByteArray(), 0) - val masterSecret = Curve.calculateAgreement(ephemeralPublic, identityKey) + val ephemeralPublic = ECPublicKey(deviceName.ephemeralPublic.toByteArray()) + val masterSecret = identityKey.calculateAgreement(ephemeralPublic) val mac = Mac.getInstance("HmacSHA256") mac.init(SecretKeySpec(masterSecret, "HmacSHA256")) diff --git a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt index aefd796c86..9cace65a79 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt @@ -15,7 +15,7 @@ import org.signal.core.util.Base64.decode import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.registration.proto.RegistrationProvisionMessage import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.database.SignalDatabase @@ -62,13 +62,14 @@ object QuickRegistrationRepository { try { val ephemeralId: String? = uri.getQueryParameter("uuid") val publicKeyEncoded: String? = uri.getQueryParameter("pub_key") - val publicKey = Curve.decodePoint(publicKeyEncoded?.let { decode(it) }, 0) if (ephemeralId == null || publicKeyEncoded == null) { Log.w(TAG, "Invalid link data hasId: ${ephemeralId != null} hasKey: ${publicKeyEncoded != null}") return TransferAccountResult.FAILED } + val publicKey = ECPublicKey(decode(publicKeyEncoded)) + SignalNetwork .provisioning .sendReRegisterDeviceProvisioningMessage( diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcUtil.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcUtil.java index c45a8ad9b4..0de17f8207 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcUtil.java @@ -6,7 +6,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.ringrtc.CallManager; import org.signal.ringrtc.GroupCall; @@ -29,7 +28,7 @@ public final class WebRtcUtil { private WebRtcUtil() {} public static @NonNull byte[] getPublicKeyBytes(@NonNull byte[] identityKey) throws InvalidKeyException { - ECPublicKey key = Curve.decodePoint(identityKey, 0); + ECPublicKey key = new ECPublicKey(identityKey); return key.getPublicKeyBytes(); } diff --git a/app/src/main/protowire/Backup.proto b/app/src/main/protowire/Backup.proto index c7b3efc37d..6263b4ee7b 100644 --- a/app/src/main/protowire/Backup.proto +++ b/app/src/main/protowire/Backup.proto @@ -88,6 +88,8 @@ message AccountData { ChatStyle defaultChatStyle = 18; repeated ChatStyle.CustomChatColor customChatColors = 19; bool optimizeOnDeviceStorage = 20; + // See zkgroup for integer particular values. Unset if backups are not enabled. + optional uint64 backupTier = 21; } message SubscriberData { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0b79d06e4a..bedd484fe1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ androidx-window = "1.3.0" glide = "4.15.1" gradle = "8.9.0" kotlin = "2.1.0" -libsignal-client = "0.74.1" +libsignal-client = "0.76.0" mp4parser = "1.9.39" android-gradle-plugin = "8.7.2" accompanist = "0.28.0" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 1c4d3161cf..e5ee846249 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -7369,20 +7369,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + - - + + - - - + + + - - + + diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt index 0e917cce8c..00572c5d0b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt @@ -384,7 +384,7 @@ class ArchiveApi( val presentation: ByteArray, val signedPresentation: ByteArray ) { - val publicKey: ECPublicKey = privateKey.publicKey() + val publicKey: ECPublicKey = privateKey.getPublicKey() companion object { fun from(backupKey: BackupKey, aci: ACI, credential: BackupAuthCredential, backupServerPublicParams: GenericServerPublicParams): CredentialPresentationData { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/Crypto.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/Crypto.kt index f65df5dbba..0744618901 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/Crypto.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/Crypto.kt @@ -13,6 +13,6 @@ import org.signal.libsignal.protocol.kdf.HKDF object Crypto { fun hkdf(inputKeyMaterial: ByteArray, info: ByteArray, outputLength: Int, salt: ByteArray? = null): ByteArray { - return HKDF.deriveSecrets(inputKeyMaterial, salt, info, outputLength) + return HKDF.deriveSecrets(inputKeyMaterial, salt ?: byteArrayOf(), info, outputLength) } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt index a0066c7382..f86a5ecb82 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt @@ -218,17 +218,26 @@ class KeysApi( signedPreKey = device.getSignedPreKey().publicKey signedPreKeyId = device.getSignedPreKey().keyId signedPreKeySignature = device.getSignedPreKey().signature + } else { + Log.w(TAG, "No signed prekey for device! Skipping.") + continue } if (device.getPreKey() != null) { preKeyId = device.getPreKey().keyId preKey = device.getPreKey().publicKey + } else { + Log.w(TAG, "No prekey for device! Skipping.") + continue } if (device.getKyberPreKey() != null) { kyberPreKey = device.getKyberPreKey().publicKey kyberPreKeyId = device.getKyberPreKey().keyId kyberPreKeySignature = device.getKyberPreKey().signature + } else { + Log.w(TAG, "No kyber prekey for device! Skipping.") + continue } bundles.add( diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/PrimaryProvisioningCipher.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/PrimaryProvisioningCipher.java index 2ff6e03052..7b262cfae8 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/PrimaryProvisioningCipher.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/PrimaryProvisioningCipher.java @@ -7,8 +7,8 @@ package org.whispersystems.signalservice.internal.crypto; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; +import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.protocol.kdf.HKDF; import org.signal.registration.proto.RegistrationProvisionEnvelope; @@ -39,8 +39,8 @@ public class PrimaryProvisioningCipher { } public byte[] encrypt(ProvisionMessage message) throws InvalidKeyException { - ECKeyPair ourKeyPair = Curve.generateKeyPair(); - byte[] sharedSecret = Curve.calculateAgreement(theirPublicKey, ourKeyPair.getPrivateKey()); + ECKeyPair ourKeyPair = ECKeyPair.generate(); + byte[] sharedSecret = ourKeyPair.getPrivateKey().calculateAgreement(theirPublicKey); byte[] derivedSecret = HKDF.deriveSecrets(sharedSecret, PROVISIONING_MESSAGE.getBytes(), 64); byte[][] parts = Util.split(derivedSecret, 32, 32); @@ -57,8 +57,8 @@ public class PrimaryProvisioningCipher { } public byte[] encrypt(RegistrationProvisionMessage message) throws InvalidKeyException { - ECKeyPair ourKeyPair = Curve.generateKeyPair(); - byte[] sharedSecret = Curve.calculateAgreement(theirPublicKey, ourKeyPair.getPrivateKey()); + ECKeyPair ourKeyPair = ECKeyPair.generate(); + byte[] sharedSecret = ourKeyPair.getPrivateKey().calculateAgreement(theirPublicKey); byte[] derivedSecret = HKDF.deriveSecrets(sharedSecret, PROVISIONING_MESSAGE.getBytes(), 64); byte[][] parts = Util.split(derivedSecret, 32, 32); diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipher.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipher.kt index bcadec20dd..d7508fc758 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipher.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipher.kt @@ -8,7 +8,7 @@ package org.whispersystems.signalservice.internal.crypto import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECPrivateKey import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.kdf.HKDF import org.signal.libsignal.zkgroup.profiles.ProfileKey @@ -58,7 +58,7 @@ class SecondaryProvisioningCipher(private val secondaryIdentityKeyPair: Identity return ProvisionDecryptResult.Success( uuid = UuidUtil.parseOrThrow(provisioningMessage.aci), e164 = provisioningMessage.number!!, - identityKeyPair = IdentityKeyPair(IdentityKey(provisioningMessage.aciIdentityKeyPublic!!.toByteArray()), Curve.decodePrivatePoint(provisioningMessage.aciIdentityKeyPrivate!!.toByteArray())), + identityKeyPair = IdentityKeyPair(IdentityKey(provisioningMessage.aciIdentityKeyPublic!!.toByteArray()), ECPrivateKey(provisioningMessage.aciIdentityKeyPrivate!!.toByteArray())), profileKey = ProfileKey(provisioningMessage.profileKey!!.toByteArray()), areReadReceiptsEnabled = provisioningMessage.readReceipts == true, primaryUserAgent = provisioningMessage.userAgent, @@ -99,7 +99,7 @@ class SecondaryProvisioningCipher(private val secondaryIdentityKeyPair: Identity val message = body.sliceArray(0 until body.size - MAC_LENGTH) val cipherText = body.sliceArray((1 + IV_LENGTH) until body.size - MAC_LENGTH) - val sharedSecret = Curve.calculateAgreement(ECPublicKey(primaryEphemeralPublicKey), secondaryIdentityKeyPair.privateKey) + val sharedSecret = secondaryIdentityKeyPair.privateKey.calculateAgreement(ECPublicKey(primaryEphemeralPublicKey)) val derivedSecret: ByteArray = HKDF.deriveSecrets(sharedSecret, PrimaryProvisioningCipher.PROVISIONING_MESSAGE.toByteArray(), 64) val cipherKey = derivedSecret.sliceArray(0 until 32) diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PreKeyEntity.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PreKeyEntity.java index 488f62d119..1b0255413b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PreKeyEntity.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PreKeyEntity.java @@ -17,7 +17,6 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.core.util.Base64; @@ -59,7 +58,7 @@ public class PreKeyEntity { @Override public ECPublicKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { try { - return Curve.decodePoint(Base64.decode(p.getValueAsString()), 0); + return new ECPublicKey(Base64.decode(p.getValueAsString())); } catch (InvalidKeyException e) { throw new IOException(e); } diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java index e58e428f4a..b485560d9d 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java @@ -1,15 +1,8 @@ package org.whispersystems.signalservice.api.messages.multidevice; import org.junit.Test; -import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; -import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.zkgroup.InvalidInputException; -import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; -import org.whispersystems.signalservice.internal.util.Util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt index bf2e1b7e9e..c94b767184 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt @@ -12,7 +12,7 @@ import okio.ByteString import org.junit.Test import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.zkgroup.profiles.ProfileKey import org.whispersystems.signalservice.internal.push.ProvisionEnvelope import org.whispersystems.signalservice.internal.push.ProvisionMessage @@ -59,7 +59,7 @@ class SecondaryProvisioningCipherTest { companion object { fun generateIdentityKeyPair(): IdentityKeyPair { - val djbKeyPair = Curve.generateKeyPair() + val djbKeyPair = ECKeyPair.generate() val djbIdentityKey = IdentityKey(djbKeyPair.publicKey) val djbPrivateKey = djbKeyPair.privateKey diff --git a/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt b/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt index b860037443..09e3317bbc 100644 --- a/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt +++ b/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt @@ -10,10 +10,11 @@ import org.signal.libsignal.metadata.certificate.ServerCertificate import org.signal.libsignal.protocol.SessionBuilder import org.signal.libsignal.protocol.SignalProtocolAddress import org.signal.libsignal.protocol.UsePqRatchet -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.groups.GroupSessionBuilder +import org.signal.libsignal.protocol.kem.KEMKeyPair +import org.signal.libsignal.protocol.kem.KEMKeyType import org.signal.libsignal.protocol.message.SenderKeyDistributionMessage import org.signal.libsignal.protocol.state.PreKeyBundle import org.signal.libsignal.protocol.state.PreKeyRecord @@ -46,7 +47,7 @@ import kotlin.random.Random */ class SignalClient { companion object { - private val trustRoot: ECKeyPair = Curve.generateKeyPair() + private val trustRoot: ECKeyPair = ECKeyPair.generate() } private val lock = TestSessionLock() @@ -167,22 +168,23 @@ class SignalClient { private fun createPreKeyBundle(): PreKeyBundle { val prekeyId = prekeyIndex++ - val preKeyRecord = PreKeyRecord(prekeyId, Curve.generateKeyPair()) - val signedPreKeyPair = Curve.generateKeyPair() - val signedPreKeySignature = Curve.calculateSignature(store.identityKeyPair.privateKey, signedPreKeyPair.publicKey.serialize()) + val preKeyRecord = PreKeyRecord(prekeyId, ECKeyPair.generate()) + val signedPreKeyPair = ECKeyPair.generate() + val signedPreKeySignature = store.identityKeyPair.privateKey.calculateSignature(signedPreKeyPair.publicKey.serialize()) + val kyerPair = KEMKeyPair.generate(KEMKeyType.KYBER_1024) store.storePreKey(prekeyId, preKeyRecord) store.storeSignedPreKey(prekeyId, SignedPreKeyRecord(prekeyId, System.currentTimeMillis(), signedPreKeyPair, signedPreKeySignature)) return PreKeyBundle( prekeyId, prekeyId, prekeyId, preKeyRecord.keyPair.publicKey, prekeyId, signedPreKeyPair.publicKey, signedPreKeySignature, store.identityKeyPair.publicKey, - PreKeyBundle.NULL_PRE_KEY_ID, null, null + PreKeyBundle.NULL_PRE_KEY_ID, kyerPair.publicKey, kyerPair.secretKey.serialize() ) } } private fun createCertificateFor(trustRoot: ECKeyPair, uuid: UUID, e164: String, deviceId: Int, identityKey: ECPublicKey, expires: Long): SenderCertificate { - val serverKey: ECKeyPair = Curve.generateKeyPair() + val serverKey: ECKeyPair = ECKeyPair.generate() NativeHandleGuard(serverKey.publicKey).use { serverPublicGuard -> NativeHandleGuard(trustRoot.privateKey).use { trustRootPrivateGuard -> val serverCertificate = ServerCertificate(Native.ServerCertificate_New(1, serverPublicGuard.nativeHandle(), trustRootPrivateGuard.nativeHandle()))