diff --git a/Telegram-iOS/en.lproj/Localizable.strings b/Telegram-iOS/en.lproj/Localizable.strings index 95c92c2f98..ea1673983c 100644 --- a/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram-iOS/en.lproj/Localizable.strings @@ -4803,7 +4803,7 @@ Any member of this group will be able to see messages in the channel."; "Wallet.Send.Title" = "Send Grams"; "Wallet.Send.AddressHeader" = "RECIPIENT WALLET ADDRESS"; "Wallet.Send.AddressText" = "Enter wallet address..."; -"Wallet.Send.AddressInfo" = "Copy the 48-letter address of the recipient here or ask them to send you a ton:// link."; +"Wallet.Send.AddressInfo" = "Paste the 48-letter address of the recipient here or ask them to send you a ton:// link."; "Wallet.Send.Balance" = "Balance: %@"; "Wallet.Send.AmountText" = "Grams to send"; "Wallet.Send.Confirmation" = "Confirmation"; @@ -4812,23 +4812,26 @@ Any member of this group will be able to see messages in the channel."; "Wallet.Send.Send" = "Send"; "Wallet.Settings.Title" = "Wallet Settings"; "Wallet.Settings.DeleteWallet" = "Delete Wallet"; +"Wallet.Settings.DeleteWalletInfo" = "This will disconnect the wallet from this app. You will be able to restore your wallet using 24 secret words – or import another wallet.\n\nWallets are located in the TON Blockchain, which is not controlled by Telegram. If you want a wallet to be deleted, simply transfer all the grams from it and leave it empty."; "Wallet.Intro.NotNow" = "Not Now"; "Wallet.Intro.ImportExisting" = "Import existing wallet"; "Wallet.Intro.CreateErrorTitle" = "An Error Occurred"; "Wallet.Intro.CreateErrorText" = "Sorry. Please try again."; "Wallet.Intro.Title" = "Gram Wallet"; -"Wallet.Intro.Text" = "Gram wallet allows you to make fast and secure blockchain-based payments without intermediaries."; +"Wallet.Intro.Text" = "The gram wallet allows you to make fast and secure blockchain-based payments without intermediaries."; "Wallet.Intro.CreateWallet" = "Create My Wallet"; -"Wallet.Intro.Terms" = "By creating the wallet you accept\n[Terms of Conditions]()."; +"Wallet.Intro.Terms" = "By creating a wallet you accept the\n[Terms of Conditions]()."; "Wallet.Intro.TermsUrl" = "https://telegram.org/tos/wallet"; "Wallet.Created.Title" = "Congratulations"; "Wallet.Created.Text" = "Your Gram wallet has just been created. Only you control it.\n\nTo be able to always have access to it, please write down secret words and\nset up a secure passcode."; "Wallet.Created.Proceed" = "Proceed"; +"Wallet.Created.ExportErrorTitle" = "Error"; +"Wallet.Created.ExportErrorText" = "Encryption error. Please make sure you have enabled a device passcode in iOS settings and try again."; "Wallet.Completed.Title" = "Ready to go!"; "Wallet.Completed.Text" = "You’re all set. Now you have a wallet that only you control - directly, without middlemen or bankers."; "Wallet.Completed.ViewWallet" = "View My Wallet"; "Wallet.RestoreFailed.Title" = "Too Bad"; -"Wallet.RestoreFailed.Text" = "Without the secret words, you can't'nrestore access to the wallet."; +"Wallet.RestoreFailed.Text" = "Without the secret words, you can't\nrestore access to your wallet."; "Wallet.RestoreFailed.CreateWallet" = "Create a New Wallet"; "Wallet.RestoreFailed.EnterWords" = "Enter 24 words"; "Wallet.Sending.Title" = "Sending Grams"; @@ -4837,13 +4840,13 @@ Any member of this group will be able to see messages in the channel."; "Wallet.Sent.Title" = "Done!"; "Wallet.Sent.Text" = "**%@ Grams** have been sent."; "Wallet.Sent.ViewWallet" = "View My Wallet"; -"Wallet.SecureStorageNotAvailable.Title" = "Setup Passcode"; -"Wallet.SecureStorageNotAvailable.Text" = "Please set up Passcode on your device to enable secure payments with your Gram wallet."; +"Wallet.SecureStorageNotAvailable.Title" = "Set a Passcode"; +"Wallet.SecureStorageNotAvailable.Text" = "Please set up a Passcode on your device to enable secure payments with your Gram wallet."; "Wallet.SecureStorageReset.Title" = "Security Settings Have Changed"; "Wallet.SecureStorageReset.BiometryTouchId" = "Touch ID"; "Wallet.SecureStorageReset.BiometryFaceId" = "Face ID"; -"Wallet.SecureStorageReset.BiometryText" = "Unfortunately, your wallet is no longer available because your system Passcode or %@ has been turned off."; -"Wallet.SecureStorageReset.PasscodeText" = "Unfortunately, your wallet is no longer available because your system Passcode has been turned off."; +"Wallet.SecureStorageReset.BiometryText" = "Unfortunately, your wallet is no longer available because your system Passcode or %@ has been turned off. Please enable them before proceeding."; +"Wallet.SecureStorageReset.PasscodeText" = "Unfortunately, your wallet is no longer available because your system Passcode has been turned off. Please enable it before proceeding."; "Wallet.SecureStorageChanged.BiometryText" = "Unfortunately, your wallet is no longer available due to the change in your system security settings (Passcode/%@). To restore your wallet, tap \"Import existing wallet\"."; "Wallet.SecureStorageChanged.PasscodeText" = "Unfortunately, your wallet is no longer available due to the change in your system security settings (Passcode). To restore your wallet, tap \"Import existing wallet\"."; "Wallet.SecureStorageChanged.ImportWallet" = "Import Existing Wallet"; @@ -4866,7 +4869,7 @@ Any member of this group will be able to see messages in the channel."; "Wallet.WordImport.Title" = "24 Secret Words"; "Wallet.WordImport.Text" = "Please restore access to your wallet by\nentering the 24 secret words you wrote down when creating the wallet."; "Wallet.WordImport.Continue" = "Continue"; -"Wallet.WordImport.CanNotRemember" = "I don't have those"; +"Wallet.WordImport.CanNotRemember" = "I don't have them"; "Wallet.WordImport.IncorrectTitle" = "Incorrect words"; "Wallet.WordImport.IncorrectText" = "Sorry, you have entered incorrect secret words. Please double check and try again."; "Wallet.Words.Title" = "24 Secret Words"; @@ -4878,5 +4881,5 @@ Any member of this group will be able to see messages in the channel."; "Wallet.Words.NotDoneResponse" = "Apologies Accepted"; "Wallet.Send.ErrorInvalidAddress" = "Invalid wallet address. Please correct and try again."; -"Wallet.Send.ErrorDecryptionFailed" = "Encryption error. Please check device passcode settings and try again."; +"Wallet.Send.ErrorDecryptionFailed" = "Please make sure that your device has a passcode set in iOS Settings and try again."; "Wallet.Send.SendAnyway" = "Send Anyway"; diff --git a/Telegram_Buck.xcworkspace/buck-project.meta.json b/Telegram_Buck.xcworkspace/buck-project.meta.json index 19305fd247..ad1d702592 100644 --- a/Telegram_Buck.xcworkspace/buck-project.meta.json +++ b/Telegram_Buck.xcworkspace/buck-project.meta.json @@ -1 +1 @@ -{"required-targets":["//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_ac3_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_adts_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avcodec.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avdct.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avfft.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_d3d11va.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dirac.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dv_profile.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dxva2.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_jni.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_mediacodec.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_qsv.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vaapi.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vdpau.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_videotoolbox.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vorbis_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_xvmc.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_avformat.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_avio.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_adler32.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_aes.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_aes_ctr.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_attributes.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_audio_fifo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avassert.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avconfig.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avstring.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avutil.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_base64.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_blowfish.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_bprint.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_bswap.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_buffer.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_camellia.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_cast5.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_channel_layout.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_common.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_cpu.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_crc.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_des.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_dict.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_display.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_downmix_info.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_encryption_info.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_error.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_eval.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_ffversion.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_fifo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_file.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_frame.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hash.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hmac.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_cuda.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_d3d11va.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_drm.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_dxva2.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_mediacodec.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_qsv.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_vaapi.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_vdpau.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_videotoolbox.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_imgutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_intfloat.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_intreadwrite.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_lfg.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_log.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_lzo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_macros.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mastering_display_metadata.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mathematics.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_md5.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mem.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_motion_vector.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_murmur3.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_opt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_parseutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixdesc.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixelutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixfmt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_random_seed.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_rational.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_rc4.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_replaygain.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_ripemd.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_samplefmt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_sha.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_sha512.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_spherical.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_stereo3d.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_tea.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_threadmessage.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_time.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_timecode.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_timestamp.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_tree.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_twofish.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_xtea.h","//submodules/FFMpeg:ffmpeg_header_libswresample_sub_swresample.h","//submodules/FFMpeg:ffmpeg_header_libswresample_sub_version.h","//submodules/FFMpeg:libffmpeg_build","//submodules/Opus:opus_lib_file","//submodules/WebP:WebP_lib_file","//submodules/openssl:openssl_build_merged","//submodules/openssl:openssl_header_openssl_sub_aes.h","//submodules/openssl:openssl_header_openssl_sub_asn1.h","//submodules/openssl:openssl_header_openssl_sub_asn1_mac.h","//submodules/openssl:openssl_header_openssl_sub_asn1err.h","//submodules/openssl:openssl_header_openssl_sub_asn1t.h","//submodules/openssl:openssl_header_openssl_sub_async.h","//submodules/openssl:openssl_header_openssl_sub_asyncerr.h","//submodules/openssl:openssl_header_openssl_sub_bio.h","//submodules/openssl:openssl_header_openssl_sub_bioerr.h","//submodules/openssl:openssl_header_openssl_sub_blowfish.h","//submodules/openssl:openssl_header_openssl_sub_bn.h","//submodules/openssl:openssl_header_openssl_sub_bnerr.h","//submodules/openssl:openssl_header_openssl_sub_buffer.h","//submodules/openssl:openssl_header_openssl_sub_buffererr.h","//submodules/openssl:openssl_header_openssl_sub_camellia.h","//submodules/openssl:openssl_header_openssl_sub_cast.h","//submodules/openssl:openssl_header_openssl_sub_cmac.h","//submodules/openssl:openssl_header_openssl_sub_cms.h","//submodules/openssl:openssl_header_openssl_sub_cmserr.h","//submodules/openssl:openssl_header_openssl_sub_comp.h","//submodules/openssl:openssl_header_openssl_sub_comperr.h","//submodules/openssl:openssl_header_openssl_sub_conf.h","//submodules/openssl:openssl_header_openssl_sub_conf_api.h","//submodules/openssl:openssl_header_openssl_sub_conferr.h","//submodules/openssl:openssl_header_openssl_sub_crypto.h","//submodules/openssl:openssl_header_openssl_sub_cryptoerr.h","//submodules/openssl:openssl_header_openssl_sub_ct.h","//submodules/openssl:openssl_header_openssl_sub_cterr.h","//submodules/openssl:openssl_header_openssl_sub_des.h","//submodules/openssl:openssl_header_openssl_sub_dh.h","//submodules/openssl:openssl_header_openssl_sub_dherr.h","//submodules/openssl:openssl_header_openssl_sub_dsa.h","//submodules/openssl:openssl_header_openssl_sub_dsaerr.h","//submodules/openssl:openssl_header_openssl_sub_dtls1.h","//submodules/openssl:openssl_header_openssl_sub_e_os2.h","//submodules/openssl:openssl_header_openssl_sub_ebcdic.h","//submodules/openssl:openssl_header_openssl_sub_ec.h","//submodules/openssl:openssl_header_openssl_sub_ecdh.h","//submodules/openssl:openssl_header_openssl_sub_ecdsa.h","//submodules/openssl:openssl_header_openssl_sub_ecerr.h","//submodules/openssl:openssl_header_openssl_sub_engine.h","//submodules/openssl:openssl_header_openssl_sub_engineerr.h","//submodules/openssl:openssl_header_openssl_sub_err.h","//submodules/openssl:openssl_header_openssl_sub_evp.h","//submodules/openssl:openssl_header_openssl_sub_evperr.h","//submodules/openssl:openssl_header_openssl_sub_hmac.h","//submodules/openssl:openssl_header_openssl_sub_idea.h","//submodules/openssl:openssl_header_openssl_sub_kdf.h","//submodules/openssl:openssl_header_openssl_sub_kdferr.h","//submodules/openssl:openssl_header_openssl_sub_lhash.h","//submodules/openssl:openssl_header_openssl_sub_md2.h","//submodules/openssl:openssl_header_openssl_sub_md4.h","//submodules/openssl:openssl_header_openssl_sub_md5.h","//submodules/openssl:openssl_header_openssl_sub_mdc2.h","//submodules/openssl:openssl_header_openssl_sub_modes.h","//submodules/openssl:openssl_header_openssl_sub_obj_mac.h","//submodules/openssl:openssl_header_openssl_sub_objects.h","//submodules/openssl:openssl_header_openssl_sub_objectserr.h","//submodules/openssl:openssl_header_openssl_sub_ocsp.h","//submodules/openssl:openssl_header_openssl_sub_ocsperr.h","//submodules/openssl:openssl_header_openssl_sub_opensslconf.h","//submodules/openssl:openssl_header_openssl_sub_opensslv.h","//submodules/openssl:openssl_header_openssl_sub_ossl_typ.h","//submodules/openssl:openssl_header_openssl_sub_pem.h","//submodules/openssl:openssl_header_openssl_sub_pem2.h","//submodules/openssl:openssl_header_openssl_sub_pemerr.h","//submodules/openssl:openssl_header_openssl_sub_pkcs12.h","//submodules/openssl:openssl_header_openssl_sub_pkcs12err.h","//submodules/openssl:openssl_header_openssl_sub_pkcs7.h","//submodules/openssl:openssl_header_openssl_sub_pkcs7err.h","//submodules/openssl:openssl_header_openssl_sub_rand.h","//submodules/openssl:openssl_header_openssl_sub_rand_drbg.h","//submodules/openssl:openssl_header_openssl_sub_randerr.h","//submodules/openssl:openssl_header_openssl_sub_rc2.h","//submodules/openssl:openssl_header_openssl_sub_rc4.h","//submodules/openssl:openssl_header_openssl_sub_rc5.h","//submodules/openssl:openssl_header_openssl_sub_ripemd.h","//submodules/openssl:openssl_header_openssl_sub_rsa.h","//submodules/openssl:openssl_header_openssl_sub_rsaerr.h","//submodules/openssl:openssl_header_openssl_sub_safestack.h","//submodules/openssl:openssl_header_openssl_sub_seed.h","//submodules/openssl:openssl_header_openssl_sub_sha.h","//submodules/openssl:openssl_header_openssl_sub_srp.h","//submodules/openssl:openssl_header_openssl_sub_srtp.h","//submodules/openssl:openssl_header_openssl_sub_ssl.h","//submodules/openssl:openssl_header_openssl_sub_ssl2.h","//submodules/openssl:openssl_header_openssl_sub_ssl3.h","//submodules/openssl:openssl_header_openssl_sub_sslerr.h","//submodules/openssl:openssl_header_openssl_sub_stack.h","//submodules/openssl:openssl_header_openssl_sub_store.h","//submodules/openssl:openssl_header_openssl_sub_storeerr.h","//submodules/openssl:openssl_header_openssl_sub_symhacks.h","//submodules/openssl:openssl_header_openssl_sub_tls1.h","//submodules/openssl:openssl_header_openssl_sub_ts.h","//submodules/openssl:openssl_header_openssl_sub_tserr.h","//submodules/openssl:openssl_header_openssl_sub_txt_db.h","//submodules/openssl:openssl_header_openssl_sub_ui.h","//submodules/openssl:openssl_header_openssl_sub_uierr.h","//submodules/openssl:openssl_header_openssl_sub_whrlpool.h","//submodules/openssl:openssl_header_openssl_sub_x509.h","//submodules/openssl:openssl_header_openssl_sub_x509_vfy.h","//submodules/openssl:openssl_header_openssl_sub_x509err.h","//submodules/openssl:openssl_header_openssl_sub_x509v3.h","//submodules/openssl:openssl_header_openssl_sub_x509v3err.h","//submodules/ton:ton_build","//submodules/ton:ton_header_auto_sub_tl_sub_tonlib_api.h","//submodules/ton:ton_header_td_sub_utils_sub_SharedSlice.h","//submodules/ton:ton_header_td_sub_utils_sub_Slice-decl.h","//submodules/ton:ton_header_td_sub_utils_sub_Slice.h","//submodules/ton:ton_header_td_sub_utils_sub_check.h","//submodules/ton:ton_header_td_sub_utils_sub_common.h","//submodules/ton:ton_header_td_sub_utils_sub_config.h","//submodules/ton:ton_header_td_sub_utils_sub_int_types.h","//submodules/ton:ton_header_td_sub_utils_sub_port_sub_platform.h","//submodules/ton:ton_header_td_sub_utils_sub_unique_ptr.h","//submodules/ton:ton_header_tl_sub_TlObject.h","//submodules/ton:ton_header_tonlib_sub_Client.h","//submodules/ton:ton_header_tonlib_sub_tonlib_client_json.h","//submodules/ton:ton_header_tonlib_sub_tonlibjson_export.h"],"xcconfig-paths":["buck-out/gen/AppLibrary-Debug.xcconfig","buck-out/gen/AppLibrary-Profile.xcconfig","buck-out/gen/AppLibrary-Release.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/Telegram-Debug.xcconfig","buck-out/gen/Telegram-Profile.xcconfig","buck-out/gen/Telegram-Release.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Debug.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Profile.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Release.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Debug.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Profile.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Release.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Debug.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Profile.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Release.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Debug.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Profile.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Release.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Debug.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Profile.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Release.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Debug.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Profile.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Release.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Debug.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Profile.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Release.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Debug.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Profile.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Release.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Debug.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Profile.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Release.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Debug.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Profile.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Release.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Debug.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Profile.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Release.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Debug.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Profile.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Release.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Debug.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Profile.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Release.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Debug.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Profile.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Release.xcconfig","buck-out/gen/submodules/Camera/Camera-Debug.xcconfig","buck-out/gen/submodules/Camera/Camera-Profile.xcconfig","buck-out/gen/submodules/Camera/Camera-Release.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Release.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Release.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Release.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Debug.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Profile.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Release.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Debug.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Profile.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Release.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Debug.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Profile.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Release.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Debug.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Profile.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Release.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Debug.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Profile.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Release.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Debug.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Profile.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Release.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Debug.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Profile.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Release.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Debug.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Profile.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Release.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Debug.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Profile.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Release.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Debug.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Profile.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Release.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Debug.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Profile.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Release.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Debug.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Profile.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Release.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Debug.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Profile.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Release.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Debug.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Profile.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Release.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Debug.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Profile.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Release.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Debug.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Profile.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Release.xcconfig","buck-out/gen/submodules/Display/Display#shared-Debug.xcconfig","buck-out/gen/submodules/Display/Display#shared-Profile.xcconfig","buck-out/gen/submodules/Display/Display#shared-Release.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Debug.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Profile.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Release.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Debug.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Profile.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Release.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Debug.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Profile.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Release.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Debug.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Profile.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Release.xcconfig","buck-out/gen/submodules/GZip/GZip-Debug.xcconfig","buck-out/gen/submodules/GZip/GZip-Profile.xcconfig","buck-out/gen/submodules/GZip/GZip-Release.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Debug.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Profile.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Release.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Debug.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Profile.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Release.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Debug.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Profile.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Release.xcconfig","buck-out/gen/submodules/GlassButtonNode/GlassButtonNode-Debug.xcconfig","buck-out/gen/submodules/GlassButtonNode/GlassButtonNode-Profile.xcconfig","buck-out/gen/submodules/GlassButtonNode/GlassButtonNode-Release.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Debug.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Profile.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Release.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Debug.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Profile.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Release.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Debug.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Profile.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Release.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Debug.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Profile.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Release.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Debug.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Profile.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Release.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Debug.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Profile.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Release.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Debug.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Profile.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Release.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Debug.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Profile.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Release.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Debug.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Profile.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Release.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Debug.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Profile.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Release.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Debug.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Profile.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Release.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Debug.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Profile.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Release.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Debug.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Profile.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Release.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Debug.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Profile.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Release.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Debug.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Profile.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Release.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Debug.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Profile.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Release.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Debug.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Profile.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Release.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Debug.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Profile.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Release.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Debug.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Profile.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Release.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Debug.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Profile.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Release.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Debug.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Profile.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Release.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Debug.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Profile.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Release.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Debug.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Profile.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Release.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Debug.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Profile.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Release.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Debug.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Profile.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Release.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Debug.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Profile.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Release.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Debug.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Profile.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Release.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Debug.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Profile.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Release.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Debug.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Profile.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Release.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Debug.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Profile.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Release.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Debug.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Profile.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Release.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Debug.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Profile.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Release.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Debug.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Profile.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Release.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Debug.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Profile.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Release.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Debug.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Profile.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Release.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Debug.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Profile.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Release.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Debug.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Profile.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Release.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Debug.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Profile.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Release.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Debug.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Profile.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Release.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Debug.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Profile.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Release.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Debug.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Profile.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Release.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Debug.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Profile.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Release.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Debug.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Profile.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Release.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Debug.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Profile.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Release.xcconfig","buck-out/gen/submodules/Opus/opus-Debug.xcconfig","buck-out/gen/submodules/Opus/opus-Profile.xcconfig","buck-out/gen/submodules/Opus/opus-Release.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Debug.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Profile.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Release.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Debug.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Profile.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Release.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Debug.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Profile.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Release.xcconfig","buck-out/gen/submodules/PasscodeInputFieldNode/PasscodeInputFieldNode-Debug.xcconfig","buck-out/gen/submodules/PasscodeInputFieldNode/PasscodeInputFieldNode-Profile.xcconfig","buck-out/gen/submodules/PasscodeInputFieldNode/PasscodeInputFieldNode-Release.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Debug.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Profile.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Release.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Debug.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Profile.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Release.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Debug.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Profile.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Release.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Debug.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Profile.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Release.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Debug.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Profile.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Release.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Debug.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Profile.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Release.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Debug.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Profile.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Release.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Debug.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Profile.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Release.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Debug.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Profile.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Release.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Debug.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Profile.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Release.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Debug.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Profile.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Release.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Debug.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Profile.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Release.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Debug.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Profile.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Release.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Debug.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Profile.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Release.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Debug.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Profile.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Release.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Debug.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Profile.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Release.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Debug.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Profile.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Release.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Debug.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Profile.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Release.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Debug.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Profile.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Release.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Debug.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Profile.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Release.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Debug.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Profile.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Release.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Debug.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Profile.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Release.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Debug.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Profile.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Release.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Debug.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Profile.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Release.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Debug.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Profile.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Release.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Debug.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Profile.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Release.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Debug.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Profile.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Release.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Debug.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Profile.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Release.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Debug.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Profile.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Release.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Debug.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Profile.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Release.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Debug.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Profile.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Release.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Debug.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Profile.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Release.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Debug.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Profile.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Release.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Debug.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Profile.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Release.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Debug.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Profile.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Release.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Debug.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Profile.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Release.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Debug.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Profile.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Release.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Debug.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Profile.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Release.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Debug.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Profile.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Release.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Debug.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Profile.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Release.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Debug.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Profile.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Release.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Debug.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Profile.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Release.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Debug.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Profile.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Release.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Debug.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Profile.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Release.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Debug.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Profile.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Release.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Debug.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Profile.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Release.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Debug.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Profile.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Release.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Debug.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Profile.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Release.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Debug.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Profile.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Release.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Debug.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Profile.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Release.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Debug.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Profile.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Release.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Debug.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Profile.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Release.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Debug.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Profile.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Release.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Debug.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Profile.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Release.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Debug.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Profile.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Release.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Debug.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Profile.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Release.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Debug.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Profile.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Release.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Debug.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Profile.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Release.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Debug.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Profile.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Release.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Debug.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Profile.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Release.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Debug.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Profile.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Release.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Debug.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Profile.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Release.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Debug.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Profile.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Release.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Debug.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Profile.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Release.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Debug.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Profile.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Release.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Debug.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Profile.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Release.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Debug.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Profile.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Release.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Debug.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Profile.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Release.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Debug.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Profile.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Release.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Debug.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Profile.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Release.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Debug.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Profile.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Release.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Debug.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Profile.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Release.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Debug.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Profile.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Release.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Debug.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Profile.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Release.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Debug.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Profile.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Release.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Debug.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Profile.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Release.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Debug.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Profile.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Release.xcconfig","buck-out/gen/submodules/openssl/openssl-Debug.xcconfig","buck-out/gen/submodules/openssl/openssl-Profile.xcconfig","buck-out/gen/submodules/openssl/openssl-Release.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Debug.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Profile.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Release.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Debug.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Profile.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Release.xcconfig","buck-out/gen/submodules/ton/ton-Debug.xcconfig","buck-out/gen/submodules/ton/ton-Profile.xcconfig","buck-out/gen/submodules/ton/ton-Release.xcconfig"],"copy-in-xcode":[]} \ No newline at end of file +{"required-targets":["//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_ac3_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_adts_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avcodec.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avdct.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_avfft.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_d3d11va.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dirac.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dv_profile.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_dxva2.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_jni.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_mediacodec.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_qsv.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vaapi.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vdpau.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_videotoolbox.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_vorbis_parser.h","//submodules/FFMpeg:ffmpeg_header_libavcodec_sub_xvmc.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_avformat.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_avio.h","//submodules/FFMpeg:ffmpeg_header_libavformat_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_adler32.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_aes.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_aes_ctr.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_attributes.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_audio_fifo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avassert.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avconfig.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avstring.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_avutil.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_base64.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_blowfish.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_bprint.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_bswap.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_buffer.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_camellia.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_cast5.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_channel_layout.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_common.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_cpu.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_crc.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_des.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_dict.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_display.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_downmix_info.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_encryption_info.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_error.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_eval.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_ffversion.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_fifo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_file.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_frame.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hash.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hmac.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_cuda.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_d3d11va.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_drm.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_dxva2.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_mediacodec.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_qsv.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_vaapi.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_vdpau.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_hwcontext_videotoolbox.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_imgutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_intfloat.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_intreadwrite.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_lfg.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_log.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_lzo.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_macros.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mastering_display_metadata.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mathematics.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_md5.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_mem.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_motion_vector.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_murmur3.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_opt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_parseutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixdesc.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixelutils.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_pixfmt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_random_seed.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_rational.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_rc4.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_replaygain.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_ripemd.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_samplefmt.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_sha.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_sha512.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_spherical.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_stereo3d.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_tea.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_threadmessage.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_time.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_timecode.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_timestamp.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_tree.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_twofish.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_version.h","//submodules/FFMpeg:ffmpeg_header_libavutil_sub_xtea.h","//submodules/FFMpeg:ffmpeg_header_libswresample_sub_swresample.h","//submodules/FFMpeg:ffmpeg_header_libswresample_sub_version.h","//submodules/FFMpeg:libffmpeg_build","//submodules/Opus:opus_lib_file","//submodules/WebP:WebP_lib_file","//submodules/openssl:openssl_build_merged","//submodules/openssl:openssl_header_openssl_sub_aes.h","//submodules/openssl:openssl_header_openssl_sub_asn1.h","//submodules/openssl:openssl_header_openssl_sub_asn1_mac.h","//submodules/openssl:openssl_header_openssl_sub_asn1err.h","//submodules/openssl:openssl_header_openssl_sub_asn1t.h","//submodules/openssl:openssl_header_openssl_sub_async.h","//submodules/openssl:openssl_header_openssl_sub_asyncerr.h","//submodules/openssl:openssl_header_openssl_sub_bio.h","//submodules/openssl:openssl_header_openssl_sub_bioerr.h","//submodules/openssl:openssl_header_openssl_sub_blowfish.h","//submodules/openssl:openssl_header_openssl_sub_bn.h","//submodules/openssl:openssl_header_openssl_sub_bnerr.h","//submodules/openssl:openssl_header_openssl_sub_buffer.h","//submodules/openssl:openssl_header_openssl_sub_buffererr.h","//submodules/openssl:openssl_header_openssl_sub_camellia.h","//submodules/openssl:openssl_header_openssl_sub_cast.h","//submodules/openssl:openssl_header_openssl_sub_cmac.h","//submodules/openssl:openssl_header_openssl_sub_cms.h","//submodules/openssl:openssl_header_openssl_sub_cmserr.h","//submodules/openssl:openssl_header_openssl_sub_comp.h","//submodules/openssl:openssl_header_openssl_sub_comperr.h","//submodules/openssl:openssl_header_openssl_sub_conf.h","//submodules/openssl:openssl_header_openssl_sub_conf_api.h","//submodules/openssl:openssl_header_openssl_sub_conferr.h","//submodules/openssl:openssl_header_openssl_sub_crypto.h","//submodules/openssl:openssl_header_openssl_sub_cryptoerr.h","//submodules/openssl:openssl_header_openssl_sub_ct.h","//submodules/openssl:openssl_header_openssl_sub_cterr.h","//submodules/openssl:openssl_header_openssl_sub_des.h","//submodules/openssl:openssl_header_openssl_sub_dh.h","//submodules/openssl:openssl_header_openssl_sub_dherr.h","//submodules/openssl:openssl_header_openssl_sub_dsa.h","//submodules/openssl:openssl_header_openssl_sub_dsaerr.h","//submodules/openssl:openssl_header_openssl_sub_dtls1.h","//submodules/openssl:openssl_header_openssl_sub_e_os2.h","//submodules/openssl:openssl_header_openssl_sub_ebcdic.h","//submodules/openssl:openssl_header_openssl_sub_ec.h","//submodules/openssl:openssl_header_openssl_sub_ecdh.h","//submodules/openssl:openssl_header_openssl_sub_ecdsa.h","//submodules/openssl:openssl_header_openssl_sub_ecerr.h","//submodules/openssl:openssl_header_openssl_sub_engine.h","//submodules/openssl:openssl_header_openssl_sub_engineerr.h","//submodules/openssl:openssl_header_openssl_sub_err.h","//submodules/openssl:openssl_header_openssl_sub_evp.h","//submodules/openssl:openssl_header_openssl_sub_evperr.h","//submodules/openssl:openssl_header_openssl_sub_hmac.h","//submodules/openssl:openssl_header_openssl_sub_idea.h","//submodules/openssl:openssl_header_openssl_sub_kdf.h","//submodules/openssl:openssl_header_openssl_sub_kdferr.h","//submodules/openssl:openssl_header_openssl_sub_lhash.h","//submodules/openssl:openssl_header_openssl_sub_md2.h","//submodules/openssl:openssl_header_openssl_sub_md4.h","//submodules/openssl:openssl_header_openssl_sub_md5.h","//submodules/openssl:openssl_header_openssl_sub_mdc2.h","//submodules/openssl:openssl_header_openssl_sub_modes.h","//submodules/openssl:openssl_header_openssl_sub_obj_mac.h","//submodules/openssl:openssl_header_openssl_sub_objects.h","//submodules/openssl:openssl_header_openssl_sub_objectserr.h","//submodules/openssl:openssl_header_openssl_sub_ocsp.h","//submodules/openssl:openssl_header_openssl_sub_ocsperr.h","//submodules/openssl:openssl_header_openssl_sub_opensslconf.h","//submodules/openssl:openssl_header_openssl_sub_opensslv.h","//submodules/openssl:openssl_header_openssl_sub_ossl_typ.h","//submodules/openssl:openssl_header_openssl_sub_pem.h","//submodules/openssl:openssl_header_openssl_sub_pem2.h","//submodules/openssl:openssl_header_openssl_sub_pemerr.h","//submodules/openssl:openssl_header_openssl_sub_pkcs12.h","//submodules/openssl:openssl_header_openssl_sub_pkcs12err.h","//submodules/openssl:openssl_header_openssl_sub_pkcs7.h","//submodules/openssl:openssl_header_openssl_sub_pkcs7err.h","//submodules/openssl:openssl_header_openssl_sub_rand.h","//submodules/openssl:openssl_header_openssl_sub_rand_drbg.h","//submodules/openssl:openssl_header_openssl_sub_randerr.h","//submodules/openssl:openssl_header_openssl_sub_rc2.h","//submodules/openssl:openssl_header_openssl_sub_rc4.h","//submodules/openssl:openssl_header_openssl_sub_rc5.h","//submodules/openssl:openssl_header_openssl_sub_ripemd.h","//submodules/openssl:openssl_header_openssl_sub_rsa.h","//submodules/openssl:openssl_header_openssl_sub_rsaerr.h","//submodules/openssl:openssl_header_openssl_sub_safestack.h","//submodules/openssl:openssl_header_openssl_sub_seed.h","//submodules/openssl:openssl_header_openssl_sub_sha.h","//submodules/openssl:openssl_header_openssl_sub_srp.h","//submodules/openssl:openssl_header_openssl_sub_srtp.h","//submodules/openssl:openssl_header_openssl_sub_ssl.h","//submodules/openssl:openssl_header_openssl_sub_ssl2.h","//submodules/openssl:openssl_header_openssl_sub_ssl3.h","//submodules/openssl:openssl_header_openssl_sub_sslerr.h","//submodules/openssl:openssl_header_openssl_sub_stack.h","//submodules/openssl:openssl_header_openssl_sub_store.h","//submodules/openssl:openssl_header_openssl_sub_storeerr.h","//submodules/openssl:openssl_header_openssl_sub_symhacks.h","//submodules/openssl:openssl_header_openssl_sub_tls1.h","//submodules/openssl:openssl_header_openssl_sub_ts.h","//submodules/openssl:openssl_header_openssl_sub_tserr.h","//submodules/openssl:openssl_header_openssl_sub_txt_db.h","//submodules/openssl:openssl_header_openssl_sub_ui.h","//submodules/openssl:openssl_header_openssl_sub_uierr.h","//submodules/openssl:openssl_header_openssl_sub_whrlpool.h","//submodules/openssl:openssl_header_openssl_sub_x509.h","//submodules/openssl:openssl_header_openssl_sub_x509_vfy.h","//submodules/openssl:openssl_header_openssl_sub_x509err.h","//submodules/openssl:openssl_header_openssl_sub_x509v3.h","//submodules/openssl:openssl_header_openssl_sub_x509v3err.h","//submodules/ton:ton_build","//submodules/ton:ton_header_auto_sub_tl_sub_tonlib_api.h","//submodules/ton:ton_header_td_sub_utils_sub_SharedSlice.h","//submodules/ton:ton_header_td_sub_utils_sub_Slice-decl.h","//submodules/ton:ton_header_td_sub_utils_sub_Slice.h","//submodules/ton:ton_header_td_sub_utils_sub_check.h","//submodules/ton:ton_header_td_sub_utils_sub_common.h","//submodules/ton:ton_header_td_sub_utils_sub_config.h","//submodules/ton:ton_header_td_sub_utils_sub_int_types.h","//submodules/ton:ton_header_td_sub_utils_sub_port_sub_platform.h","//submodules/ton:ton_header_td_sub_utils_sub_unique_ptr.h","//submodules/ton:ton_header_tl_sub_TlObject.h","//submodules/ton:ton_header_tonlib_sub_Client.h","//submodules/ton:ton_header_tonlib_sub_tonlib_client_json.h","//submodules/ton:ton_header_tonlib_sub_tonlibjson_export.h"],"xcconfig-paths":["buck-out/gen/AppLibrary-Debug.xcconfig","buck-out/gen/AppLibrary-Profile.xcconfig","buck-out/gen/AppLibrary-Release.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/IntentsExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/NotificationContentExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/NotificationServiceExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/ShareExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/Telegram-Debug.xcconfig","buck-out/gen/Telegram-Profile.xcconfig","buck-out/gen/Telegram-Release.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Debug.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Profile.xcconfig","buck-out/gen/WatchApp#watchsimulator-i386-Release.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Debug.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Profile.xcconfig","buck-out/gen/WatchAppExtension#watchsimulator-i386-Release.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Debug.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Profile.xcconfig","buck-out/gen/WidgetExtension#iphonesimulator-x86_64-Release.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Debug.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Profile.xcconfig","buck-out/gen/submodules/AccountContext/AccountContext-Release.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Debug.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Profile.xcconfig","buck-out/gen/submodules/ActionSheetPeerItem/ActionSheetPeerItem-Release.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Debug.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Profile.xcconfig","buck-out/gen/submodules/ActivityIndicator/ActivityIndicator-Release.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Debug.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Profile.xcconfig","buck-out/gen/submodules/AlertUI/AlertUI-Release.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Debug.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Profile.xcconfig","buck-out/gen/submodules/AnimationUI/AnimationUI-Release.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Debug.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Profile.xcconfig","buck-out/gen/submodules/AppBundle/AppBundle-Release.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Debug.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Profile.xcconfig","buck-out/gen/submodules/AsyncDisplayKit/AsyncDisplayKit#shared-Release.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Debug.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Profile.xcconfig","buck-out/gen/submodules/AuthorizationUI/AuthorizationUI-Release.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Debug.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Profile.xcconfig","buck-out/gen/submodules/AvatarNode/AvatarNode-Release.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Debug.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Profile.xcconfig","buck-out/gen/submodules/BotPaymentsUI/BotPaymentsUI-Release.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Debug.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Profile.xcconfig","buck-out/gen/submodules/BuildConfig/BuildConfig-Release.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Debug.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Profile.xcconfig","buck-out/gen/submodules/CallListUI/CallListUI-Release.xcconfig","buck-out/gen/submodules/Camera/Camera-Debug.xcconfig","buck-out/gen/submodules/Camera/Camera-Profile.xcconfig","buck-out/gen/submodules/Camera/Camera-Release.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchItemHeader/ChatListSearchItemHeader-Release.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchItemNode/ChatListSearchItemNode-Release.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Debug.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Profile.xcconfig","buck-out/gen/submodules/ChatListSearchRecentPeersNode/ChatListSearchRecentPeersNode-Release.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Debug.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Profile.xcconfig","buck-out/gen/submodules/ChatListUI/ChatListUI-Release.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Debug.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Profile.xcconfig","buck-out/gen/submodules/ChatTitleActivityNode/ChatTitleActivityNode-Release.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Debug.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Profile.xcconfig","buck-out/gen/submodules/CheckNode/CheckNode-Release.xcconfig","buck-out/gen/submodules/CloudData/CloudData-Debug.xcconfig","buck-out/gen/submodules/CloudData/CloudData-Profile.xcconfig","buck-out/gen/submodules/CloudData/CloudData-Release.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Debug.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Profile.xcconfig","buck-out/gen/submodules/ComposePollUI/ComposePollUI-Release.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Debug.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Profile.xcconfig","buck-out/gen/submodules/ContactListUI/ContactListUI-Release.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Debug.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Profile.xcconfig","buck-out/gen/submodules/ContactsPeerItem/ContactsPeerItem-Release.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Debug.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Profile.xcconfig","buck-out/gen/submodules/ContextUI/ContextUI-Release.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Debug.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Profile.xcconfig","buck-out/gen/submodules/CounterContollerTitleView/CounterContollerTitleView-Release.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Debug.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Profile.xcconfig","buck-out/gen/submodules/CountrySelectionUI/CountrySelectionUI-Release.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Debug.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Profile.xcconfig","buck-out/gen/submodules/Crc32/Crc32-Release.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Debug.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Profile.xcconfig","buck-out/gen/submodules/DateSelectionUI/DateSelectionUI-Release.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Debug.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Profile.xcconfig","buck-out/gen/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem-Release.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Debug.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Profile.xcconfig","buck-out/gen/submodules/DeviceAccess/DeviceAccess-Release.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Debug.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Profile.xcconfig","buck-out/gen/submodules/DeviceLocationManager/DeviceLocationManager-Release.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Debug.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Profile.xcconfig","buck-out/gen/submodules/DeviceProximity/DeviceProximity-Release.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Debug.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Profile.xcconfig","buck-out/gen/submodules/DirectionalPanGesture/DirectionalPanGesture-Release.xcconfig","buck-out/gen/submodules/Display/Display#shared-Debug.xcconfig","buck-out/gen/submodules/Display/Display#shared-Profile.xcconfig","buck-out/gen/submodules/Display/Display#shared-Release.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Debug.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Profile.xcconfig","buck-out/gen/submodules/Emoji/Emoji-Release.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Debug.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Profile.xcconfig","buck-out/gen/submodules/EncryptionKeyVisualization/EncryptionKeyVisualization-Release.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Debug.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Profile.xcconfig","buck-out/gen/submodules/FFMpeg/FFMpeg-Release.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Debug.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Profile.xcconfig","buck-out/gen/submodules/FFMpeg/libffmpeg-Release.xcconfig","buck-out/gen/submodules/GZip/GZip-Debug.xcconfig","buck-out/gen/submodules/GZip/GZip-Profile.xcconfig","buck-out/gen/submodules/GZip/GZip-Release.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Debug.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Profile.xcconfig","buck-out/gen/submodules/GalleryUI/GalleryUI-Release.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Debug.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Profile.xcconfig","buck-out/gen/submodules/GameUI/GameUI-Release.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Debug.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Profile.xcconfig","buck-out/gen/submodules/Geocoding/Geocoding-Release.xcconfig","buck-out/gen/submodules/GlassButtonNode/GlassButtonNode-Debug.xcconfig","buck-out/gen/submodules/GlassButtonNode/GlassButtonNode-Profile.xcconfig","buck-out/gen/submodules/GlassButtonNode/GlassButtonNode-Release.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Debug.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Profile.xcconfig","buck-out/gen/submodules/GridMessageSelectionNode/GridMessageSelectionNode-Release.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Debug.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Profile.xcconfig","buck-out/gen/submodules/HashtagSearchUI/HashtagSearchUI-Release.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Debug.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Profile.xcconfig","buck-out/gen/submodules/HexColor/HexColor-Release.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Debug.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Profile.xcconfig","buck-out/gen/submodules/HockeySDK-iOS/HockeySDK-Release.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Debug.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Profile.xcconfig","buck-out/gen/submodules/HorizontalPeerItem/HorizontalPeerItem-Release.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Debug.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Profile.xcconfig","buck-out/gen/submodules/ImageBlur/ImageBlur-Release.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Debug.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Profile.xcconfig","buck-out/gen/submodules/ImageCompression/ImageCompression-Release.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Debug.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Profile.xcconfig","buck-out/gen/submodules/ImageTransparency/ImageTransparency-Release.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Debug.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Profile.xcconfig","buck-out/gen/submodules/InstantPageCache/InstantPageCache-Release.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Debug.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Profile.xcconfig","buck-out/gen/submodules/InstantPageUI/InstantPageUI-Release.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Debug.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Profile.xcconfig","buck-out/gen/submodules/ItemListAddressItem/ItemListAddressItem-Release.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Debug.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Profile.xcconfig","buck-out/gen/submodules/ItemListAvatarAndNameInfoItem/ItemListAvatarAndNameInfoItem-Release.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Debug.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Profile.xcconfig","buck-out/gen/submodules/ItemListPeerActionItem/ItemListPeerActionItem-Release.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Debug.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Profile.xcconfig","buck-out/gen/submodules/ItemListPeerItem/ItemListPeerItem-Release.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Debug.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Profile.xcconfig","buck-out/gen/submodules/ItemListStickerPackItem/ItemListStickerPackItem-Release.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Debug.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Profile.xcconfig","buck-out/gen/submodules/ItemListUI/ItemListUI-Release.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Debug.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Profile.xcconfig","buck-out/gen/submodules/JoinLinkPreviewUI/JoinLinkPreviewUI-Release.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Debug.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Profile.xcconfig","buck-out/gen/submodules/LanguageLinkPreviewUI/LanguageLinkPreviewUI-Release.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Debug.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Profile.xcconfig","buck-out/gen/submodules/LanguageSuggestionUI/LanguageSuggestionUI-Release.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Debug.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Profile.xcconfig","buck-out/gen/submodules/LegacyComponents/LegacyComponents-Release.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Debug.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Profile.xcconfig","buck-out/gen/submodules/LegacyDataImport/LegacyDataImport-Release.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Debug.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Profile.xcconfig","buck-out/gen/submodules/LegacyMediaPickerUI/LegacyMediaPickerUI-Release.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Debug.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Profile.xcconfig","buck-out/gen/submodules/LegacyUI/LegacyUI-Release.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Debug.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Profile.xcconfig","buck-out/gen/submodules/LightweightAccountData/LightweightAccountData-Release.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Debug.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Profile.xcconfig","buck-out/gen/submodules/ListSectionHeaderNode/ListSectionHeaderNode-Release.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Debug.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Profile.xcconfig","buck-out/gen/submodules/LiveLocationManager/LiveLocationManager-Release.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Debug.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Profile.xcconfig","buck-out/gen/submodules/LiveLocationPositionNode/LiveLocationPositionNode-Release.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Debug.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Profile.xcconfig","buck-out/gen/submodules/LiveLocationTimerNode/LiveLocationTimerNode-Release.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Debug.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Profile.xcconfig","buck-out/gen/submodules/LocalAuth/LocalAuth-Release.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Debug.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Profile.xcconfig","buck-out/gen/submodules/LocalMediaResources/LocalMediaResources-Release.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Debug.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Profile.xcconfig","buck-out/gen/submodules/LocalizedPeerData/LocalizedPeerData-Release.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Debug.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Profile.xcconfig","buck-out/gen/submodules/LocationUI/LocationUI-Release.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Debug.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Profile.xcconfig","buck-out/gen/submodules/MapResourceToAvatarSizes/MapResourceToAvatarSizes-Release.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Debug.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Profile.xcconfig","buck-out/gen/submodules/MediaPlayer/UniversalMediaPlayer-Release.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Debug.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Profile.xcconfig","buck-out/gen/submodules/MediaResources/MediaResources-Release.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Debug.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Profile.xcconfig","buck-out/gen/submodules/MergeLists/MergeLists-Release.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Debug.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Profile.xcconfig","buck-out/gen/submodules/MessageReactionListUI/MessageReactionListUI-Release.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Debug.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Profile.xcconfig","buck-out/gen/submodules/MimeTypes/MimeTypes-Release.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Debug.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Profile.xcconfig","buck-out/gen/submodules/MosaicLayout/MosaicLayout-Release.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Debug.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Profile.xcconfig","buck-out/gen/submodules/MtProtoKit/MtProtoKit#shared-Release.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Debug.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Profile.xcconfig","buck-out/gen/submodules/MusicAlbumArtResources/MusicAlbumArtResources-Release.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Debug.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Profile.xcconfig","buck-out/gen/submodules/NotificationMuteSettingsUI/NotificationMuteSettingsUI-Release.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Debug.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Profile.xcconfig","buck-out/gen/submodules/NotificationSoundSelectionUI/NotificationSoundSelectionUI-Release.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Debug.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Profile.xcconfig","buck-out/gen/submodules/OpenInExternalAppUI/OpenInExternalAppUI-Release.xcconfig","buck-out/gen/submodules/Opus/opus-Debug.xcconfig","buck-out/gen/submodules/Opus/opus-Profile.xcconfig","buck-out/gen/submodules/Opus/opus-Release.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Debug.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Profile.xcconfig","buck-out/gen/submodules/Opus/opus_lib-Release.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Debug.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Profile.xcconfig","buck-out/gen/submodules/OpusBinding/OpusBinding-Release.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Debug.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Profile.xcconfig","buck-out/gen/submodules/OverlayStatusController/OverlayStatusController-Release.xcconfig","buck-out/gen/submodules/PasscodeInputFieldNode/PasscodeInputFieldNode-Debug.xcconfig","buck-out/gen/submodules/PasscodeInputFieldNode/PasscodeInputFieldNode-Profile.xcconfig","buck-out/gen/submodules/PasscodeInputFieldNode/PasscodeInputFieldNode-Release.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Debug.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Profile.xcconfig","buck-out/gen/submodules/PasscodeUI/PasscodeUI-Release.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Debug.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Profile.xcconfig","buck-out/gen/submodules/PassportUI/PassportUI-Release.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Debug.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Profile.xcconfig","buck-out/gen/submodules/PasswordSetupUI/PasswordSetupUI-Release.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Debug.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Profile.xcconfig","buck-out/gen/submodules/Pdf/Pdf-Release.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Debug.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Profile.xcconfig","buck-out/gen/submodules/PeerAvatarGalleryUI/PeerAvatarGalleryUI-Release.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Debug.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Profile.xcconfig","buck-out/gen/submodules/PeerInfoUI/PeerInfoUI-Release.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Debug.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Profile.xcconfig","buck-out/gen/submodules/PeerOnlineMarkerNode/PeerOnlineMarkerNode-Release.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Debug.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Profile.xcconfig","buck-out/gen/submodules/PeerPresenceStatusManager/PeerPresenceStatusManager-Release.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Debug.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Profile.xcconfig","buck-out/gen/submodules/PeersNearbyIconNode/PeersNearbyIconNode-Release.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Debug.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Profile.xcconfig","buck-out/gen/submodules/PeersNearbyUI/PeersNearbyUI-Release.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Debug.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Profile.xcconfig","buck-out/gen/submodules/PersistentStringHash/PersistentStringHash-Release.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Debug.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Profile.xcconfig","buck-out/gen/submodules/PhoneInputNode/PhoneInputNode-Release.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Debug.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Profile.xcconfig","buck-out/gen/submodules/PhotoResources/PhotoResources-Release.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Debug.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Profile.xcconfig","buck-out/gen/submodules/PlatformRestrictionMatching/PlatformRestrictionMatching-Release.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Debug.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Profile.xcconfig","buck-out/gen/submodules/Postbox/Postbox#shared-Release.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Debug.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Profile.xcconfig","buck-out/gen/submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode-Release.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Debug.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Profile.xcconfig","buck-out/gen/submodules/QrCode/QrCode-Release.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Debug.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Profile.xcconfig","buck-out/gen/submodules/RMIntro/RMIntro-Release.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Debug.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Profile.xcconfig","buck-out/gen/submodules/RadialStatusNode/RadialStatusNode-Release.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Debug.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Profile.xcconfig","buck-out/gen/submodules/RaiseToListen/RaiseToListen-Release.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Debug.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Profile.xcconfig","buck-out/gen/submodules/ReactionSelectionNode/ReactionSelectionNode-Release.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Debug.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Profile.xcconfig","buck-out/gen/submodules/SSignalKit/SSignalKit/SSignalKit-Release.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Debug.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Profile.xcconfig","buck-out/gen/submodules/SSignalKit/SwiftSignalKit/SwiftSignalKit#shared-Release.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Debug.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Profile.xcconfig","buck-out/gen/submodules/SaveToCameraRoll/SaveToCameraRoll-Release.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Debug.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Profile.xcconfig","buck-out/gen/submodules/ScreenCaptureDetection/ScreenCaptureDetection-Release.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Debug.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Profile.xcconfig","buck-out/gen/submodules/SearchBarNode/SearchBarNode-Release.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Debug.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Profile.xcconfig","buck-out/gen/submodules/SearchUI/SearchUI-Release.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Debug.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Profile.xcconfig","buck-out/gen/submodules/SegmentedControlNode/SegmentedControlNode-Release.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Debug.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Profile.xcconfig","buck-out/gen/submodules/SelectablePeerNode/SelectablePeerNode-Release.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Debug.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Profile.xcconfig","buck-out/gen/submodules/SettingsUI/SettingsUI-Release.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Debug.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Profile.xcconfig","buck-out/gen/submodules/ShareController/ShareController-Release.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Debug.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Profile.xcconfig","buck-out/gen/submodules/ShareItems/ShareItems-Release.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Debug.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Profile.xcconfig","buck-out/gen/submodules/SinglePhoneInputNode/SinglePhoneInputNode-Release.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Debug.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Profile.xcconfig","buck-out/gen/submodules/SolidRoundedButtonNode/SolidRoundedButtonNode-Release.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Debug.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Profile.xcconfig","buck-out/gen/submodules/StickerPackPreviewUI/StickerPackPreviewUI-Release.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Debug.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Profile.xcconfig","buck-out/gen/submodules/StickerResources/StickerResources-Release.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Debug.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Profile.xcconfig","buck-out/gen/submodules/Stripe/Stripe-Release.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Debug.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Profile.xcconfig","buck-out/gen/submodules/SwipeToDismissGesture/SwipeToDismissGesture-Release.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Debug.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Profile.xcconfig","buck-out/gen/submodules/SwitchNode/SwitchNode-Release.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Debug.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Profile.xcconfig","buck-out/gen/submodules/TelegramApi/TelegramApi-Release.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Debug.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Profile.xcconfig","buck-out/gen/submodules/TelegramAudio/TelegramAudio-Release.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Debug.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Profile.xcconfig","buck-out/gen/submodules/TelegramBaseController/TelegramBaseController-Release.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Debug.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Profile.xcconfig","buck-out/gen/submodules/TelegramCallsUI/TelegramCallsUI-Release.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Debug.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Profile.xcconfig","buck-out/gen/submodules/TelegramCore/TelegramCore#shared-Release.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Debug.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Profile.xcconfig","buck-out/gen/submodules/TelegramNotices/TelegramNotices-Release.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Debug.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Profile.xcconfig","buck-out/gen/submodules/TelegramPermissions/TelegramPermissions-Release.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Debug.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Profile.xcconfig","buck-out/gen/submodules/TelegramPermissionsUI/TelegramPermissionsUI-Release.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Debug.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Profile.xcconfig","buck-out/gen/submodules/TelegramPresentationData/TelegramPresentationData-Release.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Debug.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Profile.xcconfig","buck-out/gen/submodules/TelegramStringFormatting/TelegramStringFormatting-Release.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Debug.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Profile.xcconfig","buck-out/gen/submodules/TelegramUI/TelegramUI#shared-Release.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Debug.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Profile.xcconfig","buck-out/gen/submodules/TelegramUIPreferences/TelegramUIPreferences-Release.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Debug.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Profile.xcconfig","buck-out/gen/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent-Release.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Debug.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Profile.xcconfig","buck-out/gen/submodules/TelegramUpdateUI/TelegramUpdateUI-Release.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Debug.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Profile.xcconfig","buck-out/gen/submodules/TelegramVoip/TelegramVoip-Release.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Debug.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Profile.xcconfig","buck-out/gen/submodules/TemporaryCachedPeerDataManager/TemporaryCachedPeerDataManager-Release.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Debug.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Profile.xcconfig","buck-out/gen/submodules/TextFormat/TextFormat-Release.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Debug.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Profile.xcconfig","buck-out/gen/submodules/TextSelectionNode/TextSelectionNode-Release.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Debug.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Profile.xcconfig","buck-out/gen/submodules/TinyThumbnail/TinyThumbnail-Release.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Debug.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Profile.xcconfig","buck-out/gen/submodules/TouchDownGesture/TouchDownGesture-Release.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Debug.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Profile.xcconfig","buck-out/gen/submodules/Tuples/Tuples-Release.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Debug.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Profile.xcconfig","buck-out/gen/submodules/UndoUI/UndoUI-Release.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Debug.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Profile.xcconfig","buck-out/gen/submodules/UrlEscaping/UrlEscaping-Release.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Debug.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Profile.xcconfig","buck-out/gen/submodules/UrlHandling/UrlHandling-Release.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Debug.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Profile.xcconfig","buck-out/gen/submodules/WalletUI/WalletUI-Release.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Debug.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Profile.xcconfig","buck-out/gen/submodules/WallpaperResources/WallpaperResources-Release.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Debug.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Profile.xcconfig","buck-out/gen/submodules/WatchBridge/WatchBridge-Release.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Debug.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Profile.xcconfig","buck-out/gen/submodules/WatchBridgeAudio/WatchBridgeAudio-Release.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Debug.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Profile.xcconfig","buck-out/gen/submodules/WatchCommon/Host/WatchCommon-Release.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Debug.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Profile.xcconfig","buck-out/gen/submodules/WebP/WebPImage-Release.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Debug.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Profile.xcconfig","buck-out/gen/submodules/WebP/WebP_lib-Release.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Debug.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Profile.xcconfig","buck-out/gen/submodules/WebSearchUI/WebSearchUI-Release.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Debug.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Profile.xcconfig","buck-out/gen/submodules/WebUI/WebUI-Release.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Debug.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Profile.xcconfig","buck-out/gen/submodules/WebsiteType/WebsiteType-Release.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Debug.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Profile.xcconfig","buck-out/gen/submodules/YuvConversion/YuvConversion-Release.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Debug.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Profile.xcconfig","buck-out/gen/submodules/libphonenumber/libphonenumber-Release.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Debug.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Profile.xcconfig","buck-out/gen/submodules/libtgvoip/libtgvoip-Release.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Debug.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Profile.xcconfig","buck-out/gen/submodules/lottie-ios/Lottie-Release.xcconfig","buck-out/gen/submodules/openssl/openssl-Debug.xcconfig","buck-out/gen/submodules/openssl/openssl-Profile.xcconfig","buck-out/gen/submodules/openssl/openssl-Release.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Debug.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Profile.xcconfig","buck-out/gen/submodules/rlottie/RLottieBinding-Release.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Debug.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Profile.xcconfig","buck-out/gen/submodules/sqlcipher/sqlcipher-Release.xcconfig","buck-out/gen/submodules/ton/ton-Debug.xcconfig","buck-out/gen/submodules/ton/ton-Profile.xcconfig","buck-out/gen/submodules/ton/ton-Release.xcconfig"],"copy-in-xcode":[]} \ No newline at end of file diff --git a/Telegram_Buck.xcworkspace/contents.xcworkspacedata b/Telegram_Buck.xcworkspace/contents.xcworkspacedata index a3f93af764..d617901daa 100644 --- a/Telegram_Buck.xcworkspace/contents.xcworkspacedata +++ b/Telegram_Buck.xcworkspace/contents.xcworkspacedata @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/Telegram_Buck.xcworkspace/xcshareddata/xcschemes/Telegram_Buck.xcscheme b/Telegram_Buck.xcworkspace/xcshareddata/xcschemes/Telegram_Buck.xcscheme index e009a59b64..a3a3833570 100644 --- a/Telegram_Buck.xcworkspace/xcshareddata/xcschemes/Telegram_Buck.xcscheme +++ b/Telegram_Buck.xcworkspace/xcshareddata/xcschemes/Telegram_Buck.xcscheme @@ -146,6 +146,20 @@ ReferencedContainer = "container:submodules/Postbox/Postbox.xcodeproj"> + + + + TonContext { + public func context(config: String, blockchainName: String) -> TonContext { return self.currentInstance.with { data -> TonContext in - if let instance = data.instance, data.config == config { + if let instance = data.instance, data.config == config, data.blockchainName == blockchainName { return TonContext(instance: instance, keychain: self.keychain) } else { data.config = config - let instance = TonInstance(basePath: self.basePath, config: config, blockchainName: "testnet", network: self.network) + let instance = TonInstance(basePath: self.basePath, config: config, blockchainName: blockchainName, network: self.network) data.instance = instance return TonContext(instance: instance, keychain: self.keychain) } diff --git a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h.orig b/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h.orig deleted file mode 100644 index ba546db317..0000000000 --- a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h.orig +++ /dev/null @@ -1,221 +0,0 @@ -// -// ASEditableTextNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol ASEditableTextNodeDelegate; -@class ASTextKitComponents; - -@interface ASEditableTextNodeTargetForAction: NSObject - -@property (nonatomic, strong, readonly) id _Nullable target; - -- (instancetype)initWithTarget:(id _Nullable)target; - -@end - -/** - @abstract Implements a node that supports text editing. - @discussion Does not support layer backing. - */ -@interface ASEditableTextNode : ASDisplayNode - -/** - * @abstract Initializes an editable text node using default TextKit components. - * - * @return An initialized ASEditableTextNode. - */ -- (instancetype)init; - -/** - * @abstract Initializes an editable text node using the provided TextKit components. - * - * @param textKitComponents The TextKit stack used to render text. - * @param placeholderTextKitComponents The TextKit stack used to render placeholder text. - * - * @return An initialized ASEditableTextNode. - */ -- (instancetype)initWithTextKitComponents:(ASTextKitComponents *)textKitComponents - placeholderTextKitComponents:(ASTextKitComponents *)placeholderTextKitComponents; - -//! @abstract The text node's delegate, which must conform to the protocol. -@property (nullable, weak) id delegate; - -#pragma mark - Configuration - -/** - @abstract Enable scrolling on the textView - @default true - */ -@property (nonatomic) BOOL scrollEnabled; - -/** - @abstract Access to underlying UITextView for more configuration options. - @warning This property should only be used on the main thread and should not be accessed before the editable text node's view is created. - */ -@property (nonatomic, readonly) UITextView *textView; - -//! @abstract The attributes to apply to new text being entered by the user. -@property (nullable, nonatomic, copy) NSDictionary *typingAttributes; - -//! @abstract The range of text currently selected. If length is zero, the range is the cursor location. -@property NSRange selectedRange; - -#pragma mark - Placeholder -/** - @abstract Indicates if the receiver is displaying the placeholder text. - @discussion To update the placeholder, see the property. - @result YES if the placeholder is currently displayed; NO otherwise. - */ -- (BOOL)isDisplayingPlaceholder AS_WARN_UNUSED_RESULT; - -/** - @abstract The styled placeholder text displayed by the text node while no text is entered - @discussion The placeholder is displayed when the user has not entered any text and the keyboard is not visible. - */ -@property (nullable, nonatomic, copy) NSAttributedString *attributedPlaceholderText; - -#pragma mark - Modifying User Text -/** - @abstract The styled text displayed by the receiver. - @discussion When the placeholder is displayed (as indicated by -isDisplayingPlaceholder), this value is nil. Otherwise, this value is the attributed text the user has entered. This value can be modified regardless of whether the receiver is the first responder (and thus, editing) or not. Changing this value from nil to non-nil will result in the placeholder being hidden, and the new value being displayed. - */ -@property (nullable, nonatomic, copy) NSAttributedString *attributedText; - -#pragma mark - Managing The Keyboard -//! @abstract The text input mode used by the receiver's keyboard, if it is visible. This value is undefined if the receiver is not the first responder. -@property (nonatomic, readonly) UITextInputMode *textInputMode; - -/** - @abstract The textContainerInset of both the placeholder and typed textView. This value defaults to UIEdgeInsetsZero. - */ -@property (nonatomic) UIEdgeInsets textContainerInset; - -/** - @abstract The maximum number of lines to display. Additional lines will require scrolling. - @default 0 (No limit) - */ -@property (nonatomic) NSUInteger maximumLinesToDisplay; - -/** - @abstract Indicates whether the receiver's text view is the first responder, and thus has the keyboard visible and is prepared for editing by the user. - @result YES if the receiver's text view is the first-responder; NO otherwise. - */ -- (BOOL)isFirstResponder AS_WARN_UNUSED_RESULT; - -//! @abstract Makes the receiver's text view the first responder. -- (BOOL)becomeFirstResponder; - -//! @abstract Resigns the receiver's text view from first-responder status, if it has it. -- (BOOL)resignFirstResponder; - -#pragma mark - Geometry -/** - @abstract Returns the frame of the given range of characters. - @param textRange A range of characters. - @discussion This method raises an exception if `textRange` is not a valid range of characters within the receiver's attributed text. - @result A CGRect that is the bounding box of the glyphs covered by the given range of characters, in the coordinate system of the receiver. - */ -- (CGRect)frameForTextRange:(NSRange)textRange AS_WARN_UNUSED_RESULT; - -/** - @abstract properties. - */ -@property (nonatomic) UITextAutocapitalizationType autocapitalizationType; // default is UITextAutocapitalizationTypeSentences -@property (nonatomic) UITextAutocorrectionType autocorrectionType; // default is UITextAutocorrectionTypeDefault -@property (nonatomic) UITextSpellCheckingType spellCheckingType; // default is UITextSpellCheckingTypeDefault; -@property (nonatomic) UIKeyboardType keyboardType; // default is UIKeyboardTypeDefault -@property (nonatomic) UIKeyboardAppearance keyboardAppearance; // default is UIKeyboardAppearanceDefault -@property (nonatomic) UIReturnKeyType returnKeyType; // default is UIReturnKeyDefault (See note under UIReturnKeyType enum) -@property (nonatomic) BOOL enablesReturnKeyAutomatically; // default is NO (when YES, will automatically disable return key when text widget has zero-length contents, and will automatically enable when text widget has non-zero-length contents) -@property (nonatomic, getter=isSecureTextEntry) BOOL secureTextEntry; // default is NO - -- (void)dropAutocorrection; - - -@end - -@interface ASEditableTextNode (Unavailable) - -- (instancetype)initWithLayerBlock:(ASDisplayNodeLayerBlock)viewBlock didLoadBlock:(nullable ASDisplayNodeDidLoadBlock)didLoadBlock NS_UNAVAILABLE; - -- (instancetype)initWithViewBlock:(ASDisplayNodeViewBlock)viewBlock didLoadBlock:(nullable ASDisplayNodeDidLoadBlock)didLoadBlock NS_UNAVAILABLE; - -@end - -#pragma mark - -/** - * The methods declared by the ASEditableTextNodeDelegate protocol allow the adopting delegate to - * respond to notifications such as began and finished editing, selection changed and text updated; - * and manage whether a specified text should be replaced. - */ -@protocol ASEditableTextNodeDelegate - -@optional -/** - @abstract Asks the delegate if editing should begin for the text node. - @param editableTextNode An editable text node. - @discussion YES if editing should begin; NO if editing should not begin -- the default returns YES. - */ -- (BOOL)editableTextNodeShouldBeginEditing:(ASEditableTextNode *)editableTextNode; - -/** - @abstract Indicates to the delegate that the text node began editing. - @param editableTextNode An editable text node. - @discussion The invocation of this method coincides with the keyboard animating to become visible. - */ -- (void)editableTextNodeDidBeginEditing:(ASEditableTextNode *)editableTextNode; - -/** - @abstract Asks the delegate whether the specified text should be replaced in the editable text node. - @param editableTextNode An editable text node. - @param range The current selection range. If the length of the range is 0, range reflects the current insertion point. If the user presses the Delete key, the length of the range is 1 and an empty string object replaces that single character. - @param text The text to insert. - @discussion YES if the old text should be replaced by the new text; NO if the replacement operation should be aborted. - @result The text node calls this method whenever the user types a new character or deletes an existing character. Implementation of this method is optional -- the default implementation returns YES. - */ -- (BOOL)editableTextNode:(ASEditableTextNode *)editableTextNode shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; - -/** - @abstract Indicates to the delegate that the text node's selection has changed. - @param editableTextNode An editable text node. - @param fromSelectedRange The previously selected range. - @param toSelectedRange The current selected range. Equivalent to the property. - @param dueToEditing YES if the selection change was due to editing; NO otherwise. - @discussion You can access the selection of the receiver via . - */ -- (void)editableTextNodeDidChangeSelection:(ASEditableTextNode *)editableTextNode fromSelectedRange:(NSRange)fromSelectedRange toSelectedRange:(NSRange)toSelectedRange dueToEditing:(BOOL)dueToEditing; - -/** - @abstract Indicates to the delegate that the text node's text was updated. - @param editableTextNode An editable text node. - @discussion This method is called each time the user updated the text node's text. It is not called for programmatic changes made to the text via the property. - */ -- (void)editableTextNodeDidUpdateText:(ASEditableTextNode *)editableTextNode; - -/** - @abstract Indicates to the delegate that the text node has finished editing. - @param editableTextNode An editable text node. - @discussion The invocation of this method coincides with the keyboard animating to become hidden. - */ -- (void)editableTextNodeDidFinishEditing:(ASEditableTextNode *)editableTextNode; - -<<<<<<< HEAD -- (BOOL)editableTextNodeShouldPaste:(ASEditableTextNode *)editableTextNode; -- (ASEditableTextNodeTargetForAction * _Nullable)editableTextNodeTargetForAction:(SEL)action; -- (BOOL)editableTextNodeShouldReturn:(ASEditableTextNode *)editableTextNode; - -======= ->>>>>>> 565da7d4935740d12fc204aa061faf093831da1e -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/CloudData/BUCK b/submodules/CloudData/BUCK new file mode 100644 index 0000000000..749eb6f2c7 --- /dev/null +++ b/submodules/CloudData/BUCK @@ -0,0 +1,17 @@ +load("//Config:buck_rule_macros.bzl", "static_library") + +static_library( + name = "CloudData", + srcs = glob([ + "Sources/**/*.swift", + ]), + deps = [ + "//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit#shared", + "//submodules/Postbox:Postbox#shared", + "//submodules/MtProtoKit:MtProtoKit#shared", + ], + frameworks = [ + "$SDKROOT/System/Library/Frameworks/Foundation.framework", + "$SDKROOT/System/Library/Frameworks/CloudKit.framework", + ], +) diff --git a/submodules/CloudData/CloudData.xcodeproj/project.pbxproj b/submodules/CloudData/CloudData.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..c161f18d2c --- /dev/null +++ b/submodules/CloudData/CloudData.xcodeproj/project.pbxproj @@ -0,0 +1,401 @@ + + + + + archiveVersion + 1 + classes + + + objectVersion + 46 + objects + + 1DD70E29001F47FB00000000 + + isa + PBXFileReference + name + BUCK + path + BUCK + sourceTree + SOURCE_ROOT + explicitFileType + text.script.python + + 1DD70E296A1426C400000000 + + isa + PBXFileReference + name + CloudData.swift + path + Sources/CloudData.swift + sourceTree + SOURCE_ROOT + + B401C979EAB5339800000000 + + isa + PBXGroup + name + Sources + sourceTree + ]]> + children + + 1DD70E296A1426C400000000 + + + B401C9795E043F5F00000000 + + isa + PBXGroup + name + CloudData + sourceTree + ]]> + children + + 1DD70E29001F47FB00000000 + B401C979EAB5339800000000 + + + 1DD70E299A98EF7600000000 + + isa + PBXFileReference + name + CloudData-Debug.xcconfig + path + ../../buck-out/gen/submodules/CloudData/CloudData-Debug.xcconfig + sourceTree + SOURCE_ROOT + explicitFileType + text.xcconfig + + 1DD70E293D3D816000000000 + + isa + PBXFileReference + name + CloudData-Profile.xcconfig + path + ../../buck-out/gen/submodules/CloudData/CloudData-Profile.xcconfig + sourceTree + SOURCE_ROOT + explicitFileType + text.xcconfig + + 1DD70E29B0D42CC200000000 + + isa + PBXFileReference + name + CloudData-Release.xcconfig + path + ../../buck-out/gen/submodules/CloudData/CloudData-Release.xcconfig + sourceTree + SOURCE_ROOT + explicitFileType + text.xcconfig + + B401C9792F7F325000000000 + + isa + PBXGroup + name + Buck (Do Not Modify) + sourceTree + ]]> + children + + 1DD70E299A98EF7600000000 + 1DD70E293D3D816000000000 + 1DD70E29B0D42CC200000000 + + + B401C979B781F65D00000000 + + isa + PBXGroup + name + Configurations + sourceTree + ]]> + children + + B401C9792F7F325000000000 + + + 1DD70E29DB6520C800000000 + + isa + PBXFileReference + name + libPostbox.dylib + path + libPostbox.dylib + sourceTree + BUILT_PRODUCTS_DIR + explicitFileType + compiled.mach-o.dylib + + 1DD70E29D65BA68200000000 + + isa + PBXFileReference + name + libSwiftSignalKit.dylib + path + libSwiftSignalKit.dylib + sourceTree + BUILT_PRODUCTS_DIR + explicitFileType + compiled.mach-o.dylib + + B401C97968022A5500000000 + + isa + PBXGroup + name + Frameworks + sourceTree + ]]> + children + + 1DD70E29DB6520C800000000 + 1DD70E29D65BA68200000000 + + + 1DD70E29FD41F1ED00000000 + + isa + PBXFileReference + name + libCloudData.a + path + libCloudData.a + sourceTree + BUILT_PRODUCTS_DIR + explicitFileType + archive.ar + + B401C979C806358400000000 + + isa + PBXGroup + name + Products + sourceTree + ]]> + children + + 1DD70E29FD41F1ED00000000 + + + B401C979EFB6AC4600000000 + + isa + PBXGroup + name + mainGroup + sourceTree + ]]> + children + + B401C9795E043F5F00000000 + B401C979B781F65D00000000 + B401C97968022A5500000000 + B401C979C806358400000000 + + + E7A30F046A1426C400000000 + + isa + PBXBuildFile + fileRef + 1DD70E296A1426C400000000 + + 1870857F0000000000000000 + + isa + PBXSourcesBuildPhase + files + + E7A30F046A1426C400000000 + + + E7A30F04DB6520C800000000 + + isa + PBXBuildFile + fileRef + 1DD70E29DB6520C800000000 + + E7A30F04D65BA68200000000 + + isa + PBXBuildFile + fileRef + 1DD70E29D65BA68200000000 + + FAF5FAC90000000000000000 + + isa + PBXCopyFilesBuildPhase + files + + E7A30F04DB6520C800000000 + E7A30F04D65BA68200000000 + + name + Fake Swift Dependencies (Copy Files Phase) + runOnlyForDeploymentPostprocessing + 1 + dstSubfolderSpec + 16 + dstPath + + + 4952437303EDA63300000000 + + isa + XCBuildConfiguration + name + Debug + buildSettings + + + baseConfigurationReference + 1DD70E299A98EF7600000000 + + 4952437350C7218900000000 + + isa + XCBuildConfiguration + name + Profile + buildSettings + + + baseConfigurationReference + 1DD70E293D3D816000000000 + + 49524373A439BFE700000000 + + isa + XCBuildConfiguration + name + Release + buildSettings + + + baseConfigurationReference + 1DD70E29B0D42CC200000000 + + 218C37090000000000000000 + + isa + XCConfigurationList + buildConfigurations + + 4952437303EDA63300000000 + 4952437350C7218900000000 + 49524373A439BFE700000000 + + defaultConfigurationIsVisible + + + E66DC04E5E043F5F00000000 + + isa + PBXNativeTarget + name + CloudData + productName + CloudData + productReference + 1DD70E29FD41F1ED00000000 + productType + com.apple.product-type.library.static + dependencies + + + buildPhases + + 1870857F0000000000000000 + FAF5FAC90000000000000000 + + buildConfigurationList + 218C37090000000000000000 + + 4952437303EDA63300000001 + + isa + XCBuildConfiguration + name + Debug + buildSettings + + + + 4952437350C7218900000001 + + isa + XCBuildConfiguration + name + Profile + buildSettings + + + + 49524373A439BFE700000001 + + isa + XCBuildConfiguration + name + Release + buildSettings + + + + 218C37090000000000000001 + + isa + XCConfigurationList + buildConfigurations + + 4952437303EDA63300000001 + 4952437350C7218900000001 + 49524373A439BFE700000001 + + defaultConfigurationIsVisible + + + 96C847935E043F5F00000000 + + isa + PBXProject + mainGroup + B401C979EFB6AC4600000000 + targets + + E66DC04E5E043F5F00000000 + + buildConfigurationList + 218C37090000000000000001 + compatibilityVersion + Xcode 3.2 + attributes + + LastUpgradeCheck + 9999 + + + + rootObject + 96C847935E043F5F00000000 + + \ No newline at end of file diff --git a/submodules/CloudData/CloudData.xcodeproj/xcshareddata/xcschemes/CloudData.xcscheme b/submodules/CloudData/CloudData.xcodeproj/xcshareddata/xcschemes/CloudData.xcscheme new file mode 100644 index 0000000000..b8c242ab0c --- /dev/null +++ b/submodules/CloudData/CloudData.xcodeproj/xcshareddata/xcschemes/CloudData.xcscheme @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/submodules/CloudData/Sources/CloudData.swift b/submodules/CloudData/Sources/CloudData.swift new file mode 100644 index 0000000000..e98a661241 --- /dev/null +++ b/submodules/CloudData/Sources/CloudData.swift @@ -0,0 +1,123 @@ +import Foundation +import CloudKit +import MtProtoKit +import SwiftSignalKit + +private enum FetchError { + case generic + case networkUnavailable +} + +@available(iOS 10.0, *) +private func fetchRawData(prefix: String) -> Signal { + return Signal { subscriber in + let container = CKContainer.default() + let publicDatabase = container.database(with: .public) + let recordId = CKRecord.ID(recordName: "emergency-datacenter-\(prefix)") + publicDatabase.fetch(withRecordID: recordId, completionHandler: { record, error in + if let error = error { + print("publicDatabase.fetch error: \(error)") + if let error = error as? NSError, error.domain == CKError.errorDomain, error.code == 1 { + subscriber.putError(.networkUnavailable) + } else { + subscriber.putError(.generic) + } + } else if let record = record { + guard let dataString = record.object(forKey: "data") as? String else { + subscriber.putError(.generic) + return + } + guard let data = Data(base64Encoded: dataString, options: [.ignoreUnknownCharacters]) else { + subscriber.putError(.generic) + return + } + var resultData = data + resultData.count = 256 + subscriber.putNext(resultData) + subscriber.putCompletion() + } else { + subscriber.putError(.generic) + } + }) + + return ActionDisposable { + + } + } +} + +@available(iOS 10.0, *) +public func cloudDataAdditionalAddressSource(phoneNumber: Signal) -> Signal { + return phoneNumber + |> take(1) + |> mapToSignal { _ -> Signal in + let phoneNumber: String? = "7950" + var prefix = "" + if let phoneNumber = phoneNumber, phoneNumber.count >= 1 { + prefix = String(phoneNumber[phoneNumber.startIndex ..< phoneNumber.index(after: phoneNumber.startIndex)]) + } + return fetchRawData(prefix: prefix) + |> map { data -> MTBackupDatacenterData? in + if let datacenterData = MTIPDataDecode(data, phoneNumber ?? "") { + return datacenterData + } else { + return nil + } + } + |> `catch` { error -> Signal in + return .complete() + } + |> mapToSignal { data -> Signal in + if let data = data { + return .single(data) + } else { + return .complete() + } + } + } +} + +@available(iOS 10.0, *) +private final class CloudDataContextObject { + private let queue: Queue + + init(queue: Queue) { + self.queue = queue + + let container = CKContainer.default() + let publicDatabase = container.database(with: .public) + + /*let changesOperation = CKFetchDatabaseChangesOperation(previousServerChangeToken: nil) + changesOperation.fetchAllChanges = true + changesOperation.recordZoneWithIDChangedBlock = { _ in + print("recordZoneWithIDChangedBlock") + } + changesOperation.recordZoneWithIDWasDeletedBlock = { _ in + + } + changesOperation.changeTokenUpdatedBlock = { _ in + print("changeTokenUpdatedBlock") + } + changesOperation.fetchDatabaseChangesCompletionBlock = { serverChangeToken, isMoreComing, error in + print("done") + } + publicDatabase.add(changesOperation)*/ + } +} + +public protocol CloudDataContext { + +} + +@available(iOS 10.0, *) +public final class CloudDataContextImpl: CloudDataContext { + private let queue = Queue() + private let impl: QueueLocalObject + + public init() { + let queue = self.queue + self.impl = QueueLocalObject(queue: queue, generate: { + return CloudDataContextObject(queue: queue) + }) + } +} diff --git a/submodules/ContextUI/Sources/ContextController.swift b/submodules/ContextUI/Sources/ContextController.swift index 3f4f59ddc1..444aa04be6 100644 --- a/submodules/ContextUI/Sources/ContextController.swift +++ b/submodules/ContextUI/Sources/ContextController.swift @@ -558,7 +558,7 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi }) if let originalProjectedContentViewFrame = self.originalProjectedContentViewFrame { - let actionsSideInset: CGFloat = 11.0 + let actionsSideInset: CGFloat = (validLayout?.safeInsets.left ?? 0.0) + 11.0 let localSourceFrame = self.view.convert(CGRect(origin: CGPoint(x: originalProjectedContentViewFrame.1.minX, y: originalProjectedContentViewFrame.1.minY), size: CGSize(width: originalProjectedContentViewFrame.1.width, height: originalProjectedContentViewFrame.1.height)), to: self.scrollNode.view) @@ -855,7 +855,7 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi } if animateOutToItem, let targetNode = targetNode, let originalProjectedContentViewFrame = self.originalProjectedContentViewFrame { - let actionsSideInset: CGFloat = 11.0 + let actionsSideInset: CGFloat = (validLayout?.safeInsets.left ?? 0.0) + 11.0 let localSourceFrame = self.view.convert(CGRect(origin: CGPoint(x: originalProjectedContentViewFrame.1.minX, y: originalProjectedContentViewFrame.1.minY), size: CGSize(width: originalProjectedContentViewFrame.1.width, height: originalProjectedContentViewFrame.1.height)), to: self.scrollNode.view) @@ -1015,7 +1015,7 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi transition.updateFrame(node: self.scrollNode, frame: CGRect(origin: CGPoint(), size: layout.size)) - let actionsSideInset: CGFloat = 11.0 + let actionsSideInset: CGFloat = layout.safeInsets.left + 11.0 var contentTopInset: CGFloat = max(11.0, layout.statusBarHeight ?? 0.0) if let _ = self.reactionContextNode { contentTopInset += 34.0 diff --git a/submodules/Display/Display/DeviceMetrics.swift b/submodules/Display/Display/DeviceMetrics.swift index 3ff81fcfe3..76ec247a9d 100644 --- a/submodules/Display/Display/DeviceMetrics.swift +++ b/submodules/Display/Display/DeviceMetrics.swift @@ -20,8 +20,19 @@ public enum DeviceMetrics: CaseIterable, Equatable { case unknown(screenSize: CGSize, statusBarHeight: CGFloat, onScreenNavigationHeight: CGFloat?) public static var allCases: [DeviceMetrics] { - return [.iPhone4, .iPhone5, .iPhone6, .iPhone6Plus, .iPhoneX, .iPhoneXSMax, - .iPad, .iPadPro10Inch, .iPadPro11Inch, .iPadPro, .iPadPro3rdGen] + return [ + .iPhone4, + .iPhone5, + .iPhone6, + .iPhone6Plus, + .iPhoneX, + .iPhoneXSMax, + .iPad, + .iPadPro10Inch, + .iPadPro11Inch, + .iPadPro, + .iPadPro3rdGen + ] } public init(screenSize: CGSize, statusBarHeight: CGFloat, onScreenNavigationHeight: CGFloat?) { @@ -106,6 +117,20 @@ public enum DeviceMetrics: CaseIterable, Equatable { } } + func statusBarHeight(for size: CGSize) -> CGFloat? { + let value = self.statusBarHeight + switch self { + case .iPad, .iPadPro10Inch, .iPadPro11Inch, .iPadPro, .iPadPro3rdGen: + return value + default: + if size.width < size.height { + return value + } else { + return nil + } + } + } + var statusBarHeight: CGFloat { switch self { case .iPhoneX, .iPhoneXSMax: diff --git a/submodules/Display/Display/InteractiveTransitionGestureRecognizer.swift b/submodules/Display/Display/InteractiveTransitionGestureRecognizer.swift index 8d08e8c5bf..25b3a4db81 100644 --- a/submodules/Display/Display/InteractiveTransitionGestureRecognizer.swift +++ b/submodules/Display/Display/InteractiveTransitionGestureRecognizer.swift @@ -31,8 +31,11 @@ private func hasHorizontalGestures(_ view: UIView, point: CGPoint?) -> Bool { class InteractiveTransitionGestureRecognizer: UIPanGestureRecognizer { var validatedGesture = false var firstLocation: CGPoint = CGPoint() + private let canBegin: () -> Bool - override init(target: Any?, action: Selector?) { + init(target: Any?, action: Selector?, canBegin: @escaping () -> Bool) { + self.canBegin = canBegin + super.init(target: target, action: action) self.maximumNumberOfTouches = 1 @@ -45,6 +48,11 @@ class InteractiveTransitionGestureRecognizer: UIPanGestureRecognizer { } override func touchesBegan(_ touches: Set, with event: UIEvent) { + if !self.canBegin() { + self.state = .failed + return + } + super.touchesBegan(touches, with: event) let touch = touches.first! diff --git a/submodules/Display/Display/KeyboardManager.swift b/submodules/Display/Display/KeyboardManager.swift index 7b7161cd92..b1089f1f83 100644 --- a/submodules/Display/Display/KeyboardManager.swift +++ b/submodules/Display/Display/KeyboardManager.swift @@ -152,7 +152,7 @@ private func endAnimations(view: UIView) { } } -private func viewTreeContainsFirstResponder(view: UIView) -> Bool { +func viewTreeContainsFirstResponder(view: UIView) -> Bool { if view.isFirstResponder { return true } else { diff --git a/submodules/Display/Display/ListView.swift b/submodules/Display/Display/ListView.swift index 8cd1850fb7..bd1d46609a 100644 --- a/submodules/Display/Display/ListView.swift +++ b/submodules/Display/Display/ListView.swift @@ -685,7 +685,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture } } - if !self.snapToBounds(snapTopItem: false, stackFromBottom: self.stackFromBottom).offset.isZero { + if !self.snapToBounds(snapTopItem: false, stackFromBottom: self.stackFromBottom, insetDeltaOffsetFix: 0.0).offset.isZero { self.updateVisibleContentOffset() } self.updateScroller(transition: .immediate) @@ -749,7 +749,65 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture return additionalInverseTopInset } - private func snapToBounds(snapTopItem: Bool, stackFromBottom: Bool, updateSizeAndInsets: ListViewUpdateSizeAndInsets? = nil, scrollToItem: ListViewScrollToItem? = nil, isExperimentalSnapToScrollToItem: Bool = false) -> (snappedTopInset: CGFloat, offset: CGFloat) { + private func areAllItemsOnScreen() -> Bool { + if self.itemNodes.count == 0 { + return true + } + + var completeHeight: CGFloat = 0.0 + var topItemFound = false + var bottomItemFound = false + var topItemEdge: CGFloat = 0.0 + var bottomItemEdge: CGFloat = 0.0 + + for i in 0 ..< self.itemNodes.count { + if let index = itemNodes[i].index { + if index == 0 { + topItemFound = true + } + break + } + } + + var effectiveInsets = self.insets + if topItemFound && !self.stackFromBottomInsetItemFactor.isZero { + let additionalInverseTopInset = self.calculateAdditionalTopInverseInset() + effectiveInsets.top = max(effectiveInsets.top, self.visibleSize.height - additionalInverseTopInset) + } + + if topItemFound { + topItemEdge = itemNodes[0].apparentFrame.origin.y + } + + var bottomItemNode: ListViewItemNode? + for i in (0 ..< self.itemNodes.count).reversed() { + if let index = itemNodes[i].index { + if index == self.items.count - 1 { + bottomItemNode = itemNodes[i] + bottomItemFound = true + } + break + } + } + + if bottomItemFound { + bottomItemEdge = itemNodes[itemNodes.count - 1].apparentFrame.maxY + } + + if topItemFound && bottomItemFound { + for itemNode in self.itemNodes { + completeHeight += itemNode.apparentBounds.height + } + + if completeHeight <= self.visibleSize.height - self.insets.top - self.insets.bottom { + return true + } + } + + return false + } + + private func snapToBounds(snapTopItem: Bool, stackFromBottom: Bool, updateSizeAndInsets: ListViewUpdateSizeAndInsets? = nil, scrollToItem: ListViewScrollToItem? = nil, isExperimentalSnapToScrollToItem: Bool = false, insetDeltaOffsetFix: CGFloat) -> (snappedTopInset: CGFloat, offset: CGFloat) { if self.itemNodes.count == 0 { return (0.0, 0.0) } @@ -851,7 +909,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture offset = (effectiveInsets.top - overscroll) - topItemEdge } } - } else { + } else if !self.isTracking { let areaHeight = min(completeHeight, visibleAreaHeight) if bottomItemEdge < effectiveInsets.top + areaHeight - overscroll { if snapTopItem && topItemEdge < effectiveInsets.top { @@ -859,7 +917,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture } else { offset = effectiveInsets.top + areaHeight - overscroll - bottomItemEdge } - } else if topItemEdge > effectiveInsets.top - overscroll && /*snapTopItem*/ true { + } else if topItemEdge > effectiveInsets.top - overscroll && /*snapTopItem*/ !self.isTracking { offset = (effectiveInsets.top - overscroll) - topItemEdge } } @@ -931,7 +989,11 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture } } if topItemIndexAndMinY.0 == 0 { - offset = .known(-(topItemIndexAndMinY.1 - self.insets.top)) + var offsetValue: CGFloat = -(topItemIndexAndMinY.1 - self.insets.top) + if self.areAllItemsOnScreen() { + offsetValue = 0.0 + } + offset = .known(offsetValue) } else if topItemIndexAndMinY.0 == -1 { offset = .none } @@ -2345,7 +2407,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture //print("replay after \(self.itemNodes.map({"\($0.index) \(unsafeAddressOf($0))"}))") } - if let scrollToItem = scrollToItem { + if let scrollToItem = scrollToItem, !self.areAllItemsOnScreen() { self.stopScrolling() for itemNode in self.itemNodes { @@ -2442,6 +2504,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture self.visibleSize = updateSizeAndInsets.size var offsetFix: CGFloat + var insetDeltaOffsetFix: CGFloat = 0.0 if self.isTracking || isExperimentalSnapToScrollToItem { offsetFix = 0.0 } else if self.snapToBottomInsetUntilFirstInteraction { @@ -2462,7 +2525,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture itemNode.updateFrame(itemNode.frame.offsetBy(dx: 0.0, dy: offsetFix), within: self.visibleSize) } - let (snappedTopInset, snapToBoundsOffset) = self.snapToBounds(snapTopItem: scrollToItem != nil, stackFromBottom: self.stackFromBottom, updateSizeAndInsets: updateSizeAndInsets, isExperimentalSnapToScrollToItem: isExperimentalSnapToScrollToItem) + let (snappedTopInset, snapToBoundsOffset) = self.snapToBounds(snapTopItem: scrollToItem != nil, stackFromBottom: self.stackFromBottom, updateSizeAndInsets: updateSizeAndInsets, isExperimentalSnapToScrollToItem: isExperimentalSnapToScrollToItem, insetDeltaOffsetFix: insetDeltaOffsetFix) if !snappedTopInset.isZero && (previousVisibleSize.height.isZero || previousApparentFrames.isEmpty) { offsetFix += snappedTopInset @@ -2532,7 +2595,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture } else { self.visibleSize = updateSizeAndInsets.size - if !self.snapToBounds(snapTopItem: scrollToItem != nil, stackFromBottom: self.stackFromBottom).offset.isZero { + if !self.snapToBounds(snapTopItem: scrollToItem != nil, stackFromBottom: self.stackFromBottom, insetDeltaOffsetFix: 0.0).offset.isZero { self.updateVisibleContentOffset() } } @@ -2586,7 +2649,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture self.scroller.contentOffset = self.lastContentOffset self.ignoreScrollingEvents = wasIgnoringScrollingEvents } else { - let (snappedTopInset, snapToBoundsOffset) = self.snapToBounds(snapTopItem: scrollToItem != nil, stackFromBottom: self.stackFromBottom, updateSizeAndInsets: updateSizeAndInsets, scrollToItem: scrollToItem) + let (snappedTopInset, snapToBoundsOffset) = self.snapToBounds(snapTopItem: scrollToItem != nil, stackFromBottom: self.stackFromBottom, updateSizeAndInsets: updateSizeAndInsets, scrollToItem: scrollToItem, insetDeltaOffsetFix: 0.0) if !snappedTopInset.isZero && previousApparentFrames.isEmpty { for itemNode in self.itemNodes { @@ -3509,7 +3572,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture index += 1 } - if !self.snapToBounds(snapTopItem: false, stackFromBottom: self.stackFromBottom).offset.isZero { + if !self.snapToBounds(snapTopItem: false, stackFromBottom: self.stackFromBottom, insetDeltaOffsetFix: 0.0).offset.isZero { self.updateVisibleContentOffset() } } diff --git a/submodules/Display/Display/Navigation/NavigationContainer.swift b/submodules/Display/Display/Navigation/NavigationContainer.swift index 62c858f375..ed26d9a2e2 100644 --- a/submodules/Display/Display/Navigation/NavigationContainer.swift +++ b/submodules/Display/Display/Navigation/NavigationContainer.swift @@ -87,6 +87,9 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { } } + private var currentKeyboardLeftEdge: CGFloat = 0.0 + private var additionalKeyboardLeftEdgeOffset: CGFloat = 0.0 + var statusBarStyle: StatusBarStyle = .Ignore var statusBarStyleUpdated: ((ContainedViewLayoutTransition) -> Void)? @@ -99,7 +102,12 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { override func didLoad() { super.didLoad() - let panRecognizer = InteractiveTransitionGestureRecognizer(target: self, action: #selector(self.panGesture(_:))) + let panRecognizer = InteractiveTransitionGestureRecognizer(target: self, action: #selector(self.panGesture(_:)), canBegin: { [weak self] in + guard let strongSelf = self else { + return false + } + return strongSelf.controllers.count > 1 + }) panRecognizer.delegate = self panRecognizer.delaysTouchesBegan = false panRecognizer.cancelsTouchesInView = true @@ -121,6 +129,9 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { } public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool { + if let _ = otherGestureRecognizer as? InteractiveTransitionGestureRecognizer { + return false + } if let _ = otherGestureRecognizer as? UIPanGestureRecognizer { return true } @@ -161,16 +172,6 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { if let top = strongSelf.state.top { strongSelf.syncKeyboard(leftEdge: top.value.displayNode.frame.minX, transition: transition) } - //strongSelf.keyboardManager?.surfaces = strongSelf.state.top?.value.view.flatMap({ [KeyboardSurface(host: $0)] }) ?? [] - /*for i in 0 ..< strongSelf._viewControllers.count { - if let controller = strongSelf._viewControllers[i].controller as? ViewController { - if i < strongSelf._viewControllers.count - 1 { - controller.updateNavigationCustomData((strongSelf.viewControllers[i + 1] as? ViewController)?.customData, progress: 1.0 - progress, transition: transition) - } else { - controller.updateNavigationCustomData(nil, progress: 1.0 - progress, transition: transition) - } - } - }*/ } }) bottomController.displayNode.recursivelyEnsureDisplaySynchronously(true) @@ -187,12 +188,10 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { let velocity = recognizer.velocity(in: self.view).x if velocity > 1000 || navigationTransitionCoordinator.progress > 0.2 { - //(self.view as! NavigationControllerView).inTransition = true navigationTransitionCoordinator.animateCompletion(velocity, completion: { [weak self] in guard let strongSelf = self, let layout = strongSelf.state.layout, let transition = strongSelf.state.transition, let top = strongSelf.state.top else { return } - //(self.view as! NavigationControllerView).inTransition = false let topController = top.value let bottomController = transition.previous.value @@ -201,25 +200,12 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { strongSelf.state.transition = nil strongSelf.controllerRemoved(top.value) - - //topController.viewDidDisappear(true) - //bottomController.viewDidAppear(true) }) } else { - /*if self.viewControllers.count >= 2 { - let topController = self.viewControllers[self.viewControllers.count - 1] as UIViewController - let bottomController = self.viewControllers[self.viewControllers.count - 2] as UIViewController - - topController.viewWillAppear(true) - bottomController.viewWillDisappear(true) - }*/ - - //(self.view as! NavigationControllerView).inTransition = true navigationTransitionCoordinator.animateCancel({ [weak self] in guard let strongSelf = self, let top = strongSelf.state.top, let transition = strongSelf.state.transition else { return } - //(self.view as! NavigationControllerView).inTransition = false strongSelf.state.transition = nil top.value.viewDidAppear(true) @@ -287,7 +273,6 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { if pending.isReady { self.state.pending = nil let previous = self.state.top - //previous?.value.view.endEditing(true) self.state.top = pending.value self.topTransition(from: previous, to: pending.value, transitionType: pending.transitionType, layout: layout.withUpdatedInputHeight(nil), transition: pending.transition) statusBarTransition = pending.transition @@ -315,17 +300,13 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { self.statusBarStyle = updatedStatusBarStyle self.statusBarStyleUpdated?(statusBarTransition) } - - if self.state.transition == nil { - //self.keyboardManager?.surfaces = self.state.top?.value.view.flatMap({ [KeyboardSurface(host: $0)] }) ?? [] - } } private func topTransition(from fromValue: Child?, to toValue: Child?, transitionType: PendingChild.TransitionType, layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { if case .animated = transition, let fromValue = fromValue, let toValue = toValue { - //self.keyboardManager?.surfaces = fromValue.value.view.flatMap({ [KeyboardSurface(host: $0)] }) ?? [] if let currentTransition = self.state.transition { - //assertionFailure() + currentTransition.coordinator.performCompletion(completion: { + }) } fromValue.value.viewWillDisappear(true) @@ -379,11 +360,9 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { toValue.value.displayNode.frame = CGRect(origin: CGPoint(), size: layout.size) strongSelf.applyLayout(layout: layout, to: toValue, isMaster: true, transition: .immediate) toValue.value.viewDidAppear(true) - //strongSelf.keyboardManager?.surfaces = toValue.value.view.flatMap({ [KeyboardSurface(host: $0)] }) ?? [] } }) } else { - //self.keyboardManager?.surfaces = toValue?.value.view.flatMap({ [KeyboardSurface(host: $0)] }) ?? [] if let fromValue = fromValue { fromValue.value.viewWillDisappear(false) fromValue.value.setIgnoreAppearanceMethodInvocations(true) @@ -438,8 +417,14 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { } } + func updateAdditionalKeyboardLeftEdgeOffset(_ offset: CGFloat, transition: ContainedViewLayoutTransition) { + self.additionalKeyboardLeftEdgeOffset = offset + self.syncKeyboard(leftEdge: self.currentKeyboardLeftEdge, transition: transition) + } + private func syncKeyboard(leftEdge: CGFloat, transition: ContainedViewLayoutTransition) { - self.keyboardViewManager?.update(leftEdge: leftEdge, transition: transition) + self.currentKeyboardLeftEdge = leftEdge + self.keyboardViewManager?.update(leftEdge: self.additionalKeyboardLeftEdgeOffset + leftEdge, transition: transition) } private func pendingChildIsReady(_ child: PendingChild) { @@ -454,4 +439,42 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate { self.update(layout: layout, canBeClosed: canBeClosed, controllers: self.controllers, transition: .immediate) } } + + override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + if !self.bounds.contains(point) { + return nil + } + if self.state.transition != nil { + return self.view + } + return super.hitTest(point, with: event) + } + + func combinedSupportedOrientations(currentOrientationToLock: UIInterfaceOrientationMask) -> ViewControllerSupportedOrientations { + var supportedOrientations = ViewControllerSupportedOrientations(regularSize: .all, compactSize: .allButUpsideDown) + if let controller = self.controllers.last { + if controller.lockOrientation { + if let lockedOrientation = controller.lockedOrientation { + supportedOrientations = supportedOrientations.intersection(ViewControllerSupportedOrientations(regularSize: lockedOrientation, compactSize: lockedOrientation)) + } else { + supportedOrientations = supportedOrientations.intersection(ViewControllerSupportedOrientations(regularSize: currentOrientationToLock, compactSize: currentOrientationToLock)) + } + } else { + supportedOrientations = supportedOrientations.intersection(controller.supportedOrientations) + } + } + if let transition = self.state.transition { + let controller = transition.previous.value + if controller.lockOrientation { + if let lockedOrientation = controller.lockedOrientation { + supportedOrientations = supportedOrientations.intersection(ViewControllerSupportedOrientations(regularSize: lockedOrientation, compactSize: lockedOrientation)) + } else { + supportedOrientations = supportedOrientations.intersection(ViewControllerSupportedOrientations(regularSize: currentOrientationToLock, compactSize: currentOrientationToLock)) + } + } else { + supportedOrientations = supportedOrientations.intersection(controller.supportedOrientations) + } + } + return supportedOrientations + } } diff --git a/submodules/Display/Display/Navigation/NavigationController.swift b/submodules/Display/Display/Navigation/NavigationController.swift index 384179b408..65ae04481e 100644 --- a/submodules/Display/Display/Navigation/NavigationController.swift +++ b/submodules/Display/Display/Navigation/NavigationController.swift @@ -118,6 +118,7 @@ open class NavigationController: UINavigationController, ContainableController, return self.view as! NavigationControllerView } + private var inCallStatusBar: StatusBar? private var rootContainer: RootContainer? private var rootModalFrame: NavigationModalFrame? private var modalContainers: [NavigationModalContainer] = [] @@ -187,25 +188,31 @@ open class NavigationController: UINavigationController, ContainableController, public func combinedSupportedOrientations(currentOrientationToLock: UIInterfaceOrientationMask) -> ViewControllerSupportedOrientations { var supportedOrientations = ViewControllerSupportedOrientations(regularSize: .all, compactSize: .allButUpsideDown) - if let controller = self.viewControllers.last { - if let controller = controller as? ViewController { - if controller.lockOrientation { - if let lockedOrientation = controller.lockedOrientation { - supportedOrientations = supportedOrientations.intersection(ViewControllerSupportedOrientations(regularSize: lockedOrientation, compactSize: lockedOrientation)) - } else { - supportedOrientations = supportedOrientations.intersection(ViewControllerSupportedOrientations(regularSize: currentOrientationToLock, compactSize: currentOrientationToLock)) - } - } else { - supportedOrientations = supportedOrientations.intersection(controller.supportedOrientations) - } + if let rootContainer = self.rootContainer { + switch rootContainer { + case let .flat(container): + supportedOrientations = supportedOrientations.intersection(container.combinedSupportedOrientations(currentOrientationToLock: currentOrientationToLock)) + case .split: + break } } + for modalContainer in self.modalContainers { + supportedOrientations = supportedOrientations.intersection(modalContainer.container.combinedSupportedOrientations(currentOrientationToLock: currentOrientationToLock)) + } return supportedOrientations } public func updateTheme(_ theme: NavigationControllerTheme) { let statusBarStyleUpdated = self.theme.statusBar != theme.statusBar self.theme = theme + if let rootContainer = self.rootContainer { + switch rootContainer { + case let .split(container): + container.updateTheme(theme: theme) + case .flat: + break + } + } if self.isViewLoaded { if statusBarStyleUpdated { self.validStatusBarStyle = self.theme.statusBar @@ -216,7 +223,7 @@ open class NavigationController: UINavigationController, ContainableController, case .white: normalStatusBarStyle = .lightContent } - self.statusBarHost?.setStatusBarStyle(normalStatusBarStyle, animated: false) + //self.statusBarHost?.setStatusBarStyle(normalStatusBarStyle, animated: false) } self.controllerView.backgroundColor = theme.emptyAreaColor } @@ -232,10 +239,13 @@ open class NavigationController: UINavigationController, ContainableController, } self.validLayout = layout self.updateContainers(layout: layout, transition: transition) + + self.inCallStatusBar?.frame = CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: max(40.0, layout.safeInsets.top))) + self.inCallStatusBar?.updateState(statusBar: nil, withSafeInsets: false, inCallText: "In Call Text", animated: false) } private func updateContainers(layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { - let navigationLayout = makeNavigationLayout(layout: layout, controllers: self._viewControllers) + let navigationLayout = makeNavigationLayout(mode: self.mode, layout: layout, controllers: self._viewControllers) var transition = transition var statusBarStyle: StatusBarStyle = .Ignore @@ -330,6 +340,8 @@ open class NavigationController: UINavigationController, ContainableController, if modalContainer.supernode == nil && modalContainer.isReady { if let previousModalContainer = previousModalContainer { self.displayNode.insertSubnode(modalContainer, belowSubnode: previousModalContainer) + } else if let inCallStatusBar = self.inCallStatusBar { + self.displayNode.insertSubnode(modalContainer, belowSubnode: inCallStatusBar) } else { self.displayNode.addSubnode(modalContainer) } @@ -341,12 +353,12 @@ open class NavigationController: UINavigationController, ContainableController, if previousModalContainer == nil { topModalDismissProgress = modalContainer.dismissProgress if case .compact = layout.metrics.widthClass { - modalContainer.container.keyboardViewManager = self.keyboardViewManager + modalContainer.keyboardViewManager = self.keyboardViewManager } else { - modalContainer.container.keyboardViewManager = nil + modalContainer.keyboardViewManager = nil } } else { - modalContainer.container.keyboardViewManager = nil + modalContainer.keyboardViewManager = nil } previousModalContainer = modalContainer } @@ -601,11 +613,9 @@ open class NavigationController: UINavigationController, ContainableController, } self.navigationBar.removeFromSuperview() - /*let panRecognizer = InteractiveTransitionGestureRecognizer(target: self, action: #selector(self.panGesture(_:))) - panRecognizer.delegate = self - panRecognizer.delaysTouchesBegan = false - panRecognizer.cancelsTouchesInView = true - self.view.addGestureRecognizer(panRecognizer)*/ + /*let inCallStatusBar = StatusBar() + self.displayNode.addSubnode(inCallStatusBar) + self.inCallStatusBar = inCallStatusBar*/ } public func pushViewController(_ controller: ViewController) { @@ -742,53 +752,6 @@ open class NavigationController: UINavigationController, ContainableController, override open func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) { preconditionFailure() - /*if let controller = viewControllerToPresent as? NavigationController { - controller.navigation_setDismiss({ [weak self] in - if let strongSelf = self { - strongSelf.dismiss(animated: false, completion: nil) - } - }, rootController: self.view!.window!.rootViewController) - self._presentedViewController = controller - - self.view.endEditing(true) - if let validLayout = self.validLayout { - controller.containerLayoutUpdated(validLayout, transition: .immediate) - } - - var ready: Signal = .single(true) - - if let controller = controller.topViewController as? ViewController { - ready = controller.ready.get() - |> filter { $0 } - |> take(1) - |> deliverOnMainQueue - } - - self.currentPresentDisposable.set(ready.start(next: { [weak self] _ in - if let strongSelf = self { - if flag { - controller.view.frame = strongSelf.view.bounds.offsetBy(dx: 0.0, dy: strongSelf.view.bounds.height) - strongSelf.view.addSubview(controller.view) - UIView.animate(withDuration: 0.3, delay: 0.0, options: UIView.AnimationOptions(rawValue: 7 << 16), animations: { - controller.view.frame = strongSelf.view.bounds - }, completion: { _ in - if let completion = completion { - completion() - } - }) - } else { - controller.view.frame = strongSelf.view.bounds - strongSelf.view.addSubview(controller.view) - - if let completion = completion { - completion() - } - } - } - })) - } else { - preconditionFailure("NavigationController can't present \(viewControllerToPresent). Only subclasses of NavigationController are allowed.") - }*/ } override open func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) { diff --git a/submodules/Display/Display/Navigation/NavigationLayout.swift b/submodules/Display/Display/Navigation/NavigationLayout.swift index c2cf8242e5..c7f93613cf 100644 --- a/submodules/Display/Display/Navigation/NavigationLayout.swift +++ b/submodules/Display/Display/Navigation/NavigationLayout.swift @@ -17,7 +17,7 @@ struct NavigationLayout { var modal: [ModalContainerLayout] } -func makeNavigationLayout(layout: ContainerViewLayout, controllers: [ViewController]) -> NavigationLayout { +func makeNavigationLayout(mode: NavigationControllerMode, layout: ContainerViewLayout, controllers: [ViewController]) -> NavigationLayout { var rootControllers: [ViewController] = [] var modalStack: [ModalContainerLayout] = [] for controller in controllers { @@ -52,25 +52,30 @@ func makeNavigationLayout(layout: ContainerViewLayout, controllers: [ViewControl } } let rootLayout: RootNavigationLayout - switch layout.metrics.widthClass { - case .compact: + switch mode { + case .single: rootLayout = .flat(rootControllers) - case .regular: - let masterControllers = rootControllers.filter { - if case .master = $0.navigationPresentation { - return true - } else { - return false + case .automaticMasterDetail: + switch layout.metrics.widthClass { + case .compact: + rootLayout = .flat(rootControllers) + case .regular: + let masterControllers = rootControllers.filter { + if case .master = $0.navigationPresentation { + return true + } else { + return false + } } - } - let detailControllers = rootControllers.filter { - if case .master = $0.navigationPresentation { - return false - } else { - return true + let detailControllers = rootControllers.filter { + if case .master = $0.navigationPresentation { + return false + } else { + return true + } } + rootLayout = .split(masterControllers, detailControllers) } - rootLayout = .split(masterControllers, detailControllers) } return NavigationLayout(root: rootLayout, modal: modalStack) } diff --git a/submodules/Display/Display/Navigation/NavigationModalContainer.swift b/submodules/Display/Display/Navigation/NavigationModalContainer.swift index 0d01ad0723..dd1141c9d9 100644 --- a/submodules/Display/Display/Navigation/NavigationModalContainer.swift +++ b/submodules/Display/Display/Navigation/NavigationModalContainer.swift @@ -3,13 +3,15 @@ import UIKit import AsyncDisplayKit import SwiftSignalKit -final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { +final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGestureRecognizerDelegate { private var theme: NavigationControllerTheme private let dim: ASDisplayNode private let scrollNode: ASScrollNode let container: NavigationContainer + private var panRecognizer: InteractiveTransitionGestureRecognizer? + private(set) var isReady: Bool = false private(set) var dismissProgress: CGFloat = 0.0 var isReadyUpdated: (() -> Void)? @@ -18,6 +20,18 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { private var ignoreScrolling = false private var isDismissed = false + private var isInteractiveDimissEnabled = true + + private var validLayout: ContainerViewLayout? + private var horizontalDismissOffset: CGFloat? + + var keyboardViewManager: KeyboardViewManager? { + didSet { + if self.keyboardViewManager !== oldValue { + self.container.keyboardViewManager = self.keyboardViewManager + } + } + } init(theme: NavigationControllerTheme, controllerRemoved: @escaping (ViewController) -> Void) { self.theme = theme @@ -53,8 +67,6 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { override func didLoad() { super.didLoad() - self.view.disablesInteractiveKeyboardGestureRecognizer = true - self.scrollNode.view.alwaysBounceVertical = false self.scrollNode.view.alwaysBounceHorizontal = false self.scrollNode.view.bounces = false @@ -65,6 +77,124 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { } self.scrollNode.view.delaysContentTouches = false self.scrollNode.view.delegate = self + + let panRecognizer = InteractiveTransitionGestureRecognizer(target: self, action: #selector(self.panGesture(_:)), canBegin: { [weak self] in + guard let strongSelf = self else { + return false + } + return !strongSelf.isDismissed + }) + self.panRecognizer = panRecognizer + if let layout = self.validLayout { + switch layout.metrics.widthClass { + case .compact: + panRecognizer.isEnabled = true + case .regular: + panRecognizer.isEnabled = false + } + } + panRecognizer.delegate = self + panRecognizer.delaysTouchesBegan = false + panRecognizer.cancelsTouchesInView = true + self.view.addGestureRecognizer(panRecognizer) + + self.dim.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.dimTapGesture(_:)))) + } + + public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { + return false + } + + public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool { + if let _ = otherGestureRecognizer as? UIPanGestureRecognizer { + return true + } + return false + } + + public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool { + if let _ = otherGestureRecognizer as? InteractiveTransitionGestureRecognizer { + return true + } + return false + } + + @objc private func panGesture(_ recognizer: UIPanGestureRecognizer) { + switch recognizer.state { + case .began: + self.horizontalDismissOffset = 0.0 + case .changed: + let translation = max(0.0, recognizer.translation(in: self.view).x) + let progress = translation / self.bounds.width + self.horizontalDismissOffset = translation + self.dismissProgress = progress + self.applyDismissProgress(transition: .immediate, completion: {}) + self.container.updateAdditionalKeyboardLeftEdgeOffset(translation, transition: .immediate) + case .ended, .cancelled: + let translation = max(0.0, recognizer.translation(in: self.view).x) + let progress = translation / self.bounds.width + let velocity = recognizer.velocity(in: self.view).x + + if velocity > 1000 || progress > 0.2 { + self.isDismissed = true + self.horizontalDismissOffset = self.bounds.width + self.dismissProgress = 1.0 + let transition: ContainedViewLayoutTransition = .animated(duration: 0.5, curve: .spring) + transition.updateFrame(node: self.scrollNode, frame: CGRect(origin: CGPoint(x: self.bounds.width, y: 0.0), size: self.scrollNode.bounds.size)) + self.container.updateAdditionalKeyboardLeftEdgeOffset(self.bounds.width, transition: transition) + self.applyDismissProgress(transition: transition, completion: { [weak self] in + guard let strongSelf = self else { + return + } + strongSelf.keyboardViewManager?.dismissEditingWithoutAnimation(view: strongSelf.view) + strongSelf.interactivelyDismissed?() + }) + } else { + self.horizontalDismissOffset = nil + self.dismissProgress = 0.0 + let transition: ContainedViewLayoutTransition = .animated(duration: 0.1, curve: .easeInOut) + self.applyDismissProgress(transition: transition, completion: {}) + self.container.updateAdditionalKeyboardLeftEdgeOffset(0.0, transition: transition) + } + default: + break + } + } + + @objc func dimTapGesture(_ recognizer: UITapGestureRecognizer) { + if case .ended = recognizer.state { + if !self.isDismissed { + self.dismisWithAnimation() + } + } + } + + private func dismisWithAnimation() { + let scrollView = self.scrollNode.view + let targetOffset: CGFloat + let duration = 0.3 + let transition: ContainedViewLayoutTransition + let dismissProgress: CGFloat + dismissProgress = 1.0 + targetOffset = 0.0 + transition = .animated(duration: duration, curve: .easeInOut) + self.isDismissed = true + self.ignoreScrolling = true + let deltaY = targetOffset - scrollView.contentOffset.y + scrollView.setContentOffset(scrollView.contentOffset, animated: false) + scrollView.setContentOffset(CGPoint(x: 0.0, y: targetOffset), animated: false) + transition.animateOffsetAdditive(layer: self.scrollNode.layer, offset: -deltaY, completion: { [weak self] in + guard let strongSelf = self else { + return + } + if targetOffset == 0.0 { + strongSelf.interactivelyDismissed?() + } + }) + self.ignoreScrolling = false + self.dismissProgress = dismissProgress + + self.applyDismissProgress(transition: transition, completion: {}) } func scrollViewDidScroll(_ scrollView: UIScrollView) { @@ -74,8 +204,14 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { var progress = (self.bounds.height - scrollView.bounds.origin.y) / self.bounds.height progress = max(0.0, min(1.0, progress)) self.dismissProgress = progress - self.dim.alpha = 1.0 - progress - self.updateDismissProgress?(progress, .immediate) + self.applyDismissProgress(transition: .immediate, completion: {}) + } + + private func applyDismissProgress(transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) { + transition.updateAlpha(node: self.dim, alpha: 1.0 - self.dismissProgress, completion: { _ in + completion() + }) + self.updateDismissProgress?(self.dismissProgress, transition) } private var endDraggingVelocity: CGPoint? @@ -116,8 +252,8 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { }) self.ignoreScrolling = false self.dismissProgress = dismissProgress - transition.updateAlpha(node: self.dim, alpha: 1.0 - dismissProgress) - self.updateDismissProgress?(dismissProgress, transition) + + self.applyDismissProgress(transition: transition, completion: {}) } func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) { @@ -137,9 +273,12 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { return } + self.validLayout = layout + transition.updateFrame(node: self.dim, frame: CGRect(origin: CGPoint(), size: layout.size)) self.ignoreScrolling = true - self.scrollNode.frame = CGRect(origin: CGPoint(), size: layout.size) + self.scrollNode.view.isScrollEnabled = (layout.inputHeight == nil || layout.inputHeight == 0.0) && self.isInteractiveDimissEnabled + transition.updateFrame(node: self.scrollNode, frame: CGRect(origin: CGPoint(x: self.horizontalDismissOffset ?? 0.0, y: 0.0), size: layout.size)) self.scrollNode.view.contentSize = CGSize(width: layout.size.width, height: layout.size.height * 2.0) if !self.scrollNode.view.isDecelerating && !self.scrollNode.view.isDragging { let defaultBounds = CGRect(origin: CGPoint(x: 0.0, y: layout.size.height), size: layout.size) @@ -154,6 +293,7 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { let containerScale: CGFloat switch layout.metrics.widthClass { case .compact: + self.panRecognizer?.isEnabled = true self.dim.backgroundColor = UIColor(white: 0.0, alpha: 0.25) self.container.clipsToBounds = true self.container.cornerRadius = 10.0 @@ -174,6 +314,7 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { let scaledTopInset: CGFloat = topInset * (1.0 - coveredByModalTransition) + maxScaledTopInset * coveredByModalTransition containerFrame = unscaledFrame.offsetBy(dx: 0.0, dy: scaledTopInset - (unscaledFrame.midY - containerScale * unscaledFrame.height / 2.0)) case .regular: + self.panRecognizer?.isEnabled = false self.dim.backgroundColor = UIColor(white: 0.0, alpha: 0.4) self.container.clipsToBounds = true self.container.cornerRadius = 10.0 @@ -233,7 +374,11 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { guard let result = super.hitTest(point, with: event) else { return nil } + if !self.container.bounds.contains(self.view.convert(point, to: self.container.view)) { + return self.dim.view + } var currentParent: UIView? = result + var enableScrolling = true while true { if currentParent == nil { break @@ -242,16 +387,31 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate { if scrollView === self.scrollNode.view { break } - if scrollView.isDecelerating && scrollView.contentOffset.y < scrollView.contentInset.top { - return self.scrollNode.view + if scrollView.disablesInteractiveModalDismiss { + enableScrolling = false + break + } else { + if scrollView.isDecelerating && scrollView.contentOffset.y < scrollView.contentInset.top { + return self.scrollNode.view + } } } else if let listView = currentParent as? ListViewBackingView, let listNode = listView.target { - if listNode.scroller.isDecelerating && listNode.scroller.contentOffset.y < listNode.scroller.contentInset.top { + if listNode.view.disablesInteractiveModalDismiss { + enableScrolling = false + break + } else if listNode.scroller.isDecelerating && listNode.scroller.contentOffset.y < listNode.scroller.contentInset.top { return self.scrollNode.view } } currentParent = currentParent?.superview } + self.isInteractiveDimissEnabled = enableScrolling + if let layout = self.validLayout { + if layout.inputHeight != nil && layout.inputHeight != 0.0 { + enableScrolling = false + } + } + self.scrollNode.view.isScrollEnabled = enableScrolling return result } } diff --git a/submodules/Display/Display/Navigation/NavigationModalFrame.swift b/submodules/Display/Display/Navigation/NavigationModalFrame.swift index 683a2f786b..d2f390fc1e 100644 --- a/submodules/Display/Display/Navigation/NavigationModalFrame.swift +++ b/submodules/Display/Display/Navigation/NavigationModalFrame.swift @@ -3,7 +3,14 @@ import UIKit import AsyncDisplayKit import SwiftSignalKit -private func generateCornerImage(radius: CGFloat, mirror: Bool) -> UIImage? { +private enum CornerType { + case topLeft + case topRight + case bottomLeft + case bottomRight +} + +private func generateCornerImage(radius: CGFloat, type: CornerType) -> UIImage? { return generateImage(CGSize(width: radius, height: radius), rotatedContext: { size, context in context.setFillColor(UIColor.black.cgColor) context.fill(CGRect(origin: CGPoint(), size: size)) @@ -11,7 +18,18 @@ private func generateCornerImage(radius: CGFloat, mirror: Bool) -> UIImage? { context.setFillColor(UIColor.clear.cgColor) UIGraphicsPushContext(context) - UIBezierPath(roundedRect: CGRect(origin: CGPoint(x: mirror ? (-radius) : 0.0, y: 0.0), size: CGSize(width: radius * 2.0, height: radius * 2.0)), cornerRadius: radius).fill() + let origin: CGPoint + switch type { + case .topLeft: + origin = CGPoint() + case .topRight: + origin = CGPoint(x: -radius, y: 0.0) + case .bottomLeft: + origin = CGPoint(x: 0.0, y: -radius) + case .bottomRight: + origin = CGPoint(x: -radius, y: -radius) + } + UIBezierPath(roundedRect: CGRect(origin: origin, size: CGSize(width: radius * 2.0, height: radius * 2.0)), cornerRadius: radius).fill() UIGraphicsPopContext() }) } @@ -20,8 +38,11 @@ final class NavigationModalFrame: ASDisplayNode { private let topShade: ASDisplayNode private let leftShade: ASDisplayNode private let rightShade: ASDisplayNode + private let bottomShade: ASDisplayNode private let topLeftCorner: ASImageNode private let topRightCorner: ASImageNode + private let bottomLeftCorner: ASImageNode + private let bottomRightCorner: ASImageNode private var currentMaxCornerRadius: CGFloat? @@ -36,6 +57,8 @@ final class NavigationModalFrame: ASDisplayNode { self.leftShade.backgroundColor = .black self.rightShade = ASDisplayNode() self.rightShade.backgroundColor = .black + self.bottomShade = ASDisplayNode() + self.bottomShade.backgroundColor = .black self.topLeftCorner = ASImageNode() self.topLeftCorner.displaysAsynchronously = false @@ -43,14 +66,23 @@ final class NavigationModalFrame: ASDisplayNode { self.topRightCorner = ASImageNode() self.topRightCorner.displaysAsynchronously = false self.topRightCorner.displayWithoutProcessing = true + self.bottomLeftCorner = ASImageNode() + self.bottomLeftCorner.displaysAsynchronously = false + self.bottomLeftCorner.displayWithoutProcessing = true + self.bottomRightCorner = ASImageNode() + self.bottomRightCorner.displaysAsynchronously = false + self.bottomRightCorner.displayWithoutProcessing = true super.init() self.addSubnode(self.topShade) self.addSubnode(self.leftShade) self.addSubnode(self.rightShade) + self.addSubnode(self.bottomShade) self.addSubnode(self.topLeftCorner) self.addSubnode(self.topRightCorner) + self.addSubnode(self.bottomLeftCorner) + self.addSubnode(self.bottomRightCorner) } func update(layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { @@ -78,6 +110,9 @@ final class NavigationModalFrame: ASDisplayNode { } let additionalTopInset: CGFloat = 10.0 + let contentScale = (layout.size.width - sideInset * 2.0) / layout.size.width + let bottomInset: CGFloat = layout.size.height - contentScale * layout.size.height - topInset + let cornerRadius: CGFloat = 9.0 let initialCornerRadius: CGFloat if !layout.safeInsets.top.isZero { @@ -86,22 +121,29 @@ final class NavigationModalFrame: ASDisplayNode { initialCornerRadius = 0.0 } if self.currentMaxCornerRadius != cornerRadius { - self.topLeftCorner.image = generateCornerImage(radius: max(initialCornerRadius, cornerRadius), mirror: false) - self.topRightCorner.image = generateCornerImage(radius: max(initialCornerRadius, cornerRadius), mirror: true) + self.topLeftCorner.image = generateCornerImage(radius: max(initialCornerRadius, cornerRadius), type: .topLeft) + self.topRightCorner.image = generateCornerImage(radius: max(initialCornerRadius, cornerRadius), type: .topRight) + self.bottomLeftCorner.image = generateCornerImage(radius: max(initialCornerRadius, cornerRadius), type: .bottomLeft) + self.bottomRightCorner.image = generateCornerImage(radius: max(initialCornerRadius, cornerRadius), type: .bottomRight) } let cornerSize = progress * cornerRadius + (1.0 - progress) * initialCornerRadius let cornerSideOffset: CGFloat = progress * sideInset + additionalProgress * sideInset let cornerTopOffset: CGFloat = progress * topInset + additionalProgress * additionalTopInset + let cornerBottomOffset: CGFloat = progress * bottomInset transition.updateFrame(node: self.topLeftCorner, frame: CGRect(origin: CGPoint(x: cornerSideOffset, y: cornerTopOffset), size: CGSize(width: cornerSize, height: cornerSize))) transition.updateFrame(node: self.topRightCorner, frame: CGRect(origin: CGPoint(x: layout.size.width - cornerSideOffset - cornerSize, y: cornerTopOffset), size: CGSize(width: cornerSize, height: cornerSize))) + transition.updateFrame(node: self.bottomLeftCorner, frame: CGRect(origin: CGPoint(x: cornerSideOffset, y: layout.size.height - cornerBottomOffset - cornerSize), size: CGSize(width: cornerSize, height: cornerSize))) + transition.updateFrame(node: self.bottomRightCorner, frame: CGRect(origin: CGPoint(x: layout.size.width - cornerSideOffset - cornerSize, y: layout.size.height - cornerBottomOffset - cornerSize), size: CGSize(width: cornerSize, height: cornerSize))) let topShadeOffset: CGFloat = progress * topInset + additionalProgress * additionalTopInset + let bottomShadeOffset: CGFloat = progress * bottomInset let leftShadeOffset: CGFloat = progress * sideInset + additionalProgress * sideInset let rightShadeWidth: CGFloat = progress * sideInset + additionalProgress * sideInset let rightShadeOffset: CGFloat = layout.size.width - rightShadeWidth transition.updateFrame(node: self.topShade, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: layout.size.width, height: topShadeOffset))) + transition.updateFrame(node: self.bottomShade, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - bottomShadeOffset), size: CGSize(width: layout.size.width, height: bottomShadeOffset))) transition.updateFrame(node: self.leftShade, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: leftShadeOffset, height: layout.size.height))) transition.updateFrame(node: self.rightShade, frame: CGRect(origin: CGPoint(x: rightShadeOffset, y: 0.0), size: CGSize(width: rightShadeWidth, height: layout.size.height)), completion: { _ in completion() diff --git a/submodules/Display/Display/Navigation/NavigationSplitContainer.swift b/submodules/Display/Display/Navigation/NavigationSplitContainer.swift index b9f3b711d2..d47a47c6ab 100644 --- a/submodules/Display/Display/Navigation/NavigationSplitContainer.swift +++ b/submodules/Display/Display/Navigation/NavigationSplitContainer.swift @@ -10,6 +10,9 @@ final class NavigationSplitContainer: ASDisplayNode { private let detailContainer: NavigationContainer private let separator: ASDisplayNode + private var masterControllers: [ViewController] = [] + private var detailControllers: [ViewController] = [] + init(theme: NavigationControllerTheme, controllerRemoved: @escaping (ViewController) -> Void) { self.theme = theme @@ -29,6 +32,10 @@ final class NavigationSplitContainer: ASDisplayNode { self.addSubnode(self.separator) } + func updateTheme(theme: NavigationControllerTheme) { + self.separator.backgroundColor = theme.navigationBar.separatorColor + } + func update(layout: ContainerViewLayout, masterControllers: [ViewController], detailControllers: [ViewController], transition: ContainedViewLayoutTransition) { let masterWidth = min(max(320.0, floor(layout.size.width / 3.0)), floor(layout.size.width / 2.0)) let detailWidth = layout.size.width - masterWidth @@ -39,5 +46,29 @@ final class NavigationSplitContainer: ASDisplayNode { self.masterContainer.update(layout: ContainerViewLayout(size: CGSize(width: masterWidth, height: layout.size.height), metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver), canBeClosed: false, controllers: masterControllers, transition: transition) self.detailContainer.update(layout: ContainerViewLayout(size: CGSize(width: detailWidth, height: layout.size.height), metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver), canBeClosed: true, controllers: detailControllers, transition: transition) + + var controllersUpdated = false + if self.detailControllers.last !== detailControllers.last { + controllersUpdated = true + } else if self.masterControllers.count != masterControllers.count { + controllersUpdated = true + } else { + for i in 0 ..< masterControllers.count { + if masterControllers[i] !== self.masterControllers[i] { + controllersUpdated = true + break + } + } + } + + self.masterControllers = masterControllers + self.detailControllers = detailControllers + + if controllersUpdated { + let data = self.detailControllers.last?.customData + for controller in self.masterControllers { + controller.updateNavigationCustomData(data, progress: 1.0, transition: transition) + } + } } } diff --git a/submodules/Display/Display/NavigationTransitionCoordinator.swift b/submodules/Display/Display/NavigationTransitionCoordinator.swift index a6b8c9b5b2..ebf0e87ec1 100644 --- a/submodules/Display/Display/NavigationTransitionCoordinator.swift +++ b/submodules/Display/Display/NavigationTransitionCoordinator.swift @@ -203,26 +203,28 @@ class NavigationTransitionCoordinator { } } + func performCompletion(completion: @escaping () -> ()) { + self.updateProgress(1.0, transition: .immediate, completion: { [weak self] in + if let strongSelf = self { + strongSelf.dimNode.removeFromSupernode() + strongSelf.shadowNode.removeFromSupernode() + + strongSelf.endNavigationBarTransition() + + if let currentCompletion = strongSelf.currentCompletion { + strongSelf.currentCompletion = nil + currentCompletion() + } + } + completion() + }) + } + func animateCompletion(_ velocity: CGFloat, completion: @escaping () -> ()) { self.animatingCompletion = true let distance = (1.0 - self.progress) * self.container.bounds.size.width self.currentCompletion = completion let f = { - /*switch self.transition { - case .Push: - if let viewSuperview = self.viewSuperview { - viewSuperview.addSubview(self.bottomView) - } else { - self.bottomView.removeFromSuperview() - } - case .Pop: - if let viewSuperview = self.viewSuperview { - viewSuperview.addSubview(self.topView) - } else { - self.topView.removeFromSuperview() - } - }*/ - self.dimNode.removeFromSupernode() self.shadowNode.removeFromSupernode() diff --git a/submodules/Display/Display/UIViewController+Navigation.h b/submodules/Display/Display/UIViewController+Navigation.h index ed78c4f164..ac34185f2b 100644 --- a/submodules/Display/Display/UIViewController+Navigation.h +++ b/submodules/Display/Display/UIViewController+Navigation.h @@ -22,6 +22,7 @@ typedef NS_OPTIONS(NSUInteger, UIResponderDisableAutomaticKeyboardHandling) { @property (nonatomic) bool disablesInteractiveTransitionGestureRecognizer; @property (nonatomic) bool disablesInteractiveKeyboardGestureRecognizer; +@property (nonatomic) bool disablesInteractiveModalDismiss; @property (nonatomic, copy) bool (^ disablesInteractiveTransitionGestureRecognizerNow)(); @property (nonatomic) UIResponderDisableAutomaticKeyboardHandling disableAutomaticKeyboardHandling; diff --git a/submodules/Display/Display/UIViewController+Navigation.m b/submodules/Display/Display/UIViewController+Navigation.m index 09a327f821..751faf58d9 100644 --- a/submodules/Display/Display/UIViewController+Navigation.m +++ b/submodules/Display/Display/UIViewController+Navigation.m @@ -42,6 +42,7 @@ static const void *setNeedsStatusBarAppearanceUpdateKey = &setNeedsStatusBarAppe static const void *inputAccessoryHeightProviderKey = &inputAccessoryHeightProviderKey; static const void *interactiveTransitionGestureRecognizerTestKey = &interactiveTransitionGestureRecognizerTestKey; static const void *UIViewControllerHintWillBePresentedInPreviewingContextKey = &UIViewControllerHintWillBePresentedInPreviewingContextKey; +static const void *disablesInteractiveModalDismissKey = &disablesInteractiveModalDismissKey; static bool notyfyingShiftState = false; @@ -250,6 +251,14 @@ static bool notyfyingShiftState = false; [self setAssociatedObject:[disablesInteractiveTransitionGestureRecognizerNow copy] forKey:disablesInteractiveTransitionGestureRecognizerNowKey]; } +- (bool)disablesInteractiveModalDismiss { + return [self associatedObjectForKey:disablesInteractiveModalDismissKey]; +} + +- (void)setDisablesInteractiveModalDismiss:(bool)disablesInteractiveModalDismiss { + [self setAssociatedObject:@(disablesInteractiveModalDismiss) forKey:disablesInteractiveModalDismissKey]; +} + - (BOOL (^)(CGPoint))interactiveTransitionGestureRecognizerTest { return [self associatedObjectForKey:interactiveTransitionGestureRecognizerTestKey]; } diff --git a/submodules/Display/Display/WindowContent.swift b/submodules/Display/Display/WindowContent.swift index 8a2562fd69..795f086366 100644 --- a/submodules/Display/Display/WindowContent.swift +++ b/submodules/Display/Display/WindowContent.swift @@ -454,6 +454,9 @@ public class Window1 { if strongSelf.deviceMetrics.type == .tablet, abs(strongSelf.windowLayout.size.height - UIScreen.main.bounds.height) > 41.0 { keyboardHeight = max(0.0, keyboardHeight - 24.0) } + + print("keyboardHeight: \(keyboardHeight)") + var duration: Double = (notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0.0 if duration > Double.ulpOfOne { duration = 0.5 @@ -473,7 +476,12 @@ public class Window1 { self.keyboardFrameChangeObserver = NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillChangeFrameNotification, object: nil, queue: nil, using: { [weak self] notification in if let strongSelf = self { - let keyboardFrame: CGRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? CGRect() + var keyboardFrame: CGRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? CGRect() + if let keyboardView = strongSelf.statusBarHost?.keyboardView { + if keyboardFrame.width.isEqual(to: keyboardView.bounds.width) && keyboardFrame.height.isEqual(to: keyboardView.bounds.height) && keyboardFrame.minX.isEqual(to: keyboardView.frame.minX) { + keyboardFrame.origin.y = keyboardView.frame.minY + } + } let screenHeight: CGFloat var inPopover = false @@ -488,10 +496,21 @@ public class Window1 { screenHeight = UIScreen.main.bounds.width } - var keyboardHeight = max(0.0, screenHeight - keyboardFrame.minY) - if inPopover { - keyboardHeight = max(0.0, keyboardHeight - 48.0) + var keyboardHeight: CGFloat + if keyboardFrame.isEmpty || keyboardFrame.maxY < screenHeight { + keyboardHeight = 0.0 + } else { + keyboardHeight = max(0.0, screenHeight - keyboardFrame.minY) + if inPopover { + if strongSelf.windowLayout.onScreenNavigationHeight != nil { + keyboardHeight = max(0.0, keyboardHeight - 24.0) + } else { + keyboardHeight = max(0.0, keyboardHeight - 48.0) + } + } } + + print("keyboardHeight: \(keyboardHeight)") var duration: Double = (notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0.0 if duration > Double.ulpOfOne { @@ -780,7 +799,7 @@ public class Window1 { if self.tracingStatusBarsInvalidated || updatedHasPreview, let statusBarManager = statusBarManager, let keyboardManager = keyboardManager { self.tracingStatusBarsInvalidated = false - if self.statusBarHidden { + /*if self.statusBarHidden { statusBarManager.updateState(surfaces: [], withSafeInsets: false, forceInCallStatusBarText: nil, forceHiddenBySystemWindows: false, animated: false) } else { var statusBarSurfaces: [StatusBarSurface] = [] @@ -813,7 +832,7 @@ public class Window1 { } } } - //keyboardManager.surfaces = keyboardSurfaces + //keyboardManager.surfaces = keyboardSurfaces*/ var supportedOrientations = ViewControllerSupportedOrientations(regularSize: .all, compactSize: .all) let orientationToLock: UIInterfaceOrientationMask @@ -947,12 +966,7 @@ public class Window1 { let boundsSize = updatingLayout.layout.size let isLandscape = boundsSize.width > boundsSize.height - var statusBarHeight: CGFloat? - if let statusBarHost = self.statusBarHost { - statusBarHeight = statusBarHost.statusBarFrame.size.height - } else { - statusBarHeight = self.deviceMetrics.statusBarHeight - } + var statusBarHeight: CGFloat? = self.deviceMetrics.statusBarHeight(for: boundsSize) if self.deviceMetrics.type == .tablet, let onScreenNavigationHeight = self.hostView.onScreenNavigationHeight, onScreenNavigationHeight != self.deviceMetrics.onScreenNavigationHeight(inLandscape: false) { self.deviceMetrics = DeviceMetrics(screenSize: UIScreen.main.bounds.size, statusBarHeight: statusBarHeight ?? defaultStatusBarHeight, onScreenNavigationHeight: onScreenNavigationHeight) diff --git a/submodules/ItemListUI/Sources/Items/ItemListMultilineInputItem.swift b/submodules/ItemListUI/Sources/Items/ItemListMultilineInputItem.swift index ce9cdb3c08..e345e13904 100644 --- a/submodules/ItemListUI/Sources/Items/ItemListMultilineInputItem.swift +++ b/submodules/ItemListUI/Sources/Items/ItemListMultilineInputItem.swift @@ -5,13 +5,20 @@ import AsyncDisplayKit import SwiftSignalKit import TelegramPresentationData +public enum ItemListMultilineInputItemTextLimitMode { + case characters + case bytes +} + public struct ItemListMultilineInputItemTextLimit { public let value: Int public let display: Bool + public let mode: ItemListMultilineInputItemTextLimitMode - public init(value: Int, display: Bool) { + public init(value: Int, display: Bool, mode: ItemListMultilineInputItemTextLimitMode = .characters) { self.value = value self.display = display + self.mode = mode } } @@ -186,7 +193,13 @@ public class ItemListMultilineInputItemNode: ListViewItemNode, ASEditableTextNod var rightInset: CGFloat = params.rightInset if let maxLength = item.maxLength, maxLength.display { - let textLength = item.text.count + let textLength: Int + switch maxLength.mode { + case .characters: + textLength = item.text.count + case .bytes: + textLength = item.text.data(using: .utf8, allowLossyConversion: true)?.count ?? 0 + } let displayTextLimit = textLength > maxLength.value * 70 / 100 let remainingCount = maxLength.value - textLength if displayTextLimit { diff --git a/submodules/MtProtoKit/MTBackupAddressSignals.m b/submodules/MtProtoKit/MTBackupAddressSignals.m index b338523e20..db3a478091 100644 --- a/submodules/MtProtoKit/MTBackupAddressSignals.m +++ b/submodules/MtProtoKit/MTBackupAddressSignals.m @@ -211,6 +211,9 @@ static NSData *base64_decode(NSString *str) { NSMutableArray *signals = [[NSMutableArray alloc] init]; [signals addObject:[self fetchBackupIpsResolveGoogle:isTestingEnvironment phoneNumber:phoneNumber currentContext:currentContext addressOverride:currentContext.apiEnvironment.accessHostOverride]]; if (additionalSource != nil) { +/*#if DEBUG + [signals removeAllObjects]; +#endif*/ [signals addObject:additionalSource]; } diff --git a/submodules/OverlayStatusController/Sources/OverlayStatusController.swift b/submodules/OverlayStatusController/Sources/OverlayStatusController.swift index 79cbc52e35..43dd030712 100644 --- a/submodules/OverlayStatusController/Sources/OverlayStatusController.swift +++ b/submodules/OverlayStatusController/Sources/OverlayStatusController.swift @@ -129,7 +129,7 @@ private final class OverlayStatusControllerNode: ViewControllerTracingNode { } } -public final class OverlayStatusController: ViewController { +public final class OverlayStatusController: ViewController, StandalonePresentableController { private let theme: PresentationTheme private let strings: PresentationStrings private let type: OverlayStatusControllerType diff --git a/submodules/SettingsUI/Sources/Privacy and Security/PrivacyAndSecurityController.swift b/submodules/SettingsUI/Sources/Privacy and Security/PrivacyAndSecurityController.swift index 7d5d0daa79..9e11f0dcfc 100644 --- a/submodules/SettingsUI/Sources/Privacy and Security/PrivacyAndSecurityController.swift +++ b/submodules/SettingsUI/Sources/Privacy and Security/PrivacyAndSecurityController.swift @@ -641,17 +641,21 @@ public func privacyAndSecurityController(context: AccountContext, initialSetting } } if intro { - var dismissInto: (() -> Void)? - let controller = PrivacyIntroController(context: context, mode: .twoStepVerification, arguments: PrivacyIntroControllerPresentationArguments(fadeIn: false, animateIn: true), proceedAction: { - pushControllerImpl?(twoStepVerificationUnlockSettingsController(context: context, mode: .access(intro: intro, data: data.flatMap({ Signal.single(.access(configuration: $0)) })), openSetupPasswordImmediately: true), false) - dismissInto?() + var nextImpl: (() -> Void)? + let introController = PrivacyIntroController(context: context, mode: .twoStepVerification, proceedAction: { + nextImpl?() }) - dismissInto = { [weak controller] in - controller?.dismiss() + nextImpl = { [weak introController] in + guard let introController = introController, let navigationController = introController.navigationController as? NavigationController else { + return + } + let controller = twoStepVerificationUnlockSettingsController(context: context, mode: .access(intro: intro, data: data.flatMap({ Signal.single(.access(configuration: $0)) }))) + navigationController.replaceController(introController, with: controller, animated: true) } - presentControllerImpl?(controller) + pushControllerImpl?(introController, true) } else { - pushControllerImpl?(twoStepVerificationUnlockSettingsController(context: context, mode: .access(intro: intro, data: data.flatMap({ Signal.single(.access(configuration: $0)) }))), true) + let controller = twoStepVerificationUnlockSettingsController(context: context, mode: .access(intro: intro, data: data.flatMap({ Signal.single(.access(configuration: $0)) }))) + pushControllerImpl?(controller, true) } }, openActiveSessions: { pushControllerImpl?(recentSessionsController(context: context, activeSessionsContext: activeSessionsContext), true) diff --git a/submodules/TelegramCore/BUCK b/submodules/TelegramCore/BUCK index c15f515156..84a1ad118e 100644 --- a/submodules/TelegramCore/BUCK +++ b/submodules/TelegramCore/BUCK @@ -24,6 +24,7 @@ framework( "//submodules/MtProtoKit:MtProtoKit#shared", "//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit#shared", "//submodules/Postbox:Postbox#shared", + "//submodules/CloudData:CloudData", ], frameworks = [ "$SDKROOT/System/Library/Frameworks/Foundation.framework", diff --git a/submodules/TelegramCore/TelegramCore/DeleteMessages.swift b/submodules/TelegramCore/TelegramCore/DeleteMessages.swift index 179ce204f9..606ab0cf4e 100644 --- a/submodules/TelegramCore/TelegramCore/DeleteMessages.swift +++ b/submodules/TelegramCore/TelegramCore/DeleteMessages.swift @@ -18,16 +18,20 @@ private func removeMessageMedia(message: Message, mediaBox: MediaBox) { } } -public func deleteMessages(transaction: Transaction, mediaBox: MediaBox, ids: [MessageId]) { - for id in ids { - if id.peerId.namespace == Namespaces.Peer.SecretChat { - if let message = transaction.getMessage(id) { - removeMessageMedia(message: message, mediaBox: mediaBox) +public func deleteMessages(transaction: Transaction, mediaBox: MediaBox, ids: [MessageId], deleteMedia: Bool = true) { + if deleteMedia { + for id in ids { + if id.peerId.namespace == Namespaces.Peer.SecretChat { + if let message = transaction.getMessage(id) { + removeMessageMedia(message: message, mediaBox: mediaBox) + } } } } transaction.deleteMessages(ids, forEachMedia: { media in - processRemovedMedia(mediaBox, media) + if deleteMedia { + processRemovedMedia(mediaBox, media) + } }) } diff --git a/submodules/TelegramCore/TelegramCore/EnqueueMessage.swift b/submodules/TelegramCore/TelegramCore/EnqueueMessage.swift index 7224e62459..1589fe8dbd 100644 --- a/submodules/TelegramCore/TelegramCore/EnqueueMessage.swift +++ b/submodules/TelegramCore/TelegramCore/EnqueueMessage.swift @@ -231,7 +231,7 @@ public func resendMessages(account: Account, messageIds: [MessageId]) -> Signal< } let _ = enqueueMessages(transaction: transaction, account: account, peerId: peerId, messages: messages.map { (false, $0) }) } - deleteMessages(transaction: transaction, mediaBox: account.postbox.mediaBox, ids: removeMessageIds) + deleteMessages(transaction: transaction, mediaBox: account.postbox.mediaBox, ids: removeMessageIds, deleteMedia: false) } } diff --git a/submodules/TelegramCore/TelegramCore/Network.swift b/submodules/TelegramCore/TelegramCore/Network.swift index c400d037ee..29c8b45d51 100644 --- a/submodules/TelegramCore/TelegramCore/Network.swift +++ b/submodules/TelegramCore/TelegramCore/Network.swift @@ -13,6 +13,7 @@ import Foundation #else import MtProtoKitDynamic #endif + import CloudData #endif public enum ConnectionStatus: Equatable { @@ -480,10 +481,26 @@ func initializedNetwork(arguments: NetworkInitializationArguments, supplementary } context.keychain = keychain - context.setDiscoverBackupAddressListSignal(MTBackupAddressSignals.fetchBackupIps(testingEnvironment, currentContext: context, additionalSource: nil, phoneNumber: phoneNumber)) + var wrappedAdditionalSource: MTSignal? + + if #available(iOS 10.0, *) { + let additionalSource = cloudDataAdditionalAddressSource(phoneNumber: .single(phoneNumber ?? "")) + wrappedAdditionalSource = MTSignal(generator: { subscriber in + let disposable = additionalSource.start(next: { value in + subscriber?.putNext(value) + }, completed: { + subscriber?.putCompletion() + }) + return MTBlockDisposable(block: { + disposable.dispose() + }) + }) + } + + context.setDiscoverBackupAddressListSignal(MTBackupAddressSignals.fetchBackupIps(testingEnvironment, currentContext: context, additionalSource: wrappedAdditionalSource, phoneNumber: phoneNumber)) #if DEBUG - //let _ = MTBackupAddressSignals.fetchBackupIps(testingEnvironment, currentContext: context, additionalSource: nil, phoneNumber: phoneNumber).start(next: nil) + //let _ = MTBackupAddressSignals.fetchBackupIps(testingEnvironment, currentContext: context, additionalSource: wrappedAdditionalSource, phoneNumber: phoneNumber).start(next: nil) #endif let mtProto = MTProto(context: context, datacenterId: datacenterId, usageCalculationInfo: usageCalculationInfo(basePath: basePath, category: nil))! @@ -1027,3 +1044,11 @@ class Keychain: NSObject, MTKeychain { } } + +public func makeCloudDataContext() -> Any? { + if #available(iOS 10.0, *) { + return CloudDataContextImpl() + } else { + return nil + } +} diff --git a/submodules/TelegramCore/TelegramCore/Wallets.swift b/submodules/TelegramCore/TelegramCore/Wallets.swift index f8ecbecc92..f633d02d5d 100644 --- a/submodules/TelegramCore/TelegramCore/Wallets.swift +++ b/submodules/TelegramCore/TelegramCore/Wallets.swift @@ -292,47 +292,41 @@ public final class TonInstance { } } - fileprivate func sendGramsFromWallet(keychain: TonKeychain, serverSalt: Data, walletInfo: WalletInfo, fromAddress: String, toAddress: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, timeout: Int32, randomId: Int64) -> Signal { - return keychain.decrypt(walletInfo.encryptedSecret) - |> mapError { _ -> SendGramsFromWalletError in - return .secretDecryptionFailed - } - |> mapToSignal { decryptedSecret -> Signal in - let key = TONKey(publicKey: walletInfo.publicKey.rawValue, secret: decryptedSecret) - return Signal { subscriber in - let disposable = MetaDisposable() - - self.impl.with { impl in - impl.withInstance { ton in - let cancel = ton.sendGrams(from: key, localPassword: serverSalt, fromAddress: fromAddress, toAddress: toAddress, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: timeout, randomId: randomId).start(next: { result in - guard let result = result as? TONSendGramsResult else { - subscriber.putError(.generic) - return - } - subscriber.putCompletion() - }, error: { error in - if let error = error as? TONError { - if error.text == "Failed to parse account address" { - subscriber.putError(.invalidAddress) - } else if error.text.hasPrefix("DANGEROUS_TRANSACTION") { - subscriber.putError(.destinationIsNotInitialized) - } else { - subscriber.putError(.generic) - } + fileprivate func sendGramsFromWallet(decryptedSecret: Data, serverSalt: Data, walletInfo: WalletInfo, fromAddress: String, toAddress: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, timeout: Int32, randomId: Int64) -> Signal { + let key = TONKey(publicKey: walletInfo.publicKey.rawValue, secret: decryptedSecret) + return Signal { subscriber in + let disposable = MetaDisposable() + + self.impl.with { impl in + impl.withInstance { ton in + let cancel = ton.sendGrams(from: key, localPassword: serverSalt, fromAddress: fromAddress, toAddress: toAddress, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: timeout, randomId: randomId).start(next: { result in + guard let result = result as? TONSendGramsResult else { + subscriber.putError(.generic) + return + } + subscriber.putCompletion() + }, error: { error in + if let error = error as? TONError { + if error.text == "Failed to parse account address" { + subscriber.putError(.invalidAddress) + } else if error.text.hasPrefix("DANGEROUS_TRANSACTION") { + subscriber.putError(.destinationIsNotInitialized) } else { subscriber.putError(.generic) } - }, completed: { - subscriber.putCompletion() - }) - disposable.set(ActionDisposable { - cancel?.dispose() - }) - } + } else { + subscriber.putError(.generic) + } + }, completed: { + subscriber.putCompletion() + }) + disposable.set(ActionDisposable { + cancel?.dispose() + }) } - - return disposable } + + return disposable } } @@ -440,10 +434,12 @@ public struct CombinedWalletState: Codable, Equatable { public struct WalletStateRecord: PostboxCoding, Equatable { public let info: WalletInfo + public var exportCompleted: Bool public var state: CombinedWalletState? - public init(info: WalletInfo, state: CombinedWalletState?) { + public init(info: WalletInfo, exportCompleted: Bool, state: CombinedWalletState?) { self.info = info + self.exportCompleted = exportCompleted self.state = state } @@ -451,6 +447,7 @@ public struct WalletStateRecord: PostboxCoding, Equatable { self.info = decoder.decodeDataForKey("info").flatMap { data in return try? JSONDecoder().decode(WalletInfo.self, from: data) } ?? WalletInfo(publicKey: WalletPublicKey(rawValue: ""), encryptedSecret: TonKeychainEncryptedData(publicKey: Data(), data: Data())) + self.exportCompleted = decoder.decodeInt32ForKey("exportCompleted", orElse: 0) != 0 self.state = decoder.decodeDataForKey("state").flatMap { data in return try? JSONDecoder().decode(CombinedWalletState.self, from: data) } @@ -460,6 +457,7 @@ public struct WalletStateRecord: PostboxCoding, Equatable { if let data = try? JSONEncoder().encode(self.info) { encoder.encodeData(data, forKey: "info") } + encoder.encodeInt32(self.exportCompleted ? 1 : 0, forKey: "exportCompleted") if let state = self.state, let data = try? JSONEncoder().encode(state) { encoder.encodeData(data, forKey: "state") } else { @@ -521,7 +519,7 @@ public func createWallet(postbox: Postbox, network: Network, tonInstance: TonIns return postbox.transaction { transaction -> (WalletInfo, [String]) in transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: []) - walletCollection.wallets = [WalletStateRecord(info: walletInfo, state: nil)] + walletCollection.wallets = [WalletStateRecord(info: walletInfo, exportCompleted: false, state: nil)] return walletCollection }) return (walletInfo, wordList) @@ -531,6 +529,21 @@ public func createWallet(postbox: Postbox, network: Network, tonInstance: TonIns } } +public func confirmWalletExported(postbox: Postbox, walletInfo: WalletInfo) -> Signal { + return postbox.transaction { transaction -> Void in + transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in + var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: []) + for i in 0 ..< walletCollection.wallets.count { + if walletCollection.wallets[i].info.publicKey == walletInfo.publicKey { + walletCollection.wallets[i].exportCompleted = true + } + } + return walletCollection + }) + } + |> ignoreValues +} + private enum ImportWalletInternalError { case generic } @@ -556,7 +569,7 @@ public func importWallet(postbox: Postbox, network: Network, tonInstance: TonIns return postbox.transaction { transaction -> WalletInfo in transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: []) - walletCollection.wallets = [WalletStateRecord(info: walletInfo, state: nil)] + walletCollection.wallets = [WalletStateRecord(info: walletInfo, exportCompleted: true, state: nil)] return walletCollection }) return walletInfo @@ -643,57 +656,85 @@ public enum CombinedWalletStateResult { case updated(CombinedWalletState) } -public func getCombinedWalletState(postbox: Postbox, walletInfo: WalletInfo, tonInstance: TonInstance) -> Signal { - return postbox.transaction { transaction -> CombinedWalletState? in - let walletCollection = (transaction.getPreferencesEntry(key: PreferencesKeys.walletCollection) as? WalletCollection) ?? WalletCollection(wallets: []) - for item in walletCollection.wallets { - if item.info.publicKey == walletInfo.publicKey { - return item.state +public enum CombinedWalletStateSubject { + case wallet(WalletInfo) + case address(String) +} + +public func getCombinedWalletState(postbox: Postbox, subject: CombinedWalletStateSubject, tonInstance: TonInstance) -> Signal { + switch subject { + case let .wallet(walletInfo): + return postbox.transaction { transaction -> CombinedWalletState? in + let walletCollection = (transaction.getPreferencesEntry(key: PreferencesKeys.walletCollection) as? WalletCollection) ?? WalletCollection(wallets: []) + for item in walletCollection.wallets { + if item.info.publicKey == walletInfo.publicKey { + return item.state + } + } + return nil + } + |> castError(GetCombinedWalletStateError.self) + |> mapToSignal { cachedState -> Signal in + return .single(.cached(cachedState)) + |> then( + tonInstance.walletAddress(publicKey: walletInfo.publicKey) + |> castError(GetCombinedWalletStateError.self) + |> mapToSignal { address -> Signal in + return getWalletState(address: address, tonInstance: tonInstance) + |> mapError { _ -> GetCombinedWalletStateError in + return .generic + } + |> mapToSignal { walletState, syncUtime -> Signal in + let topTransactions: Signal<[WalletTransaction], GetCombinedWalletStateError> + if walletState.lastTransactionId == cachedState?.walletState.lastTransactionId { + topTransactions = .single(cachedState?.topTransactions ?? []) + } else { + topTransactions = getWalletTransactions(address: address, previousId: nil, tonInstance: tonInstance) + |> mapError { _ -> GetCombinedWalletStateError in + return .generic + } + } + return topTransactions + |> mapToSignal { topTransactions -> Signal in + let combinedState = CombinedWalletState(walletState: walletState, timestamp: syncUtime, topTransactions: topTransactions) + return postbox.transaction { transaction -> CombinedWalletStateResult in + transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in + var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: []) + for i in 0 ..< walletCollection.wallets.count { + if walletCollection.wallets[i].info.publicKey == walletInfo.publicKey { + walletCollection.wallets[i].state = combinedState + } + } + return walletCollection + }) + return .updated(combinedState) + } + |> castError(GetCombinedWalletStateError.self) + } + } + } + ) + } + case let .address(address): + let updated = getWalletState(address: address, tonInstance: tonInstance) + |> mapError { _ -> GetCombinedWalletStateError in + return .generic + } + |> mapToSignal { walletState, syncUtime -> Signal in + let topTransactions: Signal<[WalletTransaction], GetCombinedWalletStateError> + + topTransactions = getWalletTransactions(address: address, previousId: nil, tonInstance: tonInstance) + |> mapError { _ -> GetCombinedWalletStateError in + return .generic + } + return topTransactions + |> mapToSignal { topTransactions -> Signal in + let combinedState = CombinedWalletState(walletState: walletState, timestamp: syncUtime, topTransactions: topTransactions) + return .single(.updated(combinedState)) } } - return nil - } - |> castError(GetCombinedWalletStateError.self) - |> mapToSignal { cachedState -> Signal in - return .single(.cached(cachedState)) - |> then( - tonInstance.walletAddress(publicKey: walletInfo.publicKey) - |> castError(GetCombinedWalletStateError.self) - |> mapToSignal { address -> Signal in - return getWalletState(address: address, tonInstance: tonInstance) - |> mapError { _ -> GetCombinedWalletStateError in - return .generic - } - |> mapToSignal { walletState, syncUtime -> Signal in - let topTransactions: Signal<[WalletTransaction], GetCombinedWalletStateError> - if walletState.lastTransactionId == cachedState?.walletState.lastTransactionId { - topTransactions = .single(cachedState?.topTransactions ?? []) - } else { - topTransactions = getWalletTransactions(address: address, previousId: nil, tonInstance: tonInstance) - |> mapError { _ -> GetCombinedWalletStateError in - return .generic - } - } - return topTransactions - |> mapToSignal { topTransactions -> Signal in - let combinedState = CombinedWalletState(walletState: walletState, timestamp: syncUtime, topTransactions: topTransactions) - return postbox.transaction { transaction -> CombinedWalletStateResult in - transaction.updatePreferencesEntry(key: PreferencesKeys.walletCollection, { current in - var walletCollection = (current as? WalletCollection) ?? WalletCollection(wallets: []) - for i in 0 ..< walletCollection.wallets.count { - if walletCollection.wallets[i].info.publicKey == walletInfo.publicKey { - walletCollection.wallets[i].state = combinedState - } - } - return walletCollection - }) - return .updated(combinedState) - } - |> castError(GetCombinedWalletStateError.self) - } - } - } - ) + return .single(.cached(nil)) + |> then(updated) } } @@ -704,17 +745,11 @@ public enum SendGramsFromWalletError { case destinationIsNotInitialized } -public func sendGramsFromWallet(network: Network, tonInstance: TonInstance, keychain: TonKeychain, walletInfo: WalletInfo, toAddress: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, timeout: Int32, randomId: Int64) -> Signal { - return getServerWalletSalt(network: network) - |> mapError { _ -> SendGramsFromWalletError in - return .generic - } - |> mapToSignal { serverSalt in - return walletAddress(publicKey: walletInfo.publicKey, tonInstance: tonInstance) - |> castError(SendGramsFromWalletError.self) - |> mapToSignal { fromAddress in - return tonInstance.sendGramsFromWallet(keychain: keychain, serverSalt: serverSalt, walletInfo: walletInfo, fromAddress: fromAddress, toAddress: toAddress, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: timeout, randomId: randomId) - } +public func sendGramsFromWallet(network: Network, tonInstance: TonInstance, walletInfo: WalletInfo, decryptedSecret: Data, serverSalt: Data, toAddress: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, timeout: Int32, randomId: Int64) -> Signal { + return walletAddress(publicKey: walletInfo.publicKey, tonInstance: tonInstance) + |> castError(SendGramsFromWalletError.self) + |> mapToSignal { fromAddress in + return tonInstance.sendGramsFromWallet(decryptedSecret: decryptedSecret, serverSalt: serverSalt, walletInfo: walletInfo, fromAddress: fromAddress, toAddress: toAddress, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: timeout, randomId: randomId) } } @@ -871,7 +906,7 @@ public enum GetServerWalletSaltError { case generic } -private func getServerWalletSalt(network: Network) -> Signal { +public func getServerWalletSalt(network: Network) -> Signal { return network.request(Api.functions.wallet.getKeySecretSalt(revoke: .boolFalse)) |> mapError { _ -> GetServerWalletSaltError in return .generic diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index 7b895c37a4..0b4d3e8669 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -1944,2627 +1944,2635 @@ public final class PresentationStrings { public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1622]! } public var MessagePoll_LabelClosed: String { return self._s[1623]! } public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1625]! } - public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1626]! } - public var UserInfo_FirstNamePlaceholder: String { return self._s[1627]! } - public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1628]! } - public var Login_SelectCountry_Title: String { return self._s[1630]! } - public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1631]! } + public var Wallet_Send_SendAnyway: String { return self._s[1626]! } + public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1627]! } + public var UserInfo_FirstNamePlaceholder: String { return self._s[1628]! } + public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1629]! } + public var Login_SelectCountry_Title: String { return self._s[1631]! } + public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1632]! } public func Conversation_OpenBotLinkLogin(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1632]!, self._r[1632]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1633]!, self._r[1633]!, [_1, _2]) } - public var Channel_AdminLog_ChangeInfo: String { return self._s[1633]! } - public var Watch_Suggestion_BRB: String { return self._s[1634]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[1635]! } - public var Contacts_PermissionsTitle: String { return self._s[1636]! } - public var Conversation_RestrictedInline: String { return self._s[1637]! } - public var StickerPack_ViewPack: String { return self._s[1639]! } + public var Channel_AdminLog_ChangeInfo: String { return self._s[1634]! } + public var Watch_Suggestion_BRB: String { return self._s[1635]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[1636]! } + public var Contacts_PermissionsTitle: String { return self._s[1637]! } + public var Conversation_RestrictedInline: String { return self._s[1638]! } + public var StickerPack_ViewPack: String { return self._s[1640]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1640]!, self._r[1640]!, [_0]) + return formatWithArgumentRanges(self._s[1641]!, self._r[1641]!, [_0]) } - public var Compose_NewChannel: String { return self._s[1642]! } - public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1645]! } - public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1647]! } - public var Channel_Info_Stickers: String { return self._s[1648]! } - public var AutoNightTheme_PreferredTheme: String { return self._s[1649]! } - public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1650]! } - public var Passport_DeletePersonalDetails: String { return self._s[1651]! } - public var LogoutOptions_AddAccountTitle: String { return self._s[1652]! } - public var Channel_DiscussionGroupInfo: String { return self._s[1653]! } - public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1654]! } - public var Conversation_SearchNoResults: String { return self._s[1656]! } - public var MessagePoll_LabelAnonymous: String { return self._s[1657]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1658]! } - public var Login_Code: String { return self._s[1659]! } - public var EditTheme_Create_BottomInfo: String { return self._s[1660]! } - public var Watch_Suggestion_WhatsUp: String { return self._s[1661]! } - public var Weekday_ShortThursday: String { return self._s[1662]! } - public var Resolve_ErrorNotFound: String { return self._s[1664]! } - public var LastSeen_Offline: String { return self._s[1666]! } - public var PeopleNearby_NoMembers: String { return self._s[1667]! } - public var GroupPermission_AddMembersNotAvailable: String { return self._s[1668]! } - public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1669]! } - public var GroupInfo_Title: String { return self._s[1671]! } - public var NotificationsSound_Note: String { return self._s[1672]! } - public var Conversation_EditingMessagePanelTitle: String { return self._s[1673]! } - public var Watch_Message_Poll: String { return self._s[1675]! } - public var Privacy_Calls: String { return self._s[1676]! } + public var Compose_NewChannel: String { return self._s[1643]! } + public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1646]! } + public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1648]! } + public var Channel_Info_Stickers: String { return self._s[1649]! } + public var AutoNightTheme_PreferredTheme: String { return self._s[1650]! } + public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1651]! } + public var Passport_DeletePersonalDetails: String { return self._s[1652]! } + public var LogoutOptions_AddAccountTitle: String { return self._s[1653]! } + public var Channel_DiscussionGroupInfo: String { return self._s[1654]! } + public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1655]! } + public var Conversation_SearchNoResults: String { return self._s[1657]! } + public var MessagePoll_LabelAnonymous: String { return self._s[1658]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1659]! } + public var Login_Code: String { return self._s[1660]! } + public var EditTheme_Create_BottomInfo: String { return self._s[1661]! } + public var Watch_Suggestion_WhatsUp: String { return self._s[1662]! } + public var Weekday_ShortThursday: String { return self._s[1663]! } + public var Resolve_ErrorNotFound: String { return self._s[1665]! } + public var LastSeen_Offline: String { return self._s[1667]! } + public var PeopleNearby_NoMembers: String { return self._s[1668]! } + public var GroupPermission_AddMembersNotAvailable: String { return self._s[1669]! } + public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1670]! } + public var GroupInfo_Title: String { return self._s[1672]! } + public var NotificationsSound_Note: String { return self._s[1673]! } + public var Conversation_EditingMessagePanelTitle: String { return self._s[1674]! } + public var Watch_Message_Poll: String { return self._s[1676]! } + public var Privacy_Calls: String { return self._s[1677]! } public func Channel_AdminLog_MessageRankUsername(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1677]!, self._r[1677]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1678]!, self._r[1678]!, [_1, _2, _3]) } - public var Month_ShortAugust: String { return self._s[1678]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[1679]! } - public var Notifications_Reset: String { return self._s[1680]! } - public var Conversation_Pin: String { return self._s[1681]! } - public var Passport_Language_lv: String { return self._s[1682]! } - public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1683]! } - public var BlockedUsers_Info: String { return self._s[1684]! } - public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1686]! } - public var Watch_Conversation_Unblock: String { return self._s[1688]! } + public var Month_ShortAugust: String { return self._s[1679]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[1680]! } + public var Notifications_Reset: String { return self._s[1681]! } + public var Conversation_Pin: String { return self._s[1682]! } + public var Passport_Language_lv: String { return self._s[1683]! } + public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1684]! } + public var BlockedUsers_Info: String { return self._s[1685]! } + public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1687]! } + public var Watch_Conversation_Unblock: String { return self._s[1689]! } public func Time_MonthOfYear_m9(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1689]!, self._r[1689]!, [_0]) + return formatWithArgumentRanges(self._s[1690]!, self._r[1690]!, [_0]) } - public var CloudStorage_Title: String { return self._s[1690]! } - public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1691]! } + public var CloudStorage_Title: String { return self._s[1691]! } + public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1692]! } public func NetworkUsageSettings_WifiUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1692]!, self._r[1692]!, [_0]) + return formatWithArgumentRanges(self._s[1693]!, self._r[1693]!, [_0]) } - public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1693]! } - public var Watch_Suggestion_OnMyWay: String { return self._s[1694]! } - public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1695]! } - public var Passport_Address_EditBankStatement: String { return self._s[1696]! } + public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1694]! } + public var Watch_Suggestion_OnMyWay: String { return self._s[1695]! } + public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1696]! } + public var Passport_Address_EditBankStatement: String { return self._s[1697]! } public func Channel_AdminLog_MessageChangedUnlinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1697]!, self._r[1697]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1698]!, self._r[1698]!, [_1, _2]) } - public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1698]! } - public var ShareMenu_Comment: String { return self._s[1699]! } - public var Permissions_ContactsTitle_v0: String { return self._s[1700]! } - public var Notifications_PermissionsTitle: String { return self._s[1701]! } - public var GroupPermission_NoSendLinks: String { return self._s[1702]! } - public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1703]! } - public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1704]! } - public var Settings_Support: String { return self._s[1705]! } - public var Notifications_ChannelNotificationsSound: String { return self._s[1706]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1707]! } - public var Privacy_Forwards_Preview: String { return self._s[1708]! } - public var GroupPermission_ApplyAlertAction: String { return self._s[1709]! } - public var Watch_Stickers_StickerPacks: String { return self._s[1710]! } - public var Common_Select: String { return self._s[1712]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1713]! } - public var WallpaperSearch_ColorGray: String { return self._s[1715]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1716]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1717]! } - public var Appearance_PreviewReplyAuthor: String { return self._s[1718]! } - public var TwoStepAuth_RecoveryTitle: String { return self._s[1719]! } - public var Widget_AuthRequired: String { return self._s[1720]! } - public var Camera_FlashOn: String { return self._s[1721]! } - public var Conversation_ContextMenuLookUp: String { return self._s[1722]! } - public var Channel_Stickers_NotFoundHelp: String { return self._s[1723]! } - public var Watch_Suggestion_OK: String { return self._s[1724]! } + public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1699]! } + public var ShareMenu_Comment: String { return self._s[1700]! } + public var Permissions_ContactsTitle_v0: String { return self._s[1701]! } + public var Notifications_PermissionsTitle: String { return self._s[1702]! } + public var GroupPermission_NoSendLinks: String { return self._s[1703]! } + public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1704]! } + public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1705]! } + public var Settings_Support: String { return self._s[1706]! } + public var Notifications_ChannelNotificationsSound: String { return self._s[1707]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1708]! } + public var Privacy_Forwards_Preview: String { return self._s[1709]! } + public var GroupPermission_ApplyAlertAction: String { return self._s[1710]! } + public var Watch_Stickers_StickerPacks: String { return self._s[1711]! } + public var Common_Select: String { return self._s[1713]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1714]! } + public var WallpaperSearch_ColorGray: String { return self._s[1716]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1717]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1718]! } + public var Appearance_PreviewReplyAuthor: String { return self._s[1719]! } + public var TwoStepAuth_RecoveryTitle: String { return self._s[1720]! } + public var Widget_AuthRequired: String { return self._s[1721]! } + public var Camera_FlashOn: String { return self._s[1722]! } + public var Conversation_ContextMenuLookUp: String { return self._s[1723]! } + public var Channel_Stickers_NotFoundHelp: String { return self._s[1724]! } + public var Watch_Suggestion_OK: String { return self._s[1725]! } public func Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1726]!, self._r[1726]!, [_0]) + return formatWithArgumentRanges(self._s[1727]!, self._r[1727]!, [_0]) } public func Notification_PinnedLiveLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1728]!, self._r[1728]!, [_0]) + return formatWithArgumentRanges(self._s[1729]!, self._r[1729]!, [_0]) } - public var TextFormat_Strikethrough: String { return self._s[1729]! } - public var DialogList_AdLabel: String { return self._s[1730]! } - public var WatchRemote_NotificationText: String { return self._s[1731]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1732]! } - public var Conversation_ReportSpam: String { return self._s[1733]! } - public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1734]! } - public var Settings_LogoutConfirmationTitle: String { return self._s[1736]! } - public var PhoneLabel_Title: String { return self._s[1737]! } - public var Passport_Address_EditRentalAgreement: String { return self._s[1738]! } - public var Settings_ChangePhoneNumber: String { return self._s[1739]! } - public var Notifications_ExceptionsTitle: String { return self._s[1740]! } - public var Notifications_AlertTones: String { return self._s[1741]! } - public var Call_ReportIncludeLogDescription: String { return self._s[1742]! } - public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1743]! } - public var AutoDownloadSettings_PrivateChats: String { return self._s[1744]! } - public var VoiceOver_Chat_Photo: String { return self._s[1746]! } - public var TwoStepAuth_AddHintTitle: String { return self._s[1747]! } - public var ReportPeer_ReasonOther: String { return self._s[1748]! } - public var ChatList_Context_JoinChannel: String { return self._s[1749]! } - public var KeyCommand_ScrollDown: String { return self._s[1751]! } - public var Conversation_ScheduleMessage_Title: String { return self._s[1752]! } + public var TextFormat_Strikethrough: String { return self._s[1730]! } + public var DialogList_AdLabel: String { return self._s[1731]! } + public var WatchRemote_NotificationText: String { return self._s[1732]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1733]! } + public var Conversation_ReportSpam: String { return self._s[1734]! } + public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1735]! } + public var Settings_LogoutConfirmationTitle: String { return self._s[1737]! } + public var PhoneLabel_Title: String { return self._s[1738]! } + public var Passport_Address_EditRentalAgreement: String { return self._s[1739]! } + public var Settings_ChangePhoneNumber: String { return self._s[1740]! } + public var Notifications_ExceptionsTitle: String { return self._s[1741]! } + public var Notifications_AlertTones: String { return self._s[1742]! } + public var Call_ReportIncludeLogDescription: String { return self._s[1743]! } + public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1744]! } + public var AutoDownloadSettings_PrivateChats: String { return self._s[1745]! } + public var VoiceOver_Chat_Photo: String { return self._s[1747]! } + public var TwoStepAuth_AddHintTitle: String { return self._s[1748]! } + public var ReportPeer_ReasonOther: String { return self._s[1749]! } + public var ChatList_Context_JoinChannel: String { return self._s[1750]! } + public var KeyCommand_ScrollDown: String { return self._s[1752]! } + public var Conversation_ScheduleMessage_Title: String { return self._s[1753]! } public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1753]!, self._r[1753]!, [_0]) + return formatWithArgumentRanges(self._s[1754]!, self._r[1754]!, [_0]) } - public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1754]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1755]! } - public var AuthSessions_LogOut: String { return self._s[1756]! } - public var Passport_Identity_TypeInternalPassport: String { return self._s[1757]! } - public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1758]! } - public var Passport_Phone_Title: String { return self._s[1759]! } - public var ContactList_Context_StartSecretChat: String { return self._s[1760]! } - public var Settings_PhoneNumber: String { return self._s[1761]! } + public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1755]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1756]! } + public var AuthSessions_LogOut: String { return self._s[1757]! } + public var Passport_Identity_TypeInternalPassport: String { return self._s[1758]! } + public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1759]! } + public var Passport_Phone_Title: String { return self._s[1760]! } + public var ContactList_Context_StartSecretChat: String { return self._s[1761]! } + public var Settings_PhoneNumber: String { return self._s[1762]! } public func Conversation_ScheduleMessage_SendToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1762]!, self._r[1762]!, [_0]) + return formatWithArgumentRanges(self._s[1763]!, self._r[1763]!, [_0]) } - public var NotificationsSound_Alert: String { return self._s[1763]! } - public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1764]! } - public var WebSearch_SearchNoResults: String { return self._s[1765]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1767]! } - public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1768]! } - public var SettingsSearch_Synonyms_Passport: String { return self._s[1769]! } - public var PhotoEditor_CurvesTool: String { return self._s[1770]! } - public var Checkout_PaymentMethod: String { return self._s[1772]! } + public var NotificationsSound_Alert: String { return self._s[1764]! } + public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1765]! } + public var WebSearch_SearchNoResults: String { return self._s[1766]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1768]! } + public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1769]! } + public var SettingsSearch_Synonyms_Passport: String { return self._s[1770]! } + public var PhotoEditor_CurvesTool: String { return self._s[1771]! } + public var Checkout_PaymentMethod: String { return self._s[1773]! } public func PUSH_CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1773]!, self._r[1773]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1774]!, self._r[1774]!, [_1, _2]) } - public var Contacts_AccessDeniedError: String { return self._s[1774]! } - public var Camera_PhotoMode: String { return self._s[1777]! } - public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1778]! } + public var Contacts_AccessDeniedError: String { return self._s[1775]! } + public var Camera_PhotoMode: String { return self._s[1778]! } + public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1779]! } public func Updated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1779]!, self._r[1779]!, [_0]) + return formatWithArgumentRanges(self._s[1780]!, self._r[1780]!, [_0]) } - public var Passport_Address_AddUtilityBill: String { return self._s[1781]! } - public var CallSettings_OnMobile: String { return self._s[1782]! } - public var Tour_Text2: String { return self._s[1783]! } + public var Passport_Address_AddUtilityBill: String { return self._s[1782]! } + public var CallSettings_OnMobile: String { return self._s[1783]! } + public var Tour_Text2: String { return self._s[1784]! } public func PUSH_CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1784]!, self._r[1784]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1785]!, self._r[1785]!, [_1, _2]) } - public var DialogList_EncryptionProcessing: String { return self._s[1786]! } - public var Permissions_Skip: String { return self._s[1787]! } - public var Wallet_Words_NotDoneOk: String { return self._s[1788]! } - public var SecretImage_Title: String { return self._s[1789]! } - public var Watch_MessageView_Title: String { return self._s[1790]! } - public var Channel_DiscussionGroupAdd: String { return self._s[1791]! } - public var AttachmentMenu_Poll: String { return self._s[1792]! } + public var DialogList_EncryptionProcessing: String { return self._s[1787]! } + public var Permissions_Skip: String { return self._s[1788]! } + public var Wallet_Words_NotDoneOk: String { return self._s[1789]! } + public var SecretImage_Title: String { return self._s[1790]! } + public var Watch_MessageView_Title: String { return self._s[1791]! } + public var Channel_DiscussionGroupAdd: String { return self._s[1792]! } + public var AttachmentMenu_Poll: String { return self._s[1793]! } public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1793]!, self._r[1793]!, [_0]) + return formatWithArgumentRanges(self._s[1794]!, self._r[1794]!, [_0]) } public func Channel_DiscussionGroup_PrivateChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1794]!, self._r[1794]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1795]!, self._r[1795]!, [_1, _2]) } - public var Notification_CallCanceled: String { return self._s[1795]! } - public var WallpaperPreview_Title: String { return self._s[1796]! } - public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1797]! } - public var Settings_ProxyConnecting: String { return self._s[1798]! } - public var Settings_CheckPhoneNumberText: String { return self._s[1800]! } - public var VoiceOver_Chat_YourVideo: String { return self._s[1801]! } - public var Wallet_Intro_Title: String { return self._s[1802]! } - public var Profile_MessageLifetime5s: String { return self._s[1803]! } - public var Username_InvalidCharacters: String { return self._s[1804]! } - public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1805]! } - public var ScheduledMessages_ClearAll: String { return self._s[1806]! } - public var WallpaperPreview_CropBottomText: String { return self._s[1807]! } - public var AutoDownloadSettings_LimitBySize: String { return self._s[1808]! } - public var Settings_AddAccount: String { return self._s[1809]! } - public var Notification_CreatedChannel: String { return self._s[1812]! } + public var Notification_CallCanceled: String { return self._s[1796]! } + public var WallpaperPreview_Title: String { return self._s[1797]! } + public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1798]! } + public var Settings_ProxyConnecting: String { return self._s[1799]! } + public var Settings_CheckPhoneNumberText: String { return self._s[1801]! } + public var VoiceOver_Chat_YourVideo: String { return self._s[1802]! } + public var Wallet_Intro_Title: String { return self._s[1803]! } + public var Profile_MessageLifetime5s: String { return self._s[1804]! } + public var Username_InvalidCharacters: String { return self._s[1805]! } + public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1806]! } + public var ScheduledMessages_ClearAll: String { return self._s[1807]! } + public var WallpaperPreview_CropBottomText: String { return self._s[1808]! } + public var AutoDownloadSettings_LimitBySize: String { return self._s[1809]! } + public var Settings_AddAccount: String { return self._s[1810]! } + public var Notification_CreatedChannel: String { return self._s[1813]! } public func PUSH_CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1813]!, self._r[1813]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1814]!, self._r[1814]!, [_1, _2, _3]) } - public var Passcode_AppLockedAlert: String { return self._s[1815]! } - public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1816]! } - public var VoiceOver_Media_PlaybackStop: String { return self._s[1817]! } - public var Contacts_TopSection: String { return self._s[1818]! } + public var Passcode_AppLockedAlert: String { return self._s[1816]! } + public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1817]! } + public var VoiceOver_Media_PlaybackStop: String { return self._s[1818]! } + public var Contacts_TopSection: String { return self._s[1819]! } public func Conversation_SetReminder_RemindOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1819]!, self._r[1819]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1820]!, self._r[1820]!, [_0, _1]) } - public var Wallet_Info_Receive: String { return self._s[1820]! } - public var Wallet_Completed_ViewWallet: String { return self._s[1821]! } + public var Wallet_Info_Receive: String { return self._s[1821]! } + public var Wallet_Completed_ViewWallet: String { return self._s[1822]! } public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1822]!, self._r[1822]!, [_0]) + return formatWithArgumentRanges(self._s[1823]!, self._r[1823]!, [_0]) } - public var ReportPeer_ReasonSpam: String { return self._s[1823]! } - public var UserInfo_TapToCall: String { return self._s[1824]! } - public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1826]! } - public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1827]! } - public var Common_Search: String { return self._s[1828]! } - public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1829]! } + public var ReportPeer_ReasonSpam: String { return self._s[1824]! } + public var UserInfo_TapToCall: String { return self._s[1825]! } + public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1827]! } + public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1828]! } + public var Common_Search: String { return self._s[1829]! } + public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1830]! } public func Channel_AdminLog_MessageChangedGroupGeoLocation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1830]!, self._r[1830]!, [_0]) + return formatWithArgumentRanges(self._s[1831]!, self._r[1831]!, [_0]) } - public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1831]! } - public var Message_InvoiceLabel: String { return self._s[1832]! } - public var Conversation_InputTextPlaceholder: String { return self._s[1833]! } - public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1834]! } + public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1832]! } + public var Message_InvoiceLabel: String { return self._s[1833]! } + public var Conversation_InputTextPlaceholder: String { return self._s[1834]! } + public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1835]! } public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1835]!, self._r[1835]!, [_0]) + return formatWithArgumentRanges(self._s[1836]!, self._r[1836]!, [_0]) } - public var Conversation_Info: String { return self._s[1836]! } - public var Login_InfoDeletePhoto: String { return self._s[1837]! } - public var Passport_Language_vi: String { return self._s[1839]! } - public var UserInfo_ScamUserWarning: String { return self._s[1840]! } - public var Conversation_Search: String { return self._s[1841]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1843]! } + public var Conversation_Info: String { return self._s[1837]! } + public var Login_InfoDeletePhoto: String { return self._s[1838]! } + public var Passport_Language_vi: String { return self._s[1840]! } + public var UserInfo_ScamUserWarning: String { return self._s[1841]! } + public var Conversation_Search: String { return self._s[1842]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1844]! } public func Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1844]!, self._r[1844]!, [_0]) + return formatWithArgumentRanges(self._s[1845]!, self._r[1845]!, [_0]) } - public var ReportPeer_ReasonPornography: String { return self._s[1845]! } - public var AutoDownloadSettings_PhotosTitle: String { return self._s[1846]! } - public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1847]! } - public var Map_LiveLocationGroupDescription: String { return self._s[1848]! } - public var Channel_Setup_TypeHeader: String { return self._s[1849]! } - public var AuthSessions_LoggedIn: String { return self._s[1850]! } - public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1851]! } - public var Login_SmsRequestState3: String { return self._s[1852]! } - public var Passport_Address_EditUtilityBill: String { return self._s[1853]! } - public var Appearance_ReduceMotionInfo: String { return self._s[1854]! } - public var Join_ChannelsTooMuch: String { return self._s[1855]! } - public var Channel_Edit_LinkItem: String { return self._s[1856]! } - public var Privacy_Calls_P2PNever: String { return self._s[1857]! } - public var Conversation_AddToReadingList: String { return self._s[1859]! } - public var Share_MultipleMessagesDisabled: String { return self._s[1860]! } - public var Message_Animation: String { return self._s[1861]! } - public var Conversation_DefaultRestrictedMedia: String { return self._s[1862]! } - public var Map_Unknown: String { return self._s[1863]! } - public var AutoDownloadSettings_LastDelimeter: String { return self._s[1864]! } + public var ReportPeer_ReasonPornography: String { return self._s[1846]! } + public var AutoDownloadSettings_PhotosTitle: String { return self._s[1847]! } + public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1848]! } + public var Map_LiveLocationGroupDescription: String { return self._s[1849]! } + public var Channel_Setup_TypeHeader: String { return self._s[1850]! } + public var AuthSessions_LoggedIn: String { return self._s[1851]! } + public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1852]! } + public var Login_SmsRequestState3: String { return self._s[1853]! } + public var Passport_Address_EditUtilityBill: String { return self._s[1854]! } + public var Appearance_ReduceMotionInfo: String { return self._s[1855]! } + public var Join_ChannelsTooMuch: String { return self._s[1856]! } + public var Channel_Edit_LinkItem: String { return self._s[1857]! } + public var Privacy_Calls_P2PNever: String { return self._s[1858]! } + public var Conversation_AddToReadingList: String { return self._s[1860]! } + public var Share_MultipleMessagesDisabled: String { return self._s[1861]! } + public var Message_Animation: String { return self._s[1862]! } + public var Conversation_DefaultRestrictedMedia: String { return self._s[1863]! } + public var Map_Unknown: String { return self._s[1864]! } + public var AutoDownloadSettings_LastDelimeter: String { return self._s[1865]! } public func PUSH_PINNED_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1865]!, self._r[1865]!, [_1, _2]) - } - public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1866]!, self._r[1866]!, [_1, _2]) } - public var Call_StatusRequesting: String { return self._s[1867]! } - public var Conversation_SecretChatContextBotAlert: String { return self._s[1868]! } - public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1869]! } + public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1867]!, self._r[1867]!, [_1, _2]) + } + public var Call_StatusRequesting: String { return self._s[1868]! } + public var Conversation_SecretChatContextBotAlert: String { return self._s[1869]! } + public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1870]! } public func PUSH_CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1870]!, self._r[1870]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1871]!, self._r[1871]!, [_1, _2]) } public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1871]!, self._r[1871]!, [_0]) + return formatWithArgumentRanges(self._s[1872]!, self._r[1872]!, [_0]) } - public var Update_Skip: String { return self._s[1872]! } - public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1873]! } - public var Message_PinnedPollMessage: String { return self._s[1874]! } - public var BlockedUsers_Title: String { return self._s[1875]! } + public var Update_Skip: String { return self._s[1873]! } + public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1874]! } + public var Message_PinnedPollMessage: String { return self._s[1875]! } + public var BlockedUsers_Title: String { return self._s[1876]! } public func PUSH_CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1876]!, self._r[1876]!, [_1]) + return formatWithArgumentRanges(self._s[1877]!, self._r[1877]!, [_1]) } - public var Username_CheckingUsername: String { return self._s[1877]! } - public var NotificationsSound_Bell: String { return self._s[1878]! } - public var Conversation_SendMessageErrorFlood: String { return self._s[1879]! } - public var Weekday_Monday: String { return self._s[1880]! } - public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1881]! } - public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1882]! } - public var ChatSettings_Groups: String { return self._s[1883]! } + public var Username_CheckingUsername: String { return self._s[1878]! } + public var NotificationsSound_Bell: String { return self._s[1879]! } + public var Conversation_SendMessageErrorFlood: String { return self._s[1880]! } + public var Weekday_Monday: String { return self._s[1881]! } + public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1882]! } + public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1883]! } + public var ChatSettings_Groups: String { return self._s[1884]! } public func Conversation_SetReminder_RemindTomorrow(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1884]!, self._r[1884]!, [_0]) + return formatWithArgumentRanges(self._s[1885]!, self._r[1885]!, [_0]) } - public var Your_card_was_declined: String { return self._s[1885]! } - public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1887]! } - public var ChatList_Unmute: String { return self._s[1888]! } - public var PhotoEditor_CurvesAll: String { return self._s[1889]! } - public var Weekday_ShortTuesday: String { return self._s[1890]! } - public var DialogList_Read: String { return self._s[1891]! } - public var Appearance_AppIconClassic: String { return self._s[1892]! } - public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1893]! } - public var Passport_Identity_Gender: String { return self._s[1894]! } + public var Your_card_was_declined: String { return self._s[1886]! } + public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1888]! } + public var ChatList_Unmute: String { return self._s[1889]! } + public var PhotoEditor_CurvesAll: String { return self._s[1890]! } + public var Weekday_ShortTuesday: String { return self._s[1891]! } + public var DialogList_Read: String { return self._s[1892]! } + public var Appearance_AppIconClassic: String { return self._s[1893]! } + public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1894]! } + public var Passport_Identity_Gender: String { return self._s[1895]! } public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1895]!, self._r[1895]!, [_0]) + return formatWithArgumentRanges(self._s[1896]!, self._r[1896]!, [_0]) } - public var Target_SelectGroup: String { return self._s[1896]! } + public var Target_SelectGroup: String { return self._s[1897]! } public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1898]!, self._r[1898]!, [_0]) + return formatWithArgumentRanges(self._s[1899]!, self._r[1899]!, [_0]) } - public var Passport_Language_en: String { return self._s[1899]! } - public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1900]! } - public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1901]! } - public var Login_CancelPhoneVerificationContinue: String { return self._s[1902]! } - public var ScheduledMessages_SendNow: String { return self._s[1903]! } - public var Checkout_NewCard_PaymentCard: String { return self._s[1905]! } - public var Login_InfoHelp: String { return self._s[1906]! } - public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1907]! } - public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1908]! } + public var Passport_Language_en: String { return self._s[1900]! } + public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1901]! } + public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1902]! } + public var Login_CancelPhoneVerificationContinue: String { return self._s[1903]! } + public var ScheduledMessages_SendNow: String { return self._s[1904]! } + public var Checkout_NewCard_PaymentCard: String { return self._s[1906]! } + public var Login_InfoHelp: String { return self._s[1907]! } + public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1908]! } + public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1909]! } public func Channel_AdminLog_MessageChangedLinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1909]!, self._r[1909]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1910]!, self._r[1910]!, [_1, _2]) } - public var SocksProxySetup_AddProxy: String { return self._s[1912]! } - public var CreatePoll_Title: String { return self._s[1913]! } - public var Conversation_ViewTheme: String { return self._s[1914]! } - public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1915]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1916]! } - public var UserInfo_GroupsInCommon: String { return self._s[1917]! } - public var Call_AudioRouteHide: String { return self._s[1918]! } - public var ContactInfo_PhoneLabelMobile: String { return self._s[1920]! } + public var SocksProxySetup_AddProxy: String { return self._s[1913]! } + public var CreatePoll_Title: String { return self._s[1914]! } + public var Conversation_ViewTheme: String { return self._s[1915]! } + public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1916]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1917]! } + public var UserInfo_GroupsInCommon: String { return self._s[1918]! } + public var Call_AudioRouteHide: String { return self._s[1919]! } + public var ContactInfo_PhoneLabelMobile: String { return self._s[1921]! } public func ChatList_LeaveGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1921]!, self._r[1921]!, [_0]) + return formatWithArgumentRanges(self._s[1922]!, self._r[1922]!, [_0]) } - public var TextFormat_Bold: String { return self._s[1922]! } - public var FastTwoStepSetup_EmailSection: String { return self._s[1923]! } - public var Notifications_Title: String { return self._s[1924]! } - public var Group_Username_InvalidTooShort: String { return self._s[1925]! } - public var Channel_ErrorAddTooMuch: String { return self._s[1926]! } + public var TextFormat_Bold: String { return self._s[1923]! } + public var FastTwoStepSetup_EmailSection: String { return self._s[1924]! } + public var Notifications_Title: String { return self._s[1925]! } + public var Group_Username_InvalidTooShort: String { return self._s[1926]! } + public var Channel_ErrorAddTooMuch: String { return self._s[1927]! } public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1927]!, self._r[1927]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1928]!, self._r[1928]!, ["\(_0)"]) } - public var VoiceOver_DiscardPreparedContent: String { return self._s[1929]! } - public var Stickers_SuggestAdded: String { return self._s[1930]! } - public var Login_CountryCode: String { return self._s[1931]! } - public var ChatSettings_AutoPlayVideos: String { return self._s[1932]! } - public var Map_GetDirections: String { return self._s[1933]! } - public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[1934]! } - public var Login_PhoneFloodError: String { return self._s[1935]! } + public var VoiceOver_DiscardPreparedContent: String { return self._s[1930]! } + public var Stickers_SuggestAdded: String { return self._s[1931]! } + public var Login_CountryCode: String { return self._s[1932]! } + public var ChatSettings_AutoPlayVideos: String { return self._s[1933]! } + public var Map_GetDirections: String { return self._s[1934]! } + public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[1935]! } + public var Login_PhoneFloodError: String { return self._s[1936]! } public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1936]!, self._r[1936]!, [_0]) + return formatWithArgumentRanges(self._s[1937]!, self._r[1937]!, [_0]) } - public var Settings_SetUsername: String { return self._s[1938]! } - public var Group_Location_ChangeLocation: String { return self._s[1939]! } - public var Notification_GroupInviterSelf: String { return self._s[1940]! } - public var InstantPage_TapToOpenLink: String { return self._s[1941]! } + public var Settings_SetUsername: String { return self._s[1939]! } + public var Group_Location_ChangeLocation: String { return self._s[1940]! } + public var Notification_GroupInviterSelf: String { return self._s[1941]! } + public var InstantPage_TapToOpenLink: String { return self._s[1942]! } public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1942]!, self._r[1942]!, [_0]) + return formatWithArgumentRanges(self._s[1943]!, self._r[1943]!, [_0]) } - public var Watch_Suggestion_TalkLater: String { return self._s[1943]! } - public var SecretChat_Title: String { return self._s[1944]! } - public var Group_UpgradeNoticeText1: String { return self._s[1945]! } - public var AuthSessions_Title: String { return self._s[1946]! } + public var Watch_Suggestion_TalkLater: String { return self._s[1944]! } + public var SecretChat_Title: String { return self._s[1945]! } + public var Group_UpgradeNoticeText1: String { return self._s[1946]! } + public var AuthSessions_Title: String { return self._s[1947]! } public func TextFormat_AddLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1947]!, self._r[1947]!, [_0]) + return formatWithArgumentRanges(self._s[1948]!, self._r[1948]!, [_0]) } - public var PhotoEditor_CropAuto: String { return self._s[1948]! } - public var Channel_About_Title: String { return self._s[1949]! } - public var FastTwoStepSetup_EmailHelp: String { return self._s[1950]! } + public var PhotoEditor_CropAuto: String { return self._s[1949]! } + public var Channel_About_Title: String { return self._s[1950]! } + public var FastTwoStepSetup_EmailHelp: String { return self._s[1951]! } public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1952]!, self._r[1952]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1953]!, self._r[1953]!, ["\(_0)"]) } - public var VoiceOver_MessageContextReport: String { return self._s[1953]! } - public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1955]! } - public var Group_Setup_HistoryVisibleHelp: String { return self._s[1956]! } + public var VoiceOver_MessageContextReport: String { return self._s[1954]! } + public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1956]! } + public var Group_Setup_HistoryVisibleHelp: String { return self._s[1957]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1957]!, self._r[1957]!, [_1]) + return formatWithArgumentRanges(self._s[1958]!, self._r[1958]!, [_1]) } public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1959]!, self._r[1959]!, [_0]) - } - public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1960]!, self._r[1960]!, [_0]) } - public var Privacy_PaymentsClearInfoHelp: String { return self._s[1961]! } - public var Presence_online: String { return self._s[1963]! } - public var PasscodeSettings_Title: String { return self._s[1964]! } - public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1965]! } - public var Web_OpenExternal: String { return self._s[1966]! } - public var AutoDownloadSettings_AutoDownload: String { return self._s[1968]! } - public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[1969]! } - public var LocalGroup_Title: String { return self._s[1970]! } + public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1961]!, self._r[1961]!, [_0]) + } + public var Privacy_PaymentsClearInfoHelp: String { return self._s[1962]! } + public var Presence_online: String { return self._s[1964]! } + public var PasscodeSettings_Title: String { return self._s[1965]! } + public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1966]! } + public var Web_OpenExternal: String { return self._s[1967]! } + public var AutoDownloadSettings_AutoDownload: String { return self._s[1969]! } + public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[1970]! } + public var LocalGroup_Title: String { return self._s[1971]! } public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1971]!, self._r[1971]!, [_0]) + return formatWithArgumentRanges(self._s[1972]!, self._r[1972]!, [_0]) } - public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1972]! } - public var Map_YouAreHere: String { return self._s[1973]! } + public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1973]! } + public var Map_YouAreHere: String { return self._s[1974]! } public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1974]!, self._r[1974]!, [_0]) - } - public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1975]!, self._r[1975]!, [_0]) } - public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1976]! } - public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1977]! } - public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1978]!, self._r[1978]!, [_0]) + public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1976]!, self._r[1976]!, [_0]) } - public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { + public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1977]! } + public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1978]! } + public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1979]!, self._r[1979]!, [_0]) } - public var SocksProxySetup_Username: String { return self._s[1980]! } - public var Bot_Start: String { return self._s[1981]! } - public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1982]!, self._r[1982]!, [_0]) + public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1980]!, self._r[1980]!, [_0]) } - public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { + public var SocksProxySetup_Username: String { return self._s[1981]! } + public var Bot_Start: String { return self._s[1982]! } + public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1983]!, self._r[1983]!, [_0]) } - public var Contacts_SortByPresence: String { return self._s[1984]! } - public var AccentColor_Title: String { return self._s[1986]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1987]! } + public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1984]!, self._r[1984]!, [_0]) + } + public var Contacts_SortByPresence: String { return self._s[1985]! } + public var AccentColor_Title: String { return self._s[1987]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1988]! } public func PUSH_CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1988]!, self._r[1988]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1989]!, self._r[1989]!, [_1, _2]) } public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1989]!, self._r[1989]!, [_0]) + return formatWithArgumentRanges(self._s[1990]!, self._r[1990]!, [_0]) } public func Channel_AdminLog_MessageChangedLinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1990]!, self._r[1990]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1991]!, self._r[1991]!, [_1, _2]) } - public var Passport_Email_EnterOtherEmail: String { return self._s[1991]! } - public var Login_InfoAvatarPhoto: String { return self._s[1992]! } - public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1993]! } - public var Tour_Title4: String { return self._s[1994]! } - public var Passport_Identity_Translation: String { return self._s[1995]! } - public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[1996]! } - public var Login_TermsOfServiceLabel: String { return self._s[1998]! } - public var Passport_Language_it: String { return self._s[1999]! } - public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2000]! } - public var Passport_Identity_SelfieHelp: String { return self._s[2001]! } - public var Conversation_ClearAll: String { return self._s[2003]! } - public var Channel_OwnershipTransfer_Title: String { return self._s[2005]! } - public var TwoStepAuth_FloodError: String { return self._s[2006]! } + public var Passport_Email_EnterOtherEmail: String { return self._s[1992]! } + public var Login_InfoAvatarPhoto: String { return self._s[1993]! } + public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1994]! } + public var Tour_Title4: String { return self._s[1995]! } + public var Passport_Identity_Translation: String { return self._s[1996]! } + public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[1997]! } + public var Login_TermsOfServiceLabel: String { return self._s[1999]! } + public var Passport_Language_it: String { return self._s[2000]! } + public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2001]! } + public var Passport_Identity_SelfieHelp: String { return self._s[2002]! } + public var Conversation_ClearAll: String { return self._s[2004]! } + public var Channel_OwnershipTransfer_Title: String { return self._s[2006]! } + public var TwoStepAuth_FloodError: String { return self._s[2007]! } public func PUSH_CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2007]!, self._r[2007]!, [_1]) + return formatWithArgumentRanges(self._s[2008]!, self._r[2008]!, [_1]) } - public var Paint_Delete: String { return self._s[2008]! } + public var Paint_Delete: String { return self._s[2009]! } public func Wallet_Sent_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2009]!, self._r[2009]!, [_0]) + return formatWithArgumentRanges(self._s[2010]!, self._r[2010]!, [_0]) } - public var Privacy_AddNewPeer: String { return self._s[2010]! } + public var Privacy_AddNewPeer: String { return self._s[2011]! } public func Channel_AdminLog_MessageRank(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2011]!, self._r[2011]!, [_1]) + return formatWithArgumentRanges(self._s[2012]!, self._r[2012]!, [_1]) } - public var LogoutOptions_SetPasscodeText: String { return self._s[2012]! } + public var LogoutOptions_SetPasscodeText: String { return self._s[2013]! } public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2013]!, self._r[2013]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2014]!, self._r[2014]!, [_1, _2]) } - public var Message_PinnedAudioMessage: String { return self._s[2014]! } + public var Message_PinnedAudioMessage: String { return self._s[2015]! } public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2015]!, self._r[2015]!, [_0]) + return formatWithArgumentRanges(self._s[2016]!, self._r[2016]!, [_0]) } - public var Notification_Mute1hMin: String { return self._s[2016]! } - public var Notifications_GroupNotificationsSound: String { return self._s[2017]! } - public var SocksProxySetup_ShareProxyList: String { return self._s[2018]! } - public var Conversation_MessageEditedLabel: String { return self._s[2019]! } - public var Notification_Exceptions_AlwaysOff: String { return self._s[2020]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2021]! } + public var Notification_Mute1hMin: String { return self._s[2017]! } + public var Notifications_GroupNotificationsSound: String { return self._s[2018]! } + public var SocksProxySetup_ShareProxyList: String { return self._s[2019]! } + public var Conversation_MessageEditedLabel: String { return self._s[2020]! } + public var Notification_Exceptions_AlwaysOff: String { return self._s[2021]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2022]! } public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2022]!, self._r[2022]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[2023]!, self._r[2023]!, [_0, _1, _2]) } - public var NetworkUsageSettings_ResetStats: String { return self._s[2023]! } + public var NetworkUsageSettings_ResetStats: String { return self._s[2024]! } public func PUSH_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2024]!, self._r[2024]!, [_1]) + return formatWithArgumentRanges(self._s[2025]!, self._r[2025]!, [_1]) } - public var AccessDenied_LocationTracking: String { return self._s[2025]! } - public var Month_GenOctober: String { return self._s[2026]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2027]! } - public var EnterPasscode_EnterPasscode: String { return self._s[2028]! } - public var MediaPicker_TimerTooltip: String { return self._s[2030]! } - public var SharedMedia_TitleAll: String { return self._s[2031]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2034]! } - public var Conversation_RestrictedMedia: String { return self._s[2035]! } - public var AccessDenied_PhotosRestricted: String { return self._s[2036]! } - public var Privacy_Forwards_WhoCanForward: String { return self._s[2038]! } - public var ChangePhoneNumberCode_Called: String { return self._s[2039]! } + public var AccessDenied_LocationTracking: String { return self._s[2026]! } + public var Month_GenOctober: String { return self._s[2027]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2028]! } + public var EnterPasscode_EnterPasscode: String { return self._s[2029]! } + public var MediaPicker_TimerTooltip: String { return self._s[2031]! } + public var SharedMedia_TitleAll: String { return self._s[2032]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2035]! } + public var Conversation_RestrictedMedia: String { return self._s[2036]! } + public var AccessDenied_PhotosRestricted: String { return self._s[2037]! } + public var Privacy_Forwards_WhoCanForward: String { return self._s[2039]! } + public var ChangePhoneNumberCode_Called: String { return self._s[2040]! } public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2040]!, self._r[2040]!, [_0]) + return formatWithArgumentRanges(self._s[2041]!, self._r[2041]!, [_0]) } - public var Conversation_SavedMessages: String { return self._s[2043]! } - public var Your_cards_expiration_month_is_invalid: String { return self._s[2045]! } - public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2046]! } + public var Conversation_SavedMessages: String { return self._s[2044]! } + public var Your_cards_expiration_month_is_invalid: String { return self._s[2046]! } + public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2047]! } public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2048]!, self._r[2048]!, [_0]) + return formatWithArgumentRanges(self._s[2049]!, self._r[2049]!, [_0]) } - public var VoiceOver_Chat_YourMessage: String { return self._s[2049]! } + public var VoiceOver_Chat_YourMessage: String { return self._s[2050]! } public func VoiceOver_Chat_Title(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2050]!, self._r[2050]!, [_0]) + return formatWithArgumentRanges(self._s[2051]!, self._r[2051]!, [_0]) } - public var ReportPeer_AlertSuccess: String { return self._s[2051]! } - public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2052]! } + public var ReportPeer_AlertSuccess: String { return self._s[2052]! } + public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2053]! } public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2053]!, self._r[2053]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2054]!, self._r[2054]!, [_1, _2]) } - public var Checkout_PasswordEntry_Title: String { return self._s[2054]! } - public var PhotoEditor_FadeTool: String { return self._s[2055]! } - public var Privacy_ContactsReset: String { return self._s[2056]! } + public var Checkout_PasswordEntry_Title: String { return self._s[2055]! } + public var PhotoEditor_FadeTool: String { return self._s[2056]! } + public var Privacy_ContactsReset: String { return self._s[2057]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2058]!, self._r[2058]!, [_0]) + return formatWithArgumentRanges(self._s[2059]!, self._r[2059]!, [_0]) } - public var Message_PinnedVideoMessage: String { return self._s[2059]! } - public var ChatList_Mute: String { return self._s[2060]! } - public var Permissions_CellularDataText_v0: String { return self._s[2061]! } - public var ShareMenu_SelectChats: String { return self._s[2064]! } - public var ChatList_Context_Unarchive: String { return self._s[2065]! } - public var MusicPlayer_VoiceNote: String { return self._s[2066]! } - public var Conversation_RestrictedText: String { return self._s[2067]! } - public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2068]! } - public var TwoStepAuth_DisableSuccess: String { return self._s[2069]! } - public var Cache_Videos: String { return self._s[2070]! } - public var PrivacySettings_PhoneNumber: String { return self._s[2071]! } - public var FeatureDisabled_Oops: String { return self._s[2073]! } - public var Passport_Address_PostcodePlaceholder: String { return self._s[2074]! } + public var Message_PinnedVideoMessage: String { return self._s[2060]! } + public var ChatList_Mute: String { return self._s[2061]! } + public var Permissions_CellularDataText_v0: String { return self._s[2062]! } + public var ShareMenu_SelectChats: String { return self._s[2065]! } + public var ChatList_Context_Unarchive: String { return self._s[2066]! } + public var MusicPlayer_VoiceNote: String { return self._s[2067]! } + public var Conversation_RestrictedText: String { return self._s[2068]! } + public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2069]! } + public var TwoStepAuth_DisableSuccess: String { return self._s[2070]! } + public var Cache_Videos: String { return self._s[2071]! } + public var PrivacySettings_PhoneNumber: String { return self._s[2072]! } + public var FeatureDisabled_Oops: String { return self._s[2074]! } + public var Passport_Address_PostcodePlaceholder: String { return self._s[2075]! } public func AddContact_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2075]!, self._r[2075]!, [_0]) + return formatWithArgumentRanges(self._s[2076]!, self._r[2076]!, [_0]) } - public var Stickers_GroupStickersHelp: String { return self._s[2076]! } - public var GroupPermission_NoSendPolls: String { return self._s[2077]! } - public var Wallet_Qr_ScanCode: String { return self._s[2078]! } - public var Message_VideoExpired: String { return self._s[2080]! } - public var Notifications_Badge: String { return self._s[2081]! } - public var GroupInfo_GroupHistoryVisible: String { return self._s[2082]! } - public var Wallet_Receive_AddressCopied: String { return self._s[2083]! } - public var CreatePoll_OptionPlaceholder: String { return self._s[2084]! } - public var Username_InvalidTooShort: String { return self._s[2085]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2086]! } - public var Channel_AdminLog_PinMessages: String { return self._s[2087]! } - public var ArchivedChats_IntroTitle3: String { return self._s[2088]! } + public var Stickers_GroupStickersHelp: String { return self._s[2077]! } + public var GroupPermission_NoSendPolls: String { return self._s[2078]! } + public var Wallet_Qr_ScanCode: String { return self._s[2079]! } + public var Message_VideoExpired: String { return self._s[2081]! } + public var Notifications_Badge: String { return self._s[2082]! } + public var GroupInfo_GroupHistoryVisible: String { return self._s[2083]! } + public var Wallet_Receive_AddressCopied: String { return self._s[2084]! } + public var CreatePoll_OptionPlaceholder: String { return self._s[2085]! } + public var Username_InvalidTooShort: String { return self._s[2086]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2087]! } + public var Channel_AdminLog_PinMessages: String { return self._s[2088]! } + public var ArchivedChats_IntroTitle3: String { return self._s[2089]! } public func Notification_MessageLifetimeRemoved(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2089]!, self._r[2089]!, [_1]) + return formatWithArgumentRanges(self._s[2090]!, self._r[2090]!, [_1]) } - public var Permissions_SiriAllowInSettings_v0: String { return self._s[2090]! } - public var Conversation_DefaultRestrictedText: String { return self._s[2091]! } - public var SharedMedia_CategoryDocs: String { return self._s[2094]! } + public var Permissions_SiriAllowInSettings_v0: String { return self._s[2091]! } + public var Conversation_DefaultRestrictedText: String { return self._s[2092]! } + public var SharedMedia_CategoryDocs: String { return self._s[2095]! } public func PUSH_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2095]!, self._r[2095]!, [_1]) + return formatWithArgumentRanges(self._s[2096]!, self._r[2096]!, [_1]) } - public var Privacy_Forwards_NeverLink: String { return self._s[2097]! } + public var Privacy_Forwards_NeverLink: String { return self._s[2098]! } public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2098]!, self._r[2098]!, [_1]) + return formatWithArgumentRanges(self._s[2099]!, self._r[2099]!, [_1]) } - public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2099]! } + public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2100]! } public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2100]!, self._r[2100]!, [_0]) + return formatWithArgumentRanges(self._s[2101]!, self._r[2101]!, [_0]) } - public var ChatSettings_PrivateChats: String { return self._s[2101]! } - public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2102]! } - public var Conversation_PrivateMessageLinkCopied: String { return self._s[2103]! } - public var Channel_UpdatePhotoItem: String { return self._s[2104]! } - public var GroupInfo_LeftStatus: String { return self._s[2105]! } - public var Watch_MessageView_Forward: String { return self._s[2107]! } - public var ReportPeer_ReasonChildAbuse: String { return self._s[2108]! } - public var Cache_ClearEmpty: String { return self._s[2110]! } - public var Localization_LanguageName: String { return self._s[2111]! } - public var WebSearch_GIFs: String { return self._s[2112]! } - public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2113]! } - public var Username_InvalidStartsWithNumber: String { return self._s[2114]! } - public var Common_Back: String { return self._s[2115]! } - public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2116]! } - public var Wallet_Send_Send: String { return self._s[2117]! } + public var ChatSettings_PrivateChats: String { return self._s[2102]! } + public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2103]! } + public var Conversation_PrivateMessageLinkCopied: String { return self._s[2104]! } + public var Channel_UpdatePhotoItem: String { return self._s[2105]! } + public var GroupInfo_LeftStatus: String { return self._s[2106]! } + public var Watch_MessageView_Forward: String { return self._s[2108]! } + public var ReportPeer_ReasonChildAbuse: String { return self._s[2109]! } + public var Cache_ClearEmpty: String { return self._s[2111]! } + public var Localization_LanguageName: String { return self._s[2112]! } + public var WebSearch_GIFs: String { return self._s[2113]! } + public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2114]! } + public var Username_InvalidStartsWithNumber: String { return self._s[2115]! } + public var Common_Back: String { return self._s[2116]! } + public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2117]! } + public var Wallet_Send_Send: String { return self._s[2118]! } public func PUSH_CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2118]!, self._r[2118]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2119]!, self._r[2119]!, [_1, _2]) } - public var Wallet_Info_RefreshErrorTitle: String { return self._s[2119]! } - public var Passport_Email_Help: String { return self._s[2120]! } - public var Watch_Conversation_Reply: String { return self._s[2122]! } - public var Conversation_EditingMessageMediaChange: String { return self._s[2124]! } - public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2125]! } - public var Channel_BanUser_Unban: String { return self._s[2127]! } - public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2128]! } - public var Group_Username_CreatePublicLinkHelp: String { return self._s[2129]! } - public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2131]! } - public var Wallet_Send_AddressHeader: String { return self._s[2132]! } - public var Passport_Identity_Name: String { return self._s[2133]! } + public var Wallet_Info_RefreshErrorTitle: String { return self._s[2120]! } + public var Passport_Email_Help: String { return self._s[2121]! } + public var Watch_Conversation_Reply: String { return self._s[2123]! } + public var Conversation_EditingMessageMediaChange: String { return self._s[2125]! } + public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2126]! } + public var Channel_BanUser_Unban: String { return self._s[2128]! } + public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2129]! } + public var Group_Username_CreatePublicLinkHelp: String { return self._s[2130]! } + public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2132]! } + public var Wallet_Send_AddressHeader: String { return self._s[2133]! } + public var Passport_Identity_Name: String { return self._s[2134]! } public func Channel_DiscussionGroup_HeaderGroupSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2134]!, self._r[2134]!, [_0]) + return formatWithArgumentRanges(self._s[2135]!, self._r[2135]!, [_0]) } - public var GroupRemoved_ViewUserInfo: String { return self._s[2135]! } - public var Conversation_BlockUser: String { return self._s[2136]! } - public var Month_GenJanuary: String { return self._s[2137]! } - public var ChatSettings_TextSize: String { return self._s[2138]! } - public var Notification_PassportValuePhone: String { return self._s[2139]! } - public var Passport_Language_ne: String { return self._s[2140]! } - public var Notification_CallBack: String { return self._s[2141]! } - public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2142]! } - public var TwoStepAuth_EmailHelp: String { return self._s[2143]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[2136]! } + public var Conversation_BlockUser: String { return self._s[2137]! } + public var Month_GenJanuary: String { return self._s[2138]! } + public var ChatSettings_TextSize: String { return self._s[2139]! } + public var Notification_PassportValuePhone: String { return self._s[2140]! } + public var Passport_Language_ne: String { return self._s[2141]! } + public var Notification_CallBack: String { return self._s[2142]! } + public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2143]! } + public var TwoStepAuth_EmailHelp: String { return self._s[2144]! } public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2144]!, self._r[2144]!, [_0]) + return formatWithArgumentRanges(self._s[2145]!, self._r[2145]!, [_0]) } - public var Channel_Info_Management: String { return self._s[2145]! } - public var Passport_FieldIdentityUploadHelp: String { return self._s[2146]! } - public var Stickers_FrequentlyUsed: String { return self._s[2147]! } - public var Channel_BanUser_PermissionSendMessages: String { return self._s[2148]! } - public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2150]! } + public var Channel_Info_Management: String { return self._s[2146]! } + public var Passport_FieldIdentityUploadHelp: String { return self._s[2147]! } + public var Stickers_FrequentlyUsed: String { return self._s[2148]! } + public var Channel_BanUser_PermissionSendMessages: String { return self._s[2149]! } + public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2151]! } public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2151]!, self._r[2151]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[2152]!, self._r[2152]!, [_1, "\(_2)"]) } - public var Passport_Address_EditResidentialAddress: String { return self._s[2152]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[2153]! } - public var CreatePoll_TextHeader: String { return self._s[2154]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[2153]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[2154]! } + public var CreatePoll_TextHeader: String { return self._s[2155]! } public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2155]!, self._r[2155]!, [_0]) + return formatWithArgumentRanges(self._s[2156]!, self._r[2156]!, [_0]) } - public var PhotoEditor_QualityMedium: String { return self._s[2156]! } - public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2157]! } - public var Conversation_StatusKickedFromChannel: String { return self._s[2159]! } - public var CheckoutInfo_ReceiverInfoName: String { return self._s[2160]! } - public var Group_ErrorSendRestrictedStickers: String { return self._s[2161]! } + public var PhotoEditor_QualityMedium: String { return self._s[2157]! } + public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2158]! } + public var Conversation_StatusKickedFromChannel: String { return self._s[2160]! } + public var CheckoutInfo_ReceiverInfoName: String { return self._s[2161]! } + public var Group_ErrorSendRestrictedStickers: String { return self._s[2162]! } public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2162]!, self._r[2162]!, [_0]) + return formatWithArgumentRanges(self._s[2163]!, self._r[2163]!, [_0]) } public func Channel_AdminLog_MessageTransferedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2163]!, self._r[2163]!, [_1]) + return formatWithArgumentRanges(self._s[2164]!, self._r[2164]!, [_1]) } - public var Conversation_LinkDialogOpen: String { return self._s[2165]! } - public var VoiceOver_Chat_PollNoVotes: String { return self._s[2166]! } - public var Settings_Username: String { return self._s[2168]! } - public var Conversation_Block: String { return self._s[2170]! } - public var Wallpaper_Wallpaper: String { return self._s[2171]! } - public var SocksProxySetup_UseProxy: String { return self._s[2173]! } - public var Wallet_Send_Confirmation: String { return self._s[2174]! } - public var EditTheme_UploadEditedTheme: String { return self._s[2175]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[2176]! } - public var MessageTimer_Forever: String { return self._s[2177]! } - public var Privacy_Calls_WhoCanCallMe: String { return self._s[2178]! } - public var PhotoEditor_DiscardChanges: String { return self._s[2179]! } - public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2180]! } - public var Passport_Language_da: String { return self._s[2181]! } - public var SocksProxySetup_PortPlaceholder: String { return self._s[2182]! } + public var Conversation_LinkDialogOpen: String { return self._s[2166]! } + public var VoiceOver_Chat_PollNoVotes: String { return self._s[2167]! } + public var Settings_Username: String { return self._s[2169]! } + public var Conversation_Block: String { return self._s[2171]! } + public var Wallpaper_Wallpaper: String { return self._s[2172]! } + public var SocksProxySetup_UseProxy: String { return self._s[2174]! } + public var Wallet_Send_Confirmation: String { return self._s[2175]! } + public var EditTheme_UploadEditedTheme: String { return self._s[2176]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[2177]! } + public var MessageTimer_Forever: String { return self._s[2178]! } + public var Privacy_Calls_WhoCanCallMe: String { return self._s[2179]! } + public var PhotoEditor_DiscardChanges: String { return self._s[2180]! } + public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2181]! } + public var Passport_Language_da: String { return self._s[2182]! } + public var SocksProxySetup_PortPlaceholder: String { return self._s[2183]! } public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2183]!, self._r[2183]!, [_0]) + return formatWithArgumentRanges(self._s[2184]!, self._r[2184]!, [_0]) } - public var Passport_Address_EditPassportRegistration: String { return self._s[2184]! } + public var Passport_Address_EditPassportRegistration: String { return self._s[2185]! } public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2186]!, self._r[2186]!, [_0]) + return formatWithArgumentRanges(self._s[2187]!, self._r[2187]!, [_0]) } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2188]! } - public var Conversation_SearchByName_Prefix: String { return self._s[2189]! } - public var Conversation_PinnedPoll: String { return self._s[2190]! } - public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2191]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2189]! } + public var Conversation_SearchByName_Prefix: String { return self._s[2190]! } + public var Conversation_PinnedPoll: String { return self._s[2191]! } + public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2192]! } public func PUSH_ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2192]!, self._r[2192]!, [_1]) + return formatWithArgumentRanges(self._s[2193]!, self._r[2193]!, [_1]) } - public var WallpaperSearch_ColorPurple: String { return self._s[2193]! } - public var Cache_ByPeerHeader: String { return self._s[2194]! } + public var WallpaperSearch_ColorPurple: String { return self._s[2194]! } + public var Cache_ByPeerHeader: String { return self._s[2195]! } public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2195]!, self._r[2195]!, [_0]) + return formatWithArgumentRanges(self._s[2196]!, self._r[2196]!, [_0]) } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[2196]! } - public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2199]! } - public var Wallet_Completed_Title: String { return self._s[2200]! } - public var Notification_PinnedMessage: String { return self._s[2201]! } - public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2203]! } - public var Contacts_SortBy: String { return self._s[2204]! } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[2197]! } + public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2200]! } + public var Wallet_Completed_Title: String { return self._s[2201]! } + public var Notification_PinnedMessage: String { return self._s[2202]! } + public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2204]! } + public var Contacts_SortBy: String { return self._s[2205]! } public func PUSH_CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2205]!, self._r[2205]!, [_1]) + return formatWithArgumentRanges(self._s[2206]!, self._r[2206]!, [_1]) } public func PUSH_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2207]!, self._r[2207]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2208]!, self._r[2208]!, [_1, _2]) } - public var Call_EncryptionKey_Title: String { return self._s[2208]! } - public var Watch_UserInfo_Service: String { return self._s[2209]! } - public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2211]! } - public var Conversation_Unpin: String { return self._s[2213]! } - public var CancelResetAccount_Title: String { return self._s[2214]! } - public var Map_LiveLocationFor15Minutes: String { return self._s[2215]! } + public var Call_EncryptionKey_Title: String { return self._s[2209]! } + public var Watch_UserInfo_Service: String { return self._s[2210]! } + public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2212]! } + public var Conversation_Unpin: String { return self._s[2214]! } + public var CancelResetAccount_Title: String { return self._s[2215]! } + public var Map_LiveLocationFor15Minutes: String { return self._s[2216]! } public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2217]!, self._r[2217]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2218]!, self._r[2218]!, [_1, _2, _3]) } - public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2218]! } - public var CallSettings_Title: String { return self._s[2219]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2220]! } - public var PasscodeSettings_EncryptDataHelp: String { return self._s[2222]! } - public var AutoDownloadSettings_Contacts: String { return self._s[2223]! } + public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2219]! } + public var CallSettings_Title: String { return self._s[2220]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2221]! } + public var PasscodeSettings_EncryptDataHelp: String { return self._s[2223]! } + public var AutoDownloadSettings_Contacts: String { return self._s[2224]! } public func Channel_AdminLog_MessageRankName(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2224]!, self._r[2224]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2225]!, self._r[2225]!, [_1, _2]) } - public var Passport_Identity_DocumentDetails: String { return self._s[2225]! } - public var LoginPassword_PasswordHelp: String { return self._s[2226]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2227]! } - public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2228]! } - public var Checkout_TotalPaidAmount: String { return self._s[2229]! } + public var Passport_Identity_DocumentDetails: String { return self._s[2226]! } + public var LoginPassword_PasswordHelp: String { return self._s[2227]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2228]! } + public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2229]! } + public var Checkout_TotalPaidAmount: String { return self._s[2230]! } public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2230]!, self._r[2230]!, [_0]) + return formatWithArgumentRanges(self._s[2231]!, self._r[2231]!, [_0]) } - public var PasscodeSettings_ChangePasscode: String { return self._s[2231]! } - public var Conversation_SecretLinkPreviewAlert: String { return self._s[2233]! } - public var Privacy_SecretChatsLinkPreviews: String { return self._s[2234]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[2232]! } + public var Conversation_SecretLinkPreviewAlert: String { return self._s[2234]! } + public var Privacy_SecretChatsLinkPreviews: String { return self._s[2235]! } public func PUSH_CHANNEL_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2235]!, self._r[2235]!, [_1]) + return formatWithArgumentRanges(self._s[2236]!, self._r[2236]!, [_1]) } - public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2236]! } - public var Contacts_InviteFriends: String { return self._s[2238]! } - public var Map_ChooseLocationTitle: String { return self._s[2239]! } - public var Conversation_StopPoll: String { return self._s[2241]! } + public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2237]! } + public var Contacts_InviteFriends: String { return self._s[2239]! } + public var Map_ChooseLocationTitle: String { return self._s[2240]! } + public var Conversation_StopPoll: String { return self._s[2242]! } public func WebSearch_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2242]!, self._r[2242]!, [_0]) + return formatWithArgumentRanges(self._s[2243]!, self._r[2243]!, [_0]) } - public var Call_Camera: String { return self._s[2243]! } - public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2244]! } - public var Calls_RatingFeedback: String { return self._s[2245]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2246]! } - public var NotificationsSound_Pulse: String { return self._s[2247]! } - public var Watch_LastSeen_Lately: String { return self._s[2248]! } - public var ReportGroupLocation_Report: String { return self._s[2251]! } - public var Widget_NoUsers: String { return self._s[2252]! } - public var Conversation_UnvotePoll: String { return self._s[2253]! } - public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2255]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2256]! } - public var NotificationsSound_Circles: String { return self._s[2257]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2260]! } - public var Wallet_Settings_DeleteWallet: String { return self._s[2261]! } - public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2262]! } - public var Proxy_TooltipUnavailable: String { return self._s[2263]! } - public var Passport_Identity_CountryPlaceholder: String { return self._s[2265]! } - public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2267]! } - public var Conversation_FileDropbox: String { return self._s[2268]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[2269]! } - public var Tour_Text3: String { return self._s[2271]! } - public var Login_ResetAccountProtected_Title: String { return self._s[2273]! } - public var GroupPermission_NoSendMessages: String { return self._s[2274]! } - public var WallpaperSearch_ColorTitle: String { return self._s[2275]! } - public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2276]! } + public var Call_Camera: String { return self._s[2244]! } + public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2245]! } + public var Calls_RatingFeedback: String { return self._s[2246]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2247]! } + public var NotificationsSound_Pulse: String { return self._s[2248]! } + public var Watch_LastSeen_Lately: String { return self._s[2249]! } + public var ReportGroupLocation_Report: String { return self._s[2252]! } + public var Widget_NoUsers: String { return self._s[2253]! } + public var Conversation_UnvotePoll: String { return self._s[2254]! } + public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2256]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2257]! } + public var NotificationsSound_Circles: String { return self._s[2258]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2261]! } + public var Wallet_Settings_DeleteWallet: String { return self._s[2262]! } + public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2263]! } + public var Proxy_TooltipUnavailable: String { return self._s[2264]! } + public var Passport_Identity_CountryPlaceholder: String { return self._s[2266]! } + public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2268]! } + public var Conversation_FileDropbox: String { return self._s[2269]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[2270]! } + public var Tour_Text3: String { return self._s[2272]! } + public var Login_ResetAccountProtected_Title: String { return self._s[2274]! } + public var GroupPermission_NoSendMessages: String { return self._s[2275]! } + public var WallpaperSearch_ColorTitle: String { return self._s[2276]! } + public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2277]! } public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2278]!, self._r[2278]!, [_0]) + return formatWithArgumentRanges(self._s[2279]!, self._r[2279]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[2279]! } - public var Checkout_ShippingOption_Title: String { return self._s[2280]! } - public var ChatSettings_AutoDownloadTitle: String { return self._s[2281]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[2280]! } + public var Checkout_ShippingOption_Title: String { return self._s[2281]! } + public var ChatSettings_AutoDownloadTitle: String { return self._s[2282]! } public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2282]!, self._r[2282]!, [_0]) - } - public func ChatSettings_AutoDownloadSettings_TypeVideo(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2283]!, self._r[2283]!, [_0]) } - public var Channel_Management_LabelAdministrator: String { return self._s[2284]! } - public var EditTheme_FileReadError: String { return self._s[2285]! } - public var OwnershipTransfer_ComeBackLater: String { return self._s[2286]! } - public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2287]! } - public var AutoDownloadSettings_Photos: String { return self._s[2289]! } - public var Appearance_PreviewIncomingText: String { return self._s[2290]! } - public var ChatList_Context_MarkAllAsRead: String { return self._s[2291]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[2292]! } - public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2293]! } - public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2294]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2295]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2296]! } - public var GroupInfo_SetGroupPhotoStop: String { return self._s[2297]! } - public var Notification_SecretChatScreenshot: String { return self._s[2298]! } - public var AccessDenied_Wallpapers: String { return self._s[2299]! } - public var ChatList_Context_Mute: String { return self._s[2301]! } - public var Passport_Address_City: String { return self._s[2302]! } - public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2303]! } - public var Appearance_ThemeCarouselClassic: String { return self._s[2304]! } - public var SocksProxySetup_SecretPlaceholder: String { return self._s[2305]! } - public var AccessDenied_LocationDisabled: String { return self._s[2306]! } - public var Group_Location_Title: String { return self._s[2307]! } - public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2309]! } - public var GroupInfo_Sound: String { return self._s[2310]! } - public var ChannelInfo_ScamChannelWarning: String { return self._s[2311]! } - public var Stickers_RemoveFromFavorites: String { return self._s[2312]! } - public var Contacts_Title: String { return self._s[2313]! } - public var EditTheme_ThemeTemplateAlertText: String { return self._s[2314]! } - public var Passport_Language_fr: String { return self._s[2315]! } - public var Notifications_ResetAllNotifications: String { return self._s[2316]! } - public var PrivacySettings_SecurityTitle: String { return self._s[2319]! } - public var Checkout_NewCard_Title: String { return self._s[2320]! } - public var Login_HaveNotReceivedCodeInternal: String { return self._s[2321]! } - public var Conversation_ForwardChats: String { return self._s[2322]! } - public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2324]! } - public var PasscodeSettings_4DigitCode: String { return self._s[2325]! } - public var Settings_FAQ: String { return self._s[2327]! } - public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2328]! } - public var Conversation_ContextMenuForward: String { return self._s[2329]! } - public var VoiceOver_Chat_YourPhoto: String { return self._s[2332]! } - public var PrivacyPolicy_Title: String { return self._s[2335]! } - public var Notifications_TextTone: String { return self._s[2336]! } - public var Profile_CreateNewContact: String { return self._s[2337]! } - public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2338]! } - public var Call_Speaker: String { return self._s[2340]! } - public var AutoNightTheme_AutomaticSection: String { return self._s[2341]! } - public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2343]! } - public var Channel_Username_InvalidCharacters: String { return self._s[2344]! } + public func ChatSettings_AutoDownloadSettings_TypeVideo(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2284]!, self._r[2284]!, [_0]) + } + public var Channel_Management_LabelAdministrator: String { return self._s[2285]! } + public var EditTheme_FileReadError: String { return self._s[2286]! } + public var OwnershipTransfer_ComeBackLater: String { return self._s[2287]! } + public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2288]! } + public var AutoDownloadSettings_Photos: String { return self._s[2290]! } + public var Appearance_PreviewIncomingText: String { return self._s[2291]! } + public var ChatList_Context_MarkAllAsRead: String { return self._s[2292]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[2293]! } + public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2294]! } + public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2295]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2296]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2297]! } + public var GroupInfo_SetGroupPhotoStop: String { return self._s[2298]! } + public var Notification_SecretChatScreenshot: String { return self._s[2299]! } + public var AccessDenied_Wallpapers: String { return self._s[2300]! } + public var ChatList_Context_Mute: String { return self._s[2302]! } + public var Passport_Address_City: String { return self._s[2303]! } + public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2304]! } + public var Appearance_ThemeCarouselClassic: String { return self._s[2305]! } + public var SocksProxySetup_SecretPlaceholder: String { return self._s[2306]! } + public var AccessDenied_LocationDisabled: String { return self._s[2307]! } + public var Group_Location_Title: String { return self._s[2308]! } + public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2310]! } + public var GroupInfo_Sound: String { return self._s[2311]! } + public var ChannelInfo_ScamChannelWarning: String { return self._s[2312]! } + public var Stickers_RemoveFromFavorites: String { return self._s[2313]! } + public var Contacts_Title: String { return self._s[2314]! } + public var EditTheme_ThemeTemplateAlertText: String { return self._s[2315]! } + public var Passport_Language_fr: String { return self._s[2316]! } + public var Notifications_ResetAllNotifications: String { return self._s[2317]! } + public var PrivacySettings_SecurityTitle: String { return self._s[2320]! } + public var Checkout_NewCard_Title: String { return self._s[2321]! } + public var Login_HaveNotReceivedCodeInternal: String { return self._s[2322]! } + public var Conversation_ForwardChats: String { return self._s[2323]! } + public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2325]! } + public var PasscodeSettings_4DigitCode: String { return self._s[2326]! } + public var Settings_FAQ: String { return self._s[2328]! } + public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2329]! } + public var Conversation_ContextMenuForward: String { return self._s[2330]! } + public var VoiceOver_Chat_YourPhoto: String { return self._s[2333]! } + public var PrivacyPolicy_Title: String { return self._s[2336]! } + public var Notifications_TextTone: String { return self._s[2337]! } + public var Profile_CreateNewContact: String { return self._s[2338]! } + public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2339]! } + public var Call_Speaker: String { return self._s[2341]! } + public var AutoNightTheme_AutomaticSection: String { return self._s[2342]! } + public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2344]! } + public var Channel_Username_InvalidCharacters: String { return self._s[2345]! } public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2345]!, self._r[2345]!, [_0]) + return formatWithArgumentRanges(self._s[2346]!, self._r[2346]!, [_0]) } - public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2346]! } - public var PrivacySettings_LastSeenTitle: String { return self._s[2347]! } - public var Channel_AdminLog_CanInviteUsers: String { return self._s[2348]! } - public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2349]! } - public var OwnershipTransfer_SecurityCheck: String { return self._s[2350]! } - public var Conversation_MessageDeliveryFailed: String { return self._s[2351]! } - public var Watch_ChatList_NoConversationsText: String { return self._s[2352]! } - public var Bot_Unblock: String { return self._s[2353]! } - public var TextFormat_Italic: String { return self._s[2354]! } - public var WallpaperSearch_ColorPink: String { return self._s[2355]! } - public var Settings_About_Help: String { return self._s[2356]! } - public var SearchImages_Title: String { return self._s[2357]! } - public var Weekday_Wednesday: String { return self._s[2358]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[2359]! } - public var ExplicitContent_AlertTitle: String { return self._s[2360]! } + public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2347]! } + public var PrivacySettings_LastSeenTitle: String { return self._s[2348]! } + public var Channel_AdminLog_CanInviteUsers: String { return self._s[2349]! } + public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2350]! } + public var OwnershipTransfer_SecurityCheck: String { return self._s[2351]! } + public var Conversation_MessageDeliveryFailed: String { return self._s[2352]! } + public var Watch_ChatList_NoConversationsText: String { return self._s[2353]! } + public var Bot_Unblock: String { return self._s[2354]! } + public var TextFormat_Italic: String { return self._s[2355]! } + public var WallpaperSearch_ColorPink: String { return self._s[2356]! } + public var Settings_About_Help: String { return self._s[2357]! } + public var SearchImages_Title: String { return self._s[2358]! } + public var Weekday_Wednesday: String { return self._s[2359]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[2360]! } + public var ExplicitContent_AlertTitle: String { return self._s[2361]! } public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2361]!, self._r[2361]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2362]!, self._r[2362]!, [_1, _2, _3]) } - public var Channel_DiscussionGroup_Create: String { return self._s[2362]! } - public var Weekday_Thursday: String { return self._s[2363]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2364]! } - public var Channel_Members_AddMembersHelp: String { return self._s[2365]! } + public var Channel_DiscussionGroup_Create: String { return self._s[2363]! } + public var Weekday_Thursday: String { return self._s[2364]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2365]! } + public var Channel_Members_AddMembersHelp: String { return self._s[2366]! } public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2366]!, self._r[2366]!, [_0]) + return formatWithArgumentRanges(self._s[2367]!, self._r[2367]!, [_0]) } - public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2367]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2368]! } - public var Passport_RequestedInformation: String { return self._s[2369]! } - public var Login_PhoneAndCountryHelp: String { return self._s[2370]! } - public var Conversation_EncryptionProcessing: String { return self._s[2372]! } - public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2373]! } - public var PhotoEditor_EnhanceTool: String { return self._s[2375]! } - public var Channel_Setup_Title: String { return self._s[2376]! } - public var Conversation_SearchPlaceholder: String { return self._s[2377]! } - public var AccessDenied_LocationAlwaysDenied: String { return self._s[2378]! } - public var Checkout_ErrorGeneric: String { return self._s[2379]! } - public var Passport_Language_hu: String { return self._s[2380]! } + public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2368]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2369]! } + public var Passport_RequestedInformation: String { return self._s[2370]! } + public var Login_PhoneAndCountryHelp: String { return self._s[2371]! } + public var Conversation_EncryptionProcessing: String { return self._s[2373]! } + public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2374]! } + public var PhotoEditor_EnhanceTool: String { return self._s[2376]! } + public var Channel_Setup_Title: String { return self._s[2377]! } + public var Conversation_SearchPlaceholder: String { return self._s[2378]! } + public var AccessDenied_LocationAlwaysDenied: String { return self._s[2379]! } + public var Checkout_ErrorGeneric: String { return self._s[2380]! } + public var Passport_Language_hu: String { return self._s[2381]! } public func Passport_Identity_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2382]!, self._r[2382]!, [_0]) + return formatWithArgumentRanges(self._s[2383]!, self._r[2383]!, [_0]) } public func PUSH_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2385]!, self._r[2385]!, [_1]) + return formatWithArgumentRanges(self._s[2386]!, self._r[2386]!, [_1]) } public func UserInfo_BlockConfirmationTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2386]!, self._r[2386]!, [_0]) + return formatWithArgumentRanges(self._s[2387]!, self._r[2387]!, [_0]) } - public var Group_Location_Info: String { return self._s[2387]! } - public var Conversation_CloudStorageInfo_Title: String { return self._s[2388]! } - public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2389]! } - public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2390]! } + public var Group_Location_Info: String { return self._s[2388]! } + public var Conversation_CloudStorageInfo_Title: String { return self._s[2389]! } + public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2390]! } + public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2391]! } public func Notification_Exceptions_MutedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2391]!, self._r[2391]!, [_0]) + return formatWithArgumentRanges(self._s[2392]!, self._r[2392]!, [_0]) } - public var Conversation_ClearPrivateHistory: String { return self._s[2392]! } - public var ContactInfo_PhoneLabelHome: String { return self._s[2393]! } - public var Appearance_RemoveThemeConfirmation: String { return self._s[2394]! } - public var PrivacySettings_LastSeenContacts: String { return self._s[2395]! } + public var Conversation_ClearPrivateHistory: String { return self._s[2393]! } + public var ContactInfo_PhoneLabelHome: String { return self._s[2394]! } + public var Appearance_RemoveThemeConfirmation: String { return self._s[2395]! } + public var PrivacySettings_LastSeenContacts: String { return self._s[2396]! } public func ChangePhone_ErrorOccupied(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2396]!, self._r[2396]!, [_0]) + return formatWithArgumentRanges(self._s[2397]!, self._r[2397]!, [_0]) } - public var Passport_Language_cs: String { return self._s[2397]! } - public var Message_PinnedAnimationMessage: String { return self._s[2399]! } - public var Passport_Identity_ReverseSideHelp: String { return self._s[2401]! } - public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2402]! } - public var Wallet_Info_TransactionTo: String { return self._s[2404]! } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2405]! } - public var Embed_PlayingInPIP: String { return self._s[2406]! } - public var AutoNightTheme_ScheduleSection: String { return self._s[2407]! } + public var Passport_Language_cs: String { return self._s[2398]! } + public var Message_PinnedAnimationMessage: String { return self._s[2400]! } + public var Passport_Identity_ReverseSideHelp: String { return self._s[2402]! } + public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2403]! } + public var Wallet_Info_TransactionTo: String { return self._s[2405]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2406]! } + public var Embed_PlayingInPIP: String { return self._s[2407]! } + public var AutoNightTheme_ScheduleSection: String { return self._s[2408]! } public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2408]!, self._r[2408]!, [_0]) + return formatWithArgumentRanges(self._s[2409]!, self._r[2409]!, [_0]) } - public var MediaPicker_LivePhotoDescription: String { return self._s[2409]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[2410]! } public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2410]!, self._r[2410]!, [_1]) + return formatWithArgumentRanges(self._s[2411]!, self._r[2411]!, [_1]) } - public var Notification_PaymentSent: String { return self._s[2411]! } - public var PhotoEditor_CurvesGreen: String { return self._s[2412]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2413]! } - public var SaveIncomingPhotosSettings_Title: String { return self._s[2414]! } - public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2415]! } - public var VoiceOver_Chat_PagePreview: String { return self._s[2416]! } + public var Notification_PaymentSent: String { return self._s[2412]! } + public var PhotoEditor_CurvesGreen: String { return self._s[2413]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2414]! } + public var SaveIncomingPhotosSettings_Title: String { return self._s[2415]! } + public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2416]! } + public var VoiceOver_Chat_PagePreview: String { return self._s[2417]! } public func PUSH_MESSAGE_SCREENSHOT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2419]!, self._r[2419]!, [_1]) - } - public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2420]!, self._r[2420]!, [_1]) } - public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { + public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2421]!, self._r[2421]!, [_1]) } - public var NetworkUsageSettings_CallDataSection: String { return self._s[2423]! } - public var PasscodeSettings_HelpTop: String { return self._s[2424]! } - public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2425]! } - public var Passport_Address_TypeRentalAgreement: String { return self._s[2426]! } - public var EditTheme_ShortLink: String { return self._s[2427]! } - public var ProxyServer_VoiceOver_Active: String { return self._s[2428]! } - public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2429]! } - public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2430]! } - public var Call_Accept: String { return self._s[2432]! } - public var GroupRemoved_RemoveInfo: String { return self._s[2433]! } - public var Month_GenMarch: String { return self._s[2435]! } - public var PhotoEditor_ShadowsTool: String { return self._s[2436]! } - public var LoginPassword_Title: String { return self._s[2437]! } - public var Call_End: String { return self._s[2438]! } - public var Watch_Conversation_GroupInfo: String { return self._s[2439]! } - public var VoiceOver_Chat_Contact: String { return self._s[2440]! } - public var EditTheme_Create_Preview_IncomingText: String { return self._s[2441]! } - public var CallSettings_Always: String { return self._s[2442]! } - public var CallFeedback_Success: String { return self._s[2443]! } - public var TwoStepAuth_SetupHint: String { return self._s[2444]! } + public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2422]!, self._r[2422]!, [_1]) + } + public var NetworkUsageSettings_CallDataSection: String { return self._s[2424]! } + public var PasscodeSettings_HelpTop: String { return self._s[2425]! } + public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2426]! } + public var Passport_Address_TypeRentalAgreement: String { return self._s[2427]! } + public var EditTheme_ShortLink: String { return self._s[2428]! } + public var ProxyServer_VoiceOver_Active: String { return self._s[2429]! } + public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2430]! } + public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2431]! } + public var Call_Accept: String { return self._s[2433]! } + public var GroupRemoved_RemoveInfo: String { return self._s[2434]! } + public var Month_GenMarch: String { return self._s[2436]! } + public var PhotoEditor_ShadowsTool: String { return self._s[2437]! } + public var LoginPassword_Title: String { return self._s[2438]! } + public var Call_End: String { return self._s[2439]! } + public var Watch_Conversation_GroupInfo: String { return self._s[2440]! } + public var VoiceOver_Chat_Contact: String { return self._s[2441]! } + public var EditTheme_Create_Preview_IncomingText: String { return self._s[2442]! } + public var CallSettings_Always: String { return self._s[2443]! } + public var CallFeedback_Success: String { return self._s[2444]! } + public var TwoStepAuth_SetupHint: String { return self._s[2445]! } public func AddContact_ContactWillBeSharedAfterMutual(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2445]!, self._r[2445]!, [_1]) + return formatWithArgumentRanges(self._s[2446]!, self._r[2446]!, [_1]) } - public var ConversationProfile_UsersTooMuchError: String { return self._s[2446]! } - public var Login_PhoneTitle: String { return self._s[2447]! } - public var Passport_FieldPhoneHelp: String { return self._s[2448]! } - public var Weekday_ShortSunday: String { return self._s[2449]! } - public var Passport_InfoFAQ_URL: String { return self._s[2450]! } - public var ContactInfo_Job: String { return self._s[2452]! } - public var UserInfo_InviteBotToGroup: String { return self._s[2453]! } - public var Appearance_ThemeCarouselNightBlue: String { return self._s[2454]! } - public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2455]! } - public var Invite_ChannelsTooMuch: String { return self._s[2456]! } - public var Wallet_Send_ConfirmationConfirm: String { return self._s[2457]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2458]! } - public var Wallet_Receive_AmountText: String { return self._s[2459]! } - public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2460]! } - public var CallFeedback_ReasonNoise: String { return self._s[2461]! } - public var Appearance_AppIconDefault: String { return self._s[2463]! } - public var Passport_Identity_AddInternalPassport: String { return self._s[2464]! } - public var MediaPicker_AddCaption: String { return self._s[2465]! } - public var CallSettings_TabIconDescription: String { return self._s[2466]! } + public var ConversationProfile_UsersTooMuchError: String { return self._s[2447]! } + public var Login_PhoneTitle: String { return self._s[2448]! } + public var Passport_FieldPhoneHelp: String { return self._s[2449]! } + public var Weekday_ShortSunday: String { return self._s[2450]! } + public var Passport_InfoFAQ_URL: String { return self._s[2451]! } + public var ContactInfo_Job: String { return self._s[2453]! } + public var UserInfo_InviteBotToGroup: String { return self._s[2454]! } + public var Appearance_ThemeCarouselNightBlue: String { return self._s[2455]! } + public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2456]! } + public var Invite_ChannelsTooMuch: String { return self._s[2457]! } + public var Wallet_Send_ConfirmationConfirm: String { return self._s[2458]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2459]! } + public var Wallet_Receive_AmountText: String { return self._s[2460]! } + public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2461]! } + public var CallFeedback_ReasonNoise: String { return self._s[2462]! } + public var Appearance_AppIconDefault: String { return self._s[2464]! } + public var Passport_Identity_AddInternalPassport: String { return self._s[2465]! } + public var MediaPicker_AddCaption: String { return self._s[2466]! } + public var CallSettings_TabIconDescription: String { return self._s[2467]! } public func VoiceOver_Chat_Caption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2467]!, self._r[2467]!, [_0]) + return formatWithArgumentRanges(self._s[2468]!, self._r[2468]!, [_0]) } - public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2468]! } - public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2469]! } - public var Passport_Identity_TypePersonalDetails: String { return self._s[2470]! } - public var DialogList_SearchSectionRecent: String { return self._s[2471]! } - public var PrivacyPolicy_DeclineMessage: String { return self._s[2472]! } - public var LogoutOptions_ClearCacheText: String { return self._s[2475]! } - public var LastSeen_WithinAWeek: String { return self._s[2476]! } - public var ChannelMembers_GroupAdminsTitle: String { return self._s[2477]! } - public var Conversation_CloudStorage_ChatStatus: String { return self._s[2479]! } - public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[2480]! } + public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2469]! } + public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2470]! } + public var Passport_Identity_TypePersonalDetails: String { return self._s[2471]! } + public var DialogList_SearchSectionRecent: String { return self._s[2472]! } + public var PrivacyPolicy_DeclineMessage: String { return self._s[2473]! } + public var LogoutOptions_ClearCacheText: String { return self._s[2476]! } + public var LastSeen_WithinAWeek: String { return self._s[2477]! } + public var ChannelMembers_GroupAdminsTitle: String { return self._s[2478]! } + public var Conversation_CloudStorage_ChatStatus: String { return self._s[2480]! } + public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[2481]! } public func AddContact_SharedContactExceptionInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2481]!, self._r[2481]!, [_0]) + return formatWithArgumentRanges(self._s[2482]!, self._r[2482]!, [_0]) } - public var Passport_Address_TypeResidentialAddress: String { return self._s[2482]! } - public var Conversation_StatusLeftGroup: String { return self._s[2483]! } - public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2484]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2486]! } - public var GroupPermission_AddSuccess: String { return self._s[2487]! } - public var PhotoEditor_BlurToolRadial: String { return self._s[2489]! } - public var Conversation_ContextMenuCopy: String { return self._s[2490]! } - public var AccessDenied_CallMicrophone: String { return self._s[2491]! } + public var Passport_Address_TypeResidentialAddress: String { return self._s[2483]! } + public var Conversation_StatusLeftGroup: String { return self._s[2484]! } + public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2485]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2487]! } + public var GroupPermission_AddSuccess: String { return self._s[2488]! } + public var PhotoEditor_BlurToolRadial: String { return self._s[2490]! } + public var Conversation_ContextMenuCopy: String { return self._s[2491]! } + public var AccessDenied_CallMicrophone: String { return self._s[2492]! } public func Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2492]!, self._r[2492]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2493]!, self._r[2493]!, [_1, _2, _3]) } - public var Login_InvalidFirstNameError: String { return self._s[2493]! } - public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2494]! } - public var Checkout_PaymentMethod_New: String { return self._s[2495]! } - public var ShareMenu_CopyShareLinkGame: String { return self._s[2496]! } - public var PhotoEditor_QualityTool: String { return self._s[2497]! } - public var Login_SendCodeViaSms: String { return self._s[2498]! } - public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2499]! } - public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[2500]! } - public var Wallet_Receive_CopyAddress: String { return self._s[2501]! } - public var Login_EmailNotConfiguredError: String { return self._s[2502]! } - public var SocksProxySetup_Status: String { return self._s[2503]! } - public var PrivacyPolicy_Accept: String { return self._s[2504]! } - public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2505]! } - public var Appearance_AppIconClassicX: String { return self._s[2506]! } + public var Login_InvalidFirstNameError: String { return self._s[2494]! } + public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2495]! } + public var Checkout_PaymentMethod_New: String { return self._s[2496]! } + public var ShareMenu_CopyShareLinkGame: String { return self._s[2497]! } + public var PhotoEditor_QualityTool: String { return self._s[2498]! } + public var Login_SendCodeViaSms: String { return self._s[2499]! } + public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2500]! } + public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[2501]! } + public var Wallet_Receive_CopyAddress: String { return self._s[2502]! } + public var Login_EmailNotConfiguredError: String { return self._s[2503]! } + public var SocksProxySetup_Status: String { return self._s[2504]! } + public var PrivacyPolicy_Accept: String { return self._s[2505]! } + public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2506]! } + public var Appearance_AppIconClassicX: String { return self._s[2507]! } public func PUSH_CHAT_MESSAGE_TEXT(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2507]!, self._r[2507]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2508]!, self._r[2508]!, [_1, _2, _3]) } - public var OwnershipTransfer_SecurityRequirements: String { return self._s[2508]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2509]! } - public var AutoNightTheme_Automatic: String { return self._s[2510]! } - public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2511]! } - public var Privacy_ContactsSyncHelp: String { return self._s[2512]! } - public var Cache_Help: String { return self._s[2513]! } - public var Group_ErrorAccessDenied: String { return self._s[2514]! } - public var Passport_Language_fa: String { return self._s[2515]! } - public var Wallet_Intro_Text: String { return self._s[2516]! } - public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2517]! } - public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2518]! } - public var PrivacySettings_LastSeen: String { return self._s[2519]! } + public var OwnershipTransfer_SecurityRequirements: String { return self._s[2509]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2510]! } + public var AutoNightTheme_Automatic: String { return self._s[2511]! } + public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2512]! } + public var Privacy_ContactsSyncHelp: String { return self._s[2513]! } + public var Cache_Help: String { return self._s[2514]! } + public var Group_ErrorAccessDenied: String { return self._s[2515]! } + public var Passport_Language_fa: String { return self._s[2516]! } + public var Wallet_Intro_Text: String { return self._s[2517]! } + public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2518]! } + public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2519]! } + public var PrivacySettings_LastSeen: String { return self._s[2520]! } public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2520]!, self._r[2520]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2521]!, self._r[2521]!, [_0, _1]) } - public var Preview_SaveGif: String { return self._s[2524]! } - public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2525]! } - public var Profile_About: String { return self._s[2526]! } - public var Channel_About_Placeholder: String { return self._s[2527]! } - public var Login_InfoTitle: String { return self._s[2528]! } + public var Preview_SaveGif: String { return self._s[2525]! } + public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2526]! } + public var Profile_About: String { return self._s[2527]! } + public var Channel_About_Placeholder: String { return self._s[2528]! } + public var Login_InfoTitle: String { return self._s[2529]! } public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2529]!, self._r[2529]!, [_0]) + return formatWithArgumentRanges(self._s[2530]!, self._r[2530]!, [_0]) } - public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[2530]! } - public var Watch_Suggestion_CantTalk: String { return self._s[2532]! } - public var ContactInfo_Title: String { return self._s[2533]! } - public var Media_ShareThisVideo: String { return self._s[2534]! } - public var Weekday_ShortFriday: String { return self._s[2535]! } - public var AccessDenied_Contacts: String { return self._s[2537]! } - public var Notification_CallIncomingShort: String { return self._s[2538]! } - public var Group_Setup_TypePublic: String { return self._s[2539]! } - public var Notifications_MessageNotificationsExceptions: String { return self._s[2540]! } - public var Notifications_Badge_IncludeChannels: String { return self._s[2541]! } - public var Notifications_MessageNotificationsPreview: String { return self._s[2544]! } - public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2545]! } - public var Group_ErrorAddTooMuchBots: String { return self._s[2546]! } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2547]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2548]! } + public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[2531]! } + public var Watch_Suggestion_CantTalk: String { return self._s[2533]! } + public var ContactInfo_Title: String { return self._s[2534]! } + public var Media_ShareThisVideo: String { return self._s[2535]! } + public var Weekday_ShortFriday: String { return self._s[2536]! } + public var AccessDenied_Contacts: String { return self._s[2538]! } + public var Notification_CallIncomingShort: String { return self._s[2539]! } + public var Group_Setup_TypePublic: String { return self._s[2540]! } + public var Notifications_MessageNotificationsExceptions: String { return self._s[2541]! } + public var Notifications_Badge_IncludeChannels: String { return self._s[2542]! } + public var Notifications_MessageNotificationsPreview: String { return self._s[2545]! } + public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2546]! } + public var Group_ErrorAddTooMuchBots: String { return self._s[2547]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2548]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2549]! } public func Wallet_SecureStorageChanged_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2549]!, self._r[2549]!, [_0]) + return formatWithArgumentRanges(self._s[2550]!, self._r[2550]!, [_0]) } - public var DialogList_Typing: String { return self._s[2550]! } - public var CallFeedback_IncludeLogs: String { return self._s[2552]! } - public var Checkout_Phone: String { return self._s[2554]! } - public var Login_InfoFirstNamePlaceholder: String { return self._s[2557]! } - public var Privacy_Calls_Integration: String { return self._s[2558]! } - public var Notifications_PermissionsAllow: String { return self._s[2559]! } - public var TwoStepAuth_AddHintDescription: String { return self._s[2563]! } - public var Settings_ChatSettings: String { return self._s[2564]! } + public var DialogList_Typing: String { return self._s[2551]! } + public var CallFeedback_IncludeLogs: String { return self._s[2553]! } + public var Checkout_Phone: String { return self._s[2555]! } + public var Login_InfoFirstNamePlaceholder: String { return self._s[2558]! } + public var Privacy_Calls_Integration: String { return self._s[2559]! } + public var Notifications_PermissionsAllow: String { return self._s[2560]! } + public var TwoStepAuth_AddHintDescription: String { return self._s[2564]! } + public var Settings_ChatSettings: String { return self._s[2565]! } public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2565]!, self._r[2565]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2566]!, self._r[2566]!, [_1, _2]) } - public var GroupRemoved_DeleteUser: String { return self._s[2567]! } + public var GroupRemoved_DeleteUser: String { return self._s[2568]! } public func Channel_AdminLog_PollStopped(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2568]!, self._r[2568]!, [_0]) + return formatWithArgumentRanges(self._s[2569]!, self._r[2569]!, [_0]) } public func PUSH_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2569]!, self._r[2569]!, [_1]) + return formatWithArgumentRanges(self._s[2570]!, self._r[2570]!, [_1]) } - public var Login_ContinueWithLocalization: String { return self._s[2570]! } - public var Watch_Message_ForwardedFrom: String { return self._s[2571]! } - public var TwoStepAuth_EnterEmailCode: String { return self._s[2573]! } - public var Conversation_Unblock: String { return self._s[2574]! } - public var PrivacySettings_DataSettings: String { return self._s[2575]! } - public var Group_PublicLink_Info: String { return self._s[2576]! } - public var Notifications_InAppNotificationsVibrate: String { return self._s[2577]! } + public var Login_ContinueWithLocalization: String { return self._s[2571]! } + public var Watch_Message_ForwardedFrom: String { return self._s[2572]! } + public var TwoStepAuth_EnterEmailCode: String { return self._s[2574]! } + public var Conversation_Unblock: String { return self._s[2575]! } + public var PrivacySettings_DataSettings: String { return self._s[2576]! } + public var Group_PublicLink_Info: String { return self._s[2577]! } + public var Notifications_InAppNotificationsVibrate: String { return self._s[2578]! } public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2578]!, self._r[2578]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2579]!, self._r[2579]!, [_0, _1]) } - public var Wallet_RestoreFailed_CreateWallet: String { return self._s[2580]! } - public var PrivacySettings_Passcode: String { return self._s[2582]! } - public var Call_Mute: String { return self._s[2583]! } - public var Passport_Language_dz: String { return self._s[2584]! } - public var Wallet_Receive_AmountHeader: String { return self._s[2585]! } - public var Passport_Language_tk: String { return self._s[2586]! } + public var Wallet_RestoreFailed_CreateWallet: String { return self._s[2581]! } + public var PrivacySettings_Passcode: String { return self._s[2583]! } + public var Call_Mute: String { return self._s[2584]! } + public var Passport_Language_dz: String { return self._s[2585]! } + public var Wallet_Receive_AmountHeader: String { return self._s[2586]! } + public var Passport_Language_tk: String { return self._s[2587]! } public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2587]!, self._r[2587]!, [_0]) + return formatWithArgumentRanges(self._s[2588]!, self._r[2588]!, [_0]) } - public var Settings_Search: String { return self._s[2588]! } - public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2589]! } - public var Conversation_ContextMenuReply: String { return self._s[2590]! } - public var WallpaperSearch_ColorBrown: String { return self._s[2591]! } - public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2592]! } - public var Tour_Title1: String { return self._s[2593]! } - public var Conversation_ClearGroupHistory: String { return self._s[2595]! } - public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[2596]! } - public var WallpaperPreview_Motion: String { return self._s[2597]! } + public var Settings_Search: String { return self._s[2589]! } + public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2590]! } + public var Conversation_ContextMenuReply: String { return self._s[2591]! } + public var WallpaperSearch_ColorBrown: String { return self._s[2592]! } + public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2593]! } + public var Tour_Title1: String { return self._s[2594]! } + public var Conversation_ClearGroupHistory: String { return self._s[2596]! } + public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[2597]! } + public var WallpaperPreview_Motion: String { return self._s[2598]! } public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2598]!, self._r[2598]!, [_0]) + return formatWithArgumentRanges(self._s[2599]!, self._r[2599]!, [_0]) } - public var Call_RateCall: String { return self._s[2599]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2600]! } - public var Passport_PasswordCompleteSetup: String { return self._s[2601]! } - public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2602]! } - public var UserInfo_LastNamePlaceholder: String { return self._s[2604]! } + public var Call_RateCall: String { return self._s[2600]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2601]! } + public var Passport_PasswordCompleteSetup: String { return self._s[2602]! } + public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2603]! } + public var UserInfo_LastNamePlaceholder: String { return self._s[2605]! } public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2606]!, self._r[2606]!, [_0]) + return formatWithArgumentRanges(self._s[2607]!, self._r[2607]!, [_0]) } - public var Compose_Create: String { return self._s[2607]! } - public var Contacts_InviteToTelegram: String { return self._s[2608]! } - public var GroupInfo_Notifications: String { return self._s[2609]! } - public var Message_PinnedLiveLocationMessage: String { return self._s[2611]! } - public var Month_GenApril: String { return self._s[2612]! } - public var Appearance_AutoNightTheme: String { return self._s[2613]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[2615]! } - public var Login_CodeSentSms: String { return self._s[2617]! } + public var Compose_Create: String { return self._s[2608]! } + public var Contacts_InviteToTelegram: String { return self._s[2609]! } + public var GroupInfo_Notifications: String { return self._s[2610]! } + public var Message_PinnedLiveLocationMessage: String { return self._s[2612]! } + public var Month_GenApril: String { return self._s[2613]! } + public var Appearance_AutoNightTheme: String { return self._s[2614]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[2616]! } + public var Login_CodeSentSms: String { return self._s[2618]! } public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2618]!, self._r[2618]!, [_0]) + return formatWithArgumentRanges(self._s[2619]!, self._r[2619]!, [_0]) } - public var EmptyGroupInfo_Line3: String { return self._s[2619]! } - public var LogoutOptions_ContactSupportText: String { return self._s[2620]! } - public var Passport_Language_hr: String { return self._s[2621]! } - public var Common_ActionNotAllowedError: String { return self._s[2622]! } + public var EmptyGroupInfo_Line3: String { return self._s[2620]! } + public var LogoutOptions_ContactSupportText: String { return self._s[2621]! } + public var Passport_Language_hr: String { return self._s[2622]! } + public var Common_ActionNotAllowedError: String { return self._s[2623]! } public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2623]!, self._r[2623]!, [_0]) + return formatWithArgumentRanges(self._s[2624]!, self._r[2624]!, [_0]) } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[2624]! } - public var Wallet_Info_TransactionFrom: String { return self._s[2625]! } - public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[2626]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2627]! } - public var Privacy_SecretChatsTitle: String { return self._s[2628]! } - public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2630]! } - public var GroupInfo_AddUserLeftError: String { return self._s[2631]! } - public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2632]! } - public var LogoutOptions_ContactSupportTitle: String { return self._s[2633]! } - public var Channel_AddBotErrorHaveRights: String { return self._s[2634]! } - public var Preview_DeleteGif: String { return self._s[2635]! } - public var GroupInfo_Permissions_Exceptions: String { return self._s[2636]! } - public var Group_ErrorNotMutualContact: String { return self._s[2637]! } - public var Notification_MessageLifetime5s: String { return self._s[2638]! } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[2625]! } + public var Wallet_Info_TransactionFrom: String { return self._s[2626]! } + public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[2627]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2628]! } + public var Privacy_SecretChatsTitle: String { return self._s[2629]! } + public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2631]! } + public var GroupInfo_AddUserLeftError: String { return self._s[2632]! } + public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2633]! } + public var LogoutOptions_ContactSupportTitle: String { return self._s[2634]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[2635]! } + public var Preview_DeleteGif: String { return self._s[2636]! } + public var GroupInfo_Permissions_Exceptions: String { return self._s[2637]! } + public var Group_ErrorNotMutualContact: String { return self._s[2638]! } + public var Notification_MessageLifetime5s: String { return self._s[2639]! } public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2639]!, self._r[2639]!, [_0]) + return formatWithArgumentRanges(self._s[2640]!, self._r[2640]!, [_0]) } - public var VoiceOver_Chat_Video: String { return self._s[2640]! } - public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2642]! } - public var ReportSpam_DeleteThisChat: String { return self._s[2643]! } - public var Passport_Address_AddBankStatement: String { return self._s[2644]! } - public var Notification_CallIncoming: String { return self._s[2645]! } - public var Wallet_Words_NotDoneTitle: String { return self._s[2646]! } - public var Compose_NewGroupTitle: String { return self._s[2647]! } - public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2649]! } - public var Passport_Address_Postcode: String { return self._s[2651]! } + public var VoiceOver_Chat_Video: String { return self._s[2641]! } + public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2643]! } + public var ReportSpam_DeleteThisChat: String { return self._s[2644]! } + public var Passport_Address_AddBankStatement: String { return self._s[2645]! } + public var Notification_CallIncoming: String { return self._s[2646]! } + public var Wallet_Words_NotDoneTitle: String { return self._s[2647]! } + public var Compose_NewGroupTitle: String { return self._s[2648]! } + public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2650]! } + public var Passport_Address_Postcode: String { return self._s[2652]! } public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2652]!, self._r[2652]!, [_0]) + return formatWithArgumentRanges(self._s[2653]!, self._r[2653]!, [_0]) } - public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2653]! } - public var VoiceOver_Chat_YourMusic: String { return self._s[2654]! } - public var WallpaperColors_Title: String { return self._s[2655]! } - public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2656]! } - public var VoiceOver_MessageContextForward: String { return self._s[2657]! } - public var GroupPermission_Duration: String { return self._s[2658]! } + public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2654]! } + public var VoiceOver_Chat_YourMusic: String { return self._s[2655]! } + public var WallpaperColors_Title: String { return self._s[2656]! } + public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2657]! } + public var VoiceOver_MessageContextForward: String { return self._s[2658]! } + public var GroupPermission_Duration: String { return self._s[2659]! } public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2659]!, self._r[2659]!, [_0]) + return formatWithArgumentRanges(self._s[2660]!, self._r[2660]!, [_0]) } - public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2660]! } - public var Username_Placeholder: String { return self._s[2661]! } - public var CallFeedback_WhatWentWrong: String { return self._s[2662]! } - public var Passport_FieldAddressUploadHelp: String { return self._s[2663]! } - public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2664]! } + public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2661]! } + public var Username_Placeholder: String { return self._s[2662]! } + public var CallFeedback_WhatWentWrong: String { return self._s[2663]! } + public var Passport_FieldAddressUploadHelp: String { return self._s[2664]! } + public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2665]! } public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2666]!, self._r[2666]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2667]!, self._r[2667]!, [_1, _2]) } - public var Passport_PasswordDescription: String { return self._s[2667]! } - public var Channel_MessagePhotoUpdated: String { return self._s[2668]! } - public var MediaPicker_TapToUngroupDescription: String { return self._s[2669]! } - public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2670]! } - public var AttachmentMenu_PhotoOrVideo: String { return self._s[2671]! } - public var Conversation_ContextMenuMore: String { return self._s[2672]! } - public var Privacy_PaymentsClearInfo: String { return self._s[2673]! } - public var CallSettings_TabIcon: String { return self._s[2674]! } - public var KeyCommand_Find: String { return self._s[2675]! } - public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[2676]! } - public var EditTheme_Edit_Preview_IncomingText: String { return self._s[2677]! } - public var Message_PinnedGame: String { return self._s[2678]! } - public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[2679]! } - public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2681]! } - public var Login_CallRequestState2: String { return self._s[2683]! } - public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2685]! } + public var Passport_PasswordDescription: String { return self._s[2668]! } + public var Channel_MessagePhotoUpdated: String { return self._s[2669]! } + public var MediaPicker_TapToUngroupDescription: String { return self._s[2670]! } + public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2671]! } + public var AttachmentMenu_PhotoOrVideo: String { return self._s[2672]! } + public var Conversation_ContextMenuMore: String { return self._s[2673]! } + public var Privacy_PaymentsClearInfo: String { return self._s[2674]! } + public var CallSettings_TabIcon: String { return self._s[2675]! } + public var KeyCommand_Find: String { return self._s[2676]! } + public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[2677]! } + public var EditTheme_Edit_Preview_IncomingText: String { return self._s[2678]! } + public var Message_PinnedGame: String { return self._s[2679]! } + public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[2680]! } + public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2682]! } + public var Login_CallRequestState2: String { return self._s[2684]! } + public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2686]! } public func VoiceOver_Chat_PhotoFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2686]!, self._r[2686]!, [_0]) + return formatWithArgumentRanges(self._s[2687]!, self._r[2687]!, [_0]) } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2688]!, self._r[2688]!, [_0]) + return formatWithArgumentRanges(self._s[2689]!, self._r[2689]!, [_0]) } - public var WallpaperPreview_Blurred: String { return self._s[2689]! } - public var Conversation_InstantPagePreview: String { return self._s[2690]! } + public var WallpaperPreview_Blurred: String { return self._s[2690]! } + public var Conversation_InstantPagePreview: String { return self._s[2691]! } public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2691]!, self._r[2691]!, [_0]) + return formatWithArgumentRanges(self._s[2692]!, self._r[2692]!, [_0]) } - public var SecretTimer_VideoDescription: String { return self._s[2694]! } - public var WallpaperSearch_ColorRed: String { return self._s[2695]! } - public var GroupPermission_NoPinMessages: String { return self._s[2696]! } - public var Passport_Language_es: String { return self._s[2697]! } - public var Permissions_ContactsAllow_v0: String { return self._s[2699]! } - public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2700]! } + public var SecretTimer_VideoDescription: String { return self._s[2695]! } + public var WallpaperSearch_ColorRed: String { return self._s[2696]! } + public var GroupPermission_NoPinMessages: String { return self._s[2697]! } + public var Passport_Language_es: String { return self._s[2698]! } + public var Permissions_ContactsAllow_v0: String { return self._s[2700]! } + public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2701]! } public func PUSH_CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2701]!, self._r[2701]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2702]!, self._r[2702]!, [_1, _2]) } - public var Privacy_Forwards_CustomHelp: String { return self._s[2702]! } - public var WebPreview_GettingLinkInfo: String { return self._s[2703]! } - public var Watch_UserInfo_Unmute: String { return self._s[2704]! } - public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2705]! } - public var AccessDenied_CameraRestricted: String { return self._s[2707]! } + public var Privacy_Forwards_CustomHelp: String { return self._s[2703]! } + public var WebPreview_GettingLinkInfo: String { return self._s[2704]! } + public var Watch_UserInfo_Unmute: String { return self._s[2705]! } + public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2706]! } + public var AccessDenied_CameraRestricted: String { return self._s[2708]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2708]!, self._r[2708]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2709]!, self._r[2709]!, ["\(_0)"]) } - public var ChatList_ReadAll: String { return self._s[2710]! } - public var Settings_CopyUsername: String { return self._s[2711]! } - public var Contacts_SearchLabel: String { return self._s[2712]! } - public var Map_OpenInYandexNavigator: String { return self._s[2714]! } - public var PasscodeSettings_EncryptData: String { return self._s[2715]! } - public var WallpaperSearch_ColorPrefix: String { return self._s[2716]! } - public var Notifications_GroupNotificationsPreview: String { return self._s[2717]! } - public var DialogList_AdNoticeAlert: String { return self._s[2718]! } - public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2720]! } - public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2721]! } - public var Localization_LanguageCustom: String { return self._s[2722]! } - public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2723]! } - public var CallFeedback_Title: String { return self._s[2724]! } - public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[2727]! } - public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2728]! } - public var Wallet_Intro_CreateErrorTitle: String { return self._s[2729]! } - public var Conversation_InfoGroup: String { return self._s[2730]! } - public var Compose_NewMessage: String { return self._s[2731]! } - public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2732]! } - public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2733]! } - public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[2734]! } - public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2735]! } + public var ChatList_ReadAll: String { return self._s[2711]! } + public var Settings_CopyUsername: String { return self._s[2712]! } + public var Contacts_SearchLabel: String { return self._s[2713]! } + public var Map_OpenInYandexNavigator: String { return self._s[2715]! } + public var PasscodeSettings_EncryptData: String { return self._s[2716]! } + public var WallpaperSearch_ColorPrefix: String { return self._s[2717]! } + public var Notifications_GroupNotificationsPreview: String { return self._s[2718]! } + public var DialogList_AdNoticeAlert: String { return self._s[2719]! } + public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2721]! } + public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2722]! } + public var Localization_LanguageCustom: String { return self._s[2723]! } + public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2724]! } + public var CallFeedback_Title: String { return self._s[2725]! } + public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[2728]! } + public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2729]! } + public var Wallet_Intro_CreateErrorTitle: String { return self._s[2730]! } + public var Conversation_InfoGroup: String { return self._s[2731]! } + public var Compose_NewMessage: String { return self._s[2732]! } + public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2733]! } + public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2734]! } + public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[2735]! } + public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2736]! } public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2736]!, self._r[2736]!, [_0]) + return formatWithArgumentRanges(self._s[2737]!, self._r[2737]!, [_0]) } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2737]! } - public var Login_CancelSignUpConfirmation: String { return self._s[2738]! } - public var ChangePhoneNumberCode_Help: String { return self._s[2739]! } - public var PrivacySettings_DeleteAccountHelp: String { return self._s[2740]! } - public var Channel_BlackList_Title: String { return self._s[2741]! } - public var UserInfo_PhoneCall: String { return self._s[2742]! } - public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2744]! } - public var State_connecting: String { return self._s[2745]! } - public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[2746]! } - public var EditTheme_Expand_BottomInfo: String { return self._s[2747]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2738]! } + public var Login_CancelSignUpConfirmation: String { return self._s[2739]! } + public var ChangePhoneNumberCode_Help: String { return self._s[2740]! } + public var PrivacySettings_DeleteAccountHelp: String { return self._s[2741]! } + public var Channel_BlackList_Title: String { return self._s[2742]! } + public var UserInfo_PhoneCall: String { return self._s[2743]! } + public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2745]! } + public var State_connecting: String { return self._s[2746]! } + public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[2747]! } + public var EditTheme_Expand_BottomInfo: String { return self._s[2748]! } public func LastSeen_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2748]!, self._r[2748]!, [_0]) - } - public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2749]!, self._r[2749]!, [_0]) } - public var Notifications_GroupNotifications: String { return self._s[2750]! } - public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[2751]! } - public var Passport_Identity_EditPassport: String { return self._s[2752]! } - public var EnterPasscode_RepeatNewPasscode: String { return self._s[2754]! } - public var Localization_EnglishLanguageName: String { return self._s[2755]! } - public var Share_AuthDescription: String { return self._s[2756]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2757]! } - public var Passport_Identity_Surname: String { return self._s[2758]! } - public var Compose_TokenListPlaceholder: String { return self._s[2759]! } - public var Passport_Identity_OneOfTypePassport: String { return self._s[2760]! } - public var Settings_AboutEmpty: String { return self._s[2761]! } - public var Conversation_Unmute: String { return self._s[2762]! } - public var CreateGroup_ChannelsTooMuch: String { return self._s[2764]! } - public var Wallet_Sending_Text: String { return self._s[2765]! } - public func PUSH_CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2766]!, self._r[2766]!, [_1]) + public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2750]!, self._r[2750]!, [_0]) } - public var Login_CodeSentCall: String { return self._s[2767]! } - public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2769]! } - public var ChatSettings_Appearance: String { return self._s[2770]! } - public var Appearance_PickAccentColor: String { return self._s[2771]! } + public var Notifications_GroupNotifications: String { return self._s[2751]! } + public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[2752]! } + public var Passport_Identity_EditPassport: String { return self._s[2753]! } + public var EnterPasscode_RepeatNewPasscode: String { return self._s[2755]! } + public var Localization_EnglishLanguageName: String { return self._s[2756]! } + public var Share_AuthDescription: String { return self._s[2757]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2758]! } + public var Passport_Identity_Surname: String { return self._s[2759]! } + public var Compose_TokenListPlaceholder: String { return self._s[2760]! } + public var Passport_Identity_OneOfTypePassport: String { return self._s[2761]! } + public var Settings_AboutEmpty: String { return self._s[2762]! } + public var Conversation_Unmute: String { return self._s[2763]! } + public var CreateGroup_ChannelsTooMuch: String { return self._s[2765]! } + public var Wallet_Sending_Text: String { return self._s[2766]! } + public func PUSH_CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2767]!, self._r[2767]!, [_1]) + } + public var Login_CodeSentCall: String { return self._s[2768]! } + public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2770]! } + public var ChatSettings_Appearance: String { return self._s[2771]! } + public var Appearance_PickAccentColor: String { return self._s[2772]! } public func PUSH_CHAT_MESSAGE_NOTEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2772]!, self._r[2772]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2773]!, self._r[2773]!, [_1, _2]) } public func PUSH_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2773]!, self._r[2773]!, [_1]) + return formatWithArgumentRanges(self._s[2774]!, self._r[2774]!, [_1]) } - public var Notification_CallMissed: String { return self._s[2774]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2775]! } - public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2776]! } - public var ChatAdmins_AdminLabel: String { return self._s[2778]! } - public var KeyCommand_JumpToNextChat: String { return self._s[2779]! } - public var Conversation_StopPollConfirmationTitle: String { return self._s[2781]! } - public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2782]! } - public var Month_GenJune: String { return self._s[2783]! } - public var Watch_Location_Current: String { return self._s[2784]! } - public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[2785]! } - public var Conversation_TitleMute: String { return self._s[2786]! } + public var Notification_CallMissed: String { return self._s[2775]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2776]! } + public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2777]! } + public var ChatAdmins_AdminLabel: String { return self._s[2779]! } + public var KeyCommand_JumpToNextChat: String { return self._s[2780]! } + public var Conversation_StopPollConfirmationTitle: String { return self._s[2782]! } + public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2783]! } + public var Month_GenJune: String { return self._s[2784]! } + public var Watch_Location_Current: String { return self._s[2785]! } + public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[2786]! } + public var Conversation_TitleMute: String { return self._s[2787]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2787]!, self._r[2787]!, [_1]) + return formatWithArgumentRanges(self._s[2788]!, self._r[2788]!, [_1]) } - public var GroupInfo_DeleteAndExit: String { return self._s[2788]! } + public var GroupInfo_DeleteAndExit: String { return self._s[2789]! } public func Conversation_Moderate_DeleteAllMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2789]!, self._r[2789]!, [_0]) + return formatWithArgumentRanges(self._s[2790]!, self._r[2790]!, [_0]) } - public var Call_ReportPlaceholder: String { return self._s[2790]! } - public var Chat_SlowmodeSendError: String { return self._s[2791]! } - public var MaskStickerSettings_Info: String { return self._s[2792]! } - public var EditTheme_Expand_TopInfo: String { return self._s[2793]! } + public var Call_ReportPlaceholder: String { return self._s[2791]! } + public var Chat_SlowmodeSendError: String { return self._s[2792]! } + public var MaskStickerSettings_Info: String { return self._s[2793]! } + public var EditTheme_Expand_TopInfo: String { return self._s[2794]! } public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2794]!, self._r[2794]!, [_0]) + return formatWithArgumentRanges(self._s[2795]!, self._r[2795]!, [_0]) } - public var Checkout_NewCard_PostcodeTitle: String { return self._s[2795]! } - public var Passport_Address_RegionPlaceholder: String { return self._s[2797]! } - public var Contacts_ShareTelegram: String { return self._s[2798]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2799]! } - public var Channel_ErrorAccessDenied: String { return self._s[2800]! } - public var UserInfo_ScamBotWarning: String { return self._s[2802]! } - public var Stickers_GroupChooseStickerPack: String { return self._s[2803]! } - public var Call_ConnectionErrorTitle: String { return self._s[2804]! } - public var UserInfo_NotificationsEnable: String { return self._s[2805]! } - public var ArchivedChats_IntroText1: String { return self._s[2806]! } - public var Tour_Text4: String { return self._s[2809]! } - public var WallpaperSearch_Recent: String { return self._s[2810]! } - public var GroupInfo_ScamGroupWarning: String { return self._s[2811]! } - public var Profile_MessageLifetime2s: String { return self._s[2813]! } - public var Appearance_ThemePreview_ChatList_5_Text: String { return self._s[2814]! } - public var Notification_MessageLifetime2s: String { return self._s[2815]! } + public var Checkout_NewCard_PostcodeTitle: String { return self._s[2796]! } + public var Passport_Address_RegionPlaceholder: String { return self._s[2798]! } + public var Contacts_ShareTelegram: String { return self._s[2799]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2800]! } + public var Channel_ErrorAccessDenied: String { return self._s[2801]! } + public var UserInfo_ScamBotWarning: String { return self._s[2803]! } + public var Stickers_GroupChooseStickerPack: String { return self._s[2804]! } + public var Call_ConnectionErrorTitle: String { return self._s[2805]! } + public var UserInfo_NotificationsEnable: String { return self._s[2806]! } + public var ArchivedChats_IntroText1: String { return self._s[2807]! } + public var Tour_Text4: String { return self._s[2810]! } + public var WallpaperSearch_Recent: String { return self._s[2811]! } + public var GroupInfo_ScamGroupWarning: String { return self._s[2812]! } + public var Profile_MessageLifetime2s: String { return self._s[2814]! } + public var Appearance_ThemePreview_ChatList_5_Text: String { return self._s[2815]! } + public var Notification_MessageLifetime2s: String { return self._s[2816]! } public func Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2816]!, self._r[2816]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2817]!, self._r[2817]!, [_1, _2, _3]) } - public var Cache_ClearCache: String { return self._s[2817]! } - public var AutoNightTheme_UpdateLocation: String { return self._s[2818]! } - public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2819]! } + public var Cache_ClearCache: String { return self._s[2818]! } + public var AutoNightTheme_UpdateLocation: String { return self._s[2819]! } + public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2820]! } public func Channel_AdminLog_MessageChangedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2824]!, self._r[2824]!, [_0]) + return formatWithArgumentRanges(self._s[2825]!, self._r[2825]!, [_0]) } public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2826]!, self._r[2826]!, [_0]) + return formatWithArgumentRanges(self._s[2827]!, self._r[2827]!, [_0]) } - public var LocalGroup_Text: String { return self._s[2827]! } - public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2828]! } - public var SocksProxySetup_TypeSocks: String { return self._s[2829]! } - public var ChatList_UnarchiveAction: String { return self._s[2830]! } - public var AutoNightTheme_Title: String { return self._s[2831]! } - public var InstantPage_FeedbackButton: String { return self._s[2832]! } - public var Passport_FieldAddress: String { return self._s[2833]! } + public var LocalGroup_Text: String { return self._s[2828]! } + public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2829]! } + public var SocksProxySetup_TypeSocks: String { return self._s[2830]! } + public var ChatList_UnarchiveAction: String { return self._s[2831]! } + public var AutoNightTheme_Title: String { return self._s[2832]! } + public var InstantPage_FeedbackButton: String { return self._s[2833]! } + public var Passport_FieldAddress: String { return self._s[2834]! } public func Channel_AdminLog_SetSlowmode(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2834]!, self._r[2834]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2835]!, self._r[2835]!, [_1, _2]) } - public var Month_ShortMarch: String { return self._s[2835]! } + public var Month_ShortMarch: String { return self._s[2836]! } public func PUSH_MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2836]!, self._r[2836]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2837]!, self._r[2837]!, [_1, _2]) } - public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2837]! } - public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2838]! } - public var Passport_FloodError: String { return self._s[2839]! } - public var SecretGif_Title: String { return self._s[2840]! } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2841]! } - public var ChatList_Context_UnhideArchive: String { return self._s[2842]! } - public var Passport_Language_th: String { return self._s[2844]! } - public var Passport_Address_Address: String { return self._s[2845]! } - public var Login_InvalidLastNameError: String { return self._s[2846]! } - public var Notifications_InAppNotificationsPreview: String { return self._s[2847]! } - public var Notifications_PermissionsUnreachableTitle: String { return self._s[2848]! } - public var ChatList_Context_Archive: String { return self._s[2849]! } - public var SettingsSearch_FAQ: String { return self._s[2850]! } - public var ShareMenu_Send: String { return self._s[2851]! } - public var WallpaperSearch_ColorYellow: String { return self._s[2853]! } - public var Month_GenNovember: String { return self._s[2855]! } - public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2857]! } + public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2838]! } + public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2839]! } + public var Passport_FloodError: String { return self._s[2840]! } + public var SecretGif_Title: String { return self._s[2841]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2842]! } + public var ChatList_Context_UnhideArchive: String { return self._s[2843]! } + public var Passport_Language_th: String { return self._s[2845]! } + public var Passport_Address_Address: String { return self._s[2846]! } + public var Login_InvalidLastNameError: String { return self._s[2847]! } + public var Notifications_InAppNotificationsPreview: String { return self._s[2848]! } + public var Notifications_PermissionsUnreachableTitle: String { return self._s[2849]! } + public var ChatList_Context_Archive: String { return self._s[2850]! } + public var SettingsSearch_FAQ: String { return self._s[2851]! } + public var ShareMenu_Send: String { return self._s[2852]! } + public var WallpaperSearch_ColorYellow: String { return self._s[2854]! } + public var Month_GenNovember: String { return self._s[2856]! } + public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2858]! } public func Conversation_ShareMyPhoneNumberConfirmation(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2858]!, self._r[2858]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2859]!, self._r[2859]!, [_1, _2]) } - public var Checkout_Email: String { return self._s[2860]! } - public var NotificationsSound_Tritone: String { return self._s[2861]! } - public var StickerPacksSettings_ManagingHelp: String { return self._s[2863]! } + public var Checkout_Email: String { return self._s[2861]! } + public var NotificationsSound_Tritone: String { return self._s[2862]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[2864]! } public func PUSH_PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2866]!, self._r[2866]!, [_1]) + return formatWithArgumentRanges(self._s[2867]!, self._r[2867]!, [_1]) } - public var ChangePhoneNumberNumber_Help: String { return self._s[2867]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[2868]! } public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2868]!, self._r[2868]!, [_1, _1, _1, _2]) + return formatWithArgumentRanges(self._s[2869]!, self._r[2869]!, [_1, _1, _1, _2]) } - public var ChatList_UndoArchiveTitle: String { return self._s[2869]! } - public var Notification_Exceptions_Add: String { return self._s[2870]! } - public var DialogList_You: String { return self._s[2871]! } - public var MediaPicker_Send: String { return self._s[2874]! } - public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2875]! } - public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[2876]! } - public var Call_AudioRouteSpeaker: String { return self._s[2877]! } - public var Watch_UserInfo_Title: String { return self._s[2878]! } - public var VoiceOver_Chat_PollFinalResults: String { return self._s[2879]! } - public var Appearance_AccentColor: String { return self._s[2880]! } + public var ChatList_UndoArchiveTitle: String { return self._s[2870]! } + public var Notification_Exceptions_Add: String { return self._s[2871]! } + public var DialogList_You: String { return self._s[2872]! } + public var MediaPicker_Send: String { return self._s[2875]! } + public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2876]! } + public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[2877]! } + public var Call_AudioRouteSpeaker: String { return self._s[2878]! } + public var Watch_UserInfo_Title: String { return self._s[2879]! } + public var VoiceOver_Chat_PollFinalResults: String { return self._s[2880]! } + public var Appearance_AccentColor: String { return self._s[2881]! } public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2881]!, self._r[2881]!, [_0]) + return formatWithArgumentRanges(self._s[2882]!, self._r[2882]!, [_0]) } - public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2882]! } + public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2883]! } public func PUSH_CHANNEL_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2883]!, self._r[2883]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2884]!, self._r[2884]!, [_1, _2]) } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[2884]! } - public var WebSearch_RecentClearConfirmation: String { return self._s[2885]! } - public var Notification_CallOutgoing: String { return self._s[2886]! } - public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2887]! } - public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[2888]! } - public var Call_RecordingDisabledMessage: String { return self._s[2889]! } - public var Message_Game: String { return self._s[2890]! } - public var Conversation_PressVolumeButtonForSound: String { return self._s[2891]! } - public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2892]! } - public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[2893]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2894]! } - public var Date_DialogDateFormat: String { return self._s[2895]! } - public var WallpaperColors_SetCustomColor: String { return self._s[2896]! } - public var Notifications_InAppNotifications: String { return self._s[2897]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[2885]! } + public var WebSearch_RecentClearConfirmation: String { return self._s[2886]! } + public var Notification_CallOutgoing: String { return self._s[2887]! } + public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2888]! } + public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[2889]! } + public var Call_RecordingDisabledMessage: String { return self._s[2890]! } + public var Message_Game: String { return self._s[2891]! } + public var Conversation_PressVolumeButtonForSound: String { return self._s[2892]! } + public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2893]! } + public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[2894]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2895]! } + public var Date_DialogDateFormat: String { return self._s[2896]! } + public var WallpaperColors_SetCustomColor: String { return self._s[2897]! } + public var Notifications_InAppNotifications: String { return self._s[2898]! } public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2898]!, self._r[2898]!, [_0]) + return formatWithArgumentRanges(self._s[2899]!, self._r[2899]!, [_0]) } public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2899]!, self._r[2899]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2900]!, self._r[2900]!, [_1, _2]) } - public var NewContact_Title: String { return self._s[2900]! } + public var NewContact_Title: String { return self._s[2901]! } public func AutoDownloadSettings_UpToForAll(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2901]!, self._r[2901]!, [_0]) + return formatWithArgumentRanges(self._s[2902]!, self._r[2902]!, [_0]) } - public var Conversation_ViewContactDetails: String { return self._s[2902]! } + public var Conversation_ViewContactDetails: String { return self._s[2903]! } public func PUSH_CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2904]!, self._r[2904]!, [_1]) + return formatWithArgumentRanges(self._s[2905]!, self._r[2905]!, [_1]) } - public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2905]! } - public var Passport_Identity_ExpiryDateNone: String { return self._s[2906]! } - public var PrivacySettings_Title: String { return self._s[2907]! } - public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2910]! } - public var GroupRemoved_UsersSectionTitle: String { return self._s[2911]! } - public var VoiceOver_Chat_ContactEmail: String { return self._s[2912]! } - public var Contacts_PhoneNumber: String { return self._s[2913]! } - public var Map_ShowPlaces: String { return self._s[2915]! } - public var ChatAdmins_Title: String { return self._s[2916]! } - public var InstantPage_Reference: String { return self._s[2918]! } - public var Wallet_Info_Updating: String { return self._s[2919]! } - public var ReportGroupLocation_Text: String { return self._s[2920]! } + public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2906]! } + public var Passport_Identity_ExpiryDateNone: String { return self._s[2907]! } + public var PrivacySettings_Title: String { return self._s[2908]! } + public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2911]! } + public var GroupRemoved_UsersSectionTitle: String { return self._s[2912]! } + public var VoiceOver_Chat_ContactEmail: String { return self._s[2913]! } + public var Contacts_PhoneNumber: String { return self._s[2914]! } + public var Map_ShowPlaces: String { return self._s[2916]! } + public var ChatAdmins_Title: String { return self._s[2917]! } + public var InstantPage_Reference: String { return self._s[2919]! } + public var Wallet_Info_Updating: String { return self._s[2920]! } + public var ReportGroupLocation_Text: String { return self._s[2921]! } public func PUSH_CHAT_MESSAGE_FWD(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2921]!, self._r[2921]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2922]!, self._r[2922]!, [_1, _2]) } - public var Camera_FlashOff: String { return self._s[2922]! } - public var Wallet_Intro_TermsUrl: String { return self._s[2923]! } - public var Watch_UserInfo_Block: String { return self._s[2924]! } - public var ChatSettings_Stickers: String { return self._s[2925]! } - public var ChatSettings_DownloadInBackground: String { return self._s[2926]! } - public var Appearance_ThemeCarouselTintedNight: String { return self._s[2927]! } + public var Camera_FlashOff: String { return self._s[2923]! } + public var Wallet_Intro_TermsUrl: String { return self._s[2924]! } + public var Watch_UserInfo_Block: String { return self._s[2925]! } + public var ChatSettings_Stickers: String { return self._s[2926]! } + public var ChatSettings_DownloadInBackground: String { return self._s[2927]! } + public var Appearance_ThemeCarouselTintedNight: String { return self._s[2928]! } public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2928]!, self._r[2928]!, [_0]) + return formatWithArgumentRanges(self._s[2929]!, self._r[2929]!, [_0]) } - public var Settings_ViewPhoto: String { return self._s[2929]! } - public var Login_CheckOtherSessionMessages: String { return self._s[2930]! } - public var AutoDownloadSettings_Cellular: String { return self._s[2931]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[2932]! } - public var VoiceOver_MessageContextShare: String { return self._s[2933]! } + public var Settings_ViewPhoto: String { return self._s[2930]! } + public var Login_CheckOtherSessionMessages: String { return self._s[2931]! } + public var AutoDownloadSettings_Cellular: String { return self._s[2932]! } + public var Wallet_Created_ExportErrorTitle: String { return self._s[2933]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[2934]! } + public var VoiceOver_MessageContextShare: String { return self._s[2935]! } public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2935]!, self._r[2935]!, [_0]) + return formatWithArgumentRanges(self._s[2937]!, self._r[2937]!, [_0]) } - public var Privacy_DeleteDrafts: String { return self._s[2936]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[2937]! } + public var Privacy_DeleteDrafts: String { return self._s[2938]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[2939]! } public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2938]!, self._r[2938]!, [_0]) + return formatWithArgumentRanges(self._s[2940]!, self._r[2940]!, [_0]) } - public var DialogList_SavedMessagesHelp: String { return self._s[2939]! } - public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[2940]! } - public var DialogList_SavedMessages: String { return self._s[2941]! } - public var GroupInfo_UpgradeButton: String { return self._s[2942]! } - public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[2944]! } - public var DialogList_Pin: String { return self._s[2945]! } + public var DialogList_SavedMessagesHelp: String { return self._s[2941]! } + public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[2942]! } + public var DialogList_SavedMessages: String { return self._s[2943]! } + public var GroupInfo_UpgradeButton: String { return self._s[2944]! } + public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[2946]! } + public var DialogList_Pin: String { return self._s[2947]! } public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2946]!, self._r[2946]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2948]!, self._r[2948]!, [_0, _1]) } public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2947]!, self._r[2947]!, [_0]) + return formatWithArgumentRanges(self._s[2949]!, self._r[2949]!, [_0]) } - public var Notification_Exceptions_AlwaysOn: String { return self._s[2948]! } - public var UserInfo_NotificationsDisable: String { return self._s[2949]! } - public var Paint_Outlined: String { return self._s[2950]! } - public var Activity_PlayingGame: String { return self._s[2951]! } - public var SearchImages_NoImagesFound: String { return self._s[2952]! } - public var SocksProxySetup_ProxyType: String { return self._s[2953]! } - public var AppleWatch_ReplyPresetsHelp: String { return self._s[2955]! } - public var Conversation_ContextMenuCancelSending: String { return self._s[2956]! } - public var Settings_AppLanguage: String { return self._s[2957]! } - public var TwoStepAuth_ResetAccountHelp: String { return self._s[2958]! } - public var Common_ChoosePhoto: String { return self._s[2959]! } - public var CallFeedback_ReasonEcho: String { return self._s[2960]! } + public var Notification_Exceptions_AlwaysOn: String { return self._s[2950]! } + public var UserInfo_NotificationsDisable: String { return self._s[2951]! } + public var Paint_Outlined: String { return self._s[2952]! } + public var Activity_PlayingGame: String { return self._s[2953]! } + public var SearchImages_NoImagesFound: String { return self._s[2954]! } + public var SocksProxySetup_ProxyType: String { return self._s[2955]! } + public var AppleWatch_ReplyPresetsHelp: String { return self._s[2957]! } + public var Conversation_ContextMenuCancelSending: String { return self._s[2958]! } + public var Settings_AppLanguage: String { return self._s[2959]! } + public var TwoStepAuth_ResetAccountHelp: String { return self._s[2960]! } + public var Common_ChoosePhoto: String { return self._s[2961]! } + public var CallFeedback_ReasonEcho: String { return self._s[2962]! } public func PUSH_PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2961]!, self._r[2961]!, [_1]) + return formatWithArgumentRanges(self._s[2963]!, self._r[2963]!, [_1]) } - public var Privacy_Calls_AlwaysAllow: String { return self._s[2962]! } - public var Activity_UploadingVideo: String { return self._s[2963]! } - public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2964]! } - public var NetworkUsageSettings_Wifi: String { return self._s[2965]! } - public var VoiceOver_Editing_ClearText: String { return self._s[2966]! } - public var PUSH_SENDER_YOU: String { return self._s[2967]! } - public var Channel_BanUser_PermissionReadMessages: String { return self._s[2968]! } - public var Checkout_PayWithTouchId: String { return self._s[2969]! } - public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2970]! } + public var Privacy_Calls_AlwaysAllow: String { return self._s[2964]! } + public var Activity_UploadingVideo: String { return self._s[2965]! } + public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2966]! } + public var NetworkUsageSettings_Wifi: String { return self._s[2967]! } + public var VoiceOver_Editing_ClearText: String { return self._s[2968]! } + public var PUSH_SENDER_YOU: String { return self._s[2969]! } + public var Channel_BanUser_PermissionReadMessages: String { return self._s[2970]! } + public var Checkout_PayWithTouchId: String { return self._s[2971]! } + public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2972]! } public func PUSH_LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2972]!, self._r[2972]!, [_1]) + return formatWithArgumentRanges(self._s[2974]!, self._r[2974]!, [_1]) } - public var Notifications_ExceptionsNone: String { return self._s[2973]! } + public var Notifications_ExceptionsNone: String { return self._s[2975]! } public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2974]!, self._r[2974]!, [_0]) + return formatWithArgumentRanges(self._s[2976]!, self._r[2976]!, [_0]) } public func PUSH_PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2975]!, self._r[2975]!, [_1]) + return formatWithArgumentRanges(self._s[2977]!, self._r[2977]!, [_1]) } - public var AuthSessions_IncompleteAttempts: String { return self._s[2977]! } - public var Passport_Address_Region: String { return self._s[2980]! } - public var ChatList_DeleteChat: String { return self._s[2981]! } - public var LogoutOptions_ClearCacheTitle: String { return self._s[2982]! } - public var PhotoEditor_TiltShift: String { return self._s[2983]! } - public var Settings_FAQ_URL: String { return self._s[2984]! } - public var Passport_Language_sl: String { return self._s[2985]! } - public var Settings_PrivacySettings: String { return self._s[2987]! } - public var SharedMedia_TitleLink: String { return self._s[2988]! } - public var Passport_Identity_TypePassportUploadScan: String { return self._s[2989]! } - public var Settings_SetProfilePhoto: String { return self._s[2990]! } - public var Channel_About_Help: String { return self._s[2991]! } - public var Contacts_PermissionsEnable: String { return self._s[2992]! } - public var Wallet_Sending_Title: String { return self._s[2993]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[2994]! } - public var AttachmentMenu_SendAsFiles: String { return self._s[2995]! } - public var CallFeedback_ReasonInterruption: String { return self._s[2997]! } - public var Passport_Address_AddTemporaryRegistration: String { return self._s[2998]! } - public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[2999]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3000]! } - public var PrivacySettings_DeleteAccountTitle: String { return self._s[3001]! } - public var AccessDenied_VideoMessageCamera: String { return self._s[3003]! } - public var Map_OpenInYandexMaps: String { return self._s[3005]! } - public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3006]! } - public var VoiceOver_MessageContextReply: String { return self._s[3007]! } - public var PhotoEditor_SaturationTool: String { return self._s[3008]! } + public var AuthSessions_IncompleteAttempts: String { return self._s[2979]! } + public var Passport_Address_Region: String { return self._s[2982]! } + public var ChatList_DeleteChat: String { return self._s[2983]! } + public var LogoutOptions_ClearCacheTitle: String { return self._s[2984]! } + public var PhotoEditor_TiltShift: String { return self._s[2985]! } + public var Settings_FAQ_URL: String { return self._s[2986]! } + public var Passport_Language_sl: String { return self._s[2987]! } + public var Settings_PrivacySettings: String { return self._s[2989]! } + public var SharedMedia_TitleLink: String { return self._s[2990]! } + public var Passport_Identity_TypePassportUploadScan: String { return self._s[2991]! } + public var Settings_SetProfilePhoto: String { return self._s[2992]! } + public var Channel_About_Help: String { return self._s[2993]! } + public var Contacts_PermissionsEnable: String { return self._s[2994]! } + public var Wallet_Sending_Title: String { return self._s[2995]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[2996]! } + public var AttachmentMenu_SendAsFiles: String { return self._s[2997]! } + public var CallFeedback_ReasonInterruption: String { return self._s[2999]! } + public var Passport_Address_AddTemporaryRegistration: String { return self._s[3000]! } + public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[3001]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3002]! } + public var PrivacySettings_DeleteAccountTitle: String { return self._s[3003]! } + public var AccessDenied_VideoMessageCamera: String { return self._s[3005]! } + public var Map_OpenInYandexMaps: String { return self._s[3007]! } + public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3008]! } + public var VoiceOver_MessageContextReply: String { return self._s[3009]! } + public var PhotoEditor_SaturationTool: String { return self._s[3010]! } public func PUSH_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3009]!, self._r[3009]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3011]!, self._r[3011]!, [_1, _2]) } - public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3010]! } - public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3011]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3012]! } - public var Appearance_TextSize: String { return self._s[3013]! } + public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3012]! } + public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3013]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3014]! } + public var Appearance_TextSize: String { return self._s[3015]! } public func LOCAL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3014]!, self._r[3014]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3016]!, self._r[3016]!, [_1, "\(_2)"]) } - public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3015]! } - public var Channel_Username_InvalidTooShort: String { return self._s[3017]! } + public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3017]! } + public var Channel_Username_InvalidTooShort: String { return self._s[3019]! } public func Group_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3018]!, self._r[3018]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3020]!, self._r[3020]!, [_1, _2]) } public func PUSH_CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3019]!, self._r[3019]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3021]!, self._r[3021]!, [_1, _2, _3]) } - public var GroupInfo_PublicLinkAdd: String { return self._s[3020]! } - public var Passport_PassportInformation: String { return self._s[3023]! } - public var Theme_Unsupported: String { return self._s[3024]! } - public var WatchRemote_AlertTitle: String { return self._s[3025]! } - public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3026]! } - public var ConvertToSupergroup_HelpText: String { return self._s[3028]! } + public var GroupInfo_PublicLinkAdd: String { return self._s[3022]! } + public var Passport_PassportInformation: String { return self._s[3025]! } + public var Theme_Unsupported: String { return self._s[3026]! } + public var WatchRemote_AlertTitle: String { return self._s[3027]! } + public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3028]! } + public var ConvertToSupergroup_HelpText: String { return self._s[3030]! } public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3029]!, self._r[3029]!, [_0]) + return formatWithArgumentRanges(self._s[3031]!, self._r[3031]!, [_0]) } public func PUSH_PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3030]!, self._r[3030]!, [_1]) + return formatWithArgumentRanges(self._s[3032]!, self._r[3032]!, [_1]) } - public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3031]! } - public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3033]! } - public var AccessDenied_CameraDisabled: String { return self._s[3034]! } + public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3033]! } + public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3035]! } + public var AccessDenied_CameraDisabled: String { return self._s[3036]! } public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3035]!, self._r[3035]!, [_0]) + return formatWithArgumentRanges(self._s[3037]!, self._r[3037]!, [_0]) } - public var PhotoEditor_ContrastTool: String { return self._s[3038]! } + public var PhotoEditor_ContrastTool: String { return self._s[3040]! } public func PUSH_PINNED_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3039]!, self._r[3039]!, [_1]) + return formatWithArgumentRanges(self._s[3041]!, self._r[3041]!, [_1]) } - public var DialogList_Draft: String { return self._s[3040]! } - public var Privacy_TopPeersDelete: String { return self._s[3042]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[3043]! } - public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3044]! } - public var WebSearch_RecentSectionClear: String { return self._s[3045]! } - public var EditTheme_ErrorInvalidCharacters: String { return self._s[3046]! } - public var Watch_ChatList_NoConversationsTitle: String { return self._s[3048]! } - public var Common_Done: String { return self._s[3050]! } - public var AuthSessions_EmptyText: String { return self._s[3051]! } - public var Conversation_ShareBotContactConfirmation: String { return self._s[3052]! } - public var Tour_Title5: String { return self._s[3053]! } - public var Wallet_Settings_Title: String { return self._s[3054]! } + public var DialogList_Draft: String { return self._s[3042]! } + public var Privacy_TopPeersDelete: String { return self._s[3044]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[3045]! } + public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3046]! } + public var WebSearch_RecentSectionClear: String { return self._s[3047]! } + public var EditTheme_ErrorInvalidCharacters: String { return self._s[3048]! } + public var Watch_ChatList_NoConversationsTitle: String { return self._s[3050]! } + public var Common_Done: String { return self._s[3052]! } + public var AuthSessions_EmptyText: String { return self._s[3053]! } + public var Conversation_ShareBotContactConfirmation: String { return self._s[3054]! } + public var Tour_Title5: String { return self._s[3055]! } + public var Wallet_Settings_Title: String { return self._s[3056]! } public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3055]!, self._r[3055]!, [_0]) + return formatWithArgumentRanges(self._s[3057]!, self._r[3057]!, [_0]) } - public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3056]! } - public var Conversation_LinkDialogSave: String { return self._s[3057]! } - public var GroupInfo_ActionRestrict: String { return self._s[3058]! } - public var Checkout_Title: String { return self._s[3059]! } - public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3061]! } - public var Channel_AdminLog_CanChangeInfo: String { return self._s[3063]! } - public var Notification_RenamedGroup: String { return self._s[3064]! } - public var PeopleNearby_Groups: String { return self._s[3065]! } - public var Checkout_PayWithFaceId: String { return self._s[3066]! } - public var Channel_BanList_BlockedTitle: String { return self._s[3067]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3069]! } - public var Checkout_WebConfirmation_Title: String { return self._s[3070]! } - public var Notifications_MessageNotificationsAlert: String { return self._s[3071]! } + public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3058]! } + public var Conversation_LinkDialogSave: String { return self._s[3059]! } + public var GroupInfo_ActionRestrict: String { return self._s[3060]! } + public var Checkout_Title: String { return self._s[3061]! } + public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3063]! } + public var Channel_AdminLog_CanChangeInfo: String { return self._s[3065]! } + public var Notification_RenamedGroup: String { return self._s[3066]! } + public var PeopleNearby_Groups: String { return self._s[3067]! } + public var Checkout_PayWithFaceId: String { return self._s[3068]! } + public var Channel_BanList_BlockedTitle: String { return self._s[3069]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3071]! } + public var Checkout_WebConfirmation_Title: String { return self._s[3072]! } + public var Notifications_MessageNotificationsAlert: String { return self._s[3073]! } public func Activity_RemindAboutGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3072]!, self._r[3072]!, [_0]) + return formatWithArgumentRanges(self._s[3074]!, self._r[3074]!, [_0]) } - public var Profile_AddToExisting: String { return self._s[3074]! } + public var Profile_AddToExisting: String { return self._s[3076]! } public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3075]!, self._r[3075]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3077]!, self._r[3077]!, [_0, _1]) } - public var Cache_Files: String { return self._s[3077]! } - public var Permissions_PrivacyPolicy: String { return self._s[3078]! } - public var SocksProxySetup_ConnectAndSave: String { return self._s[3079]! } - public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3080]! } - public var AutoDownloadSettings_TypeContacts: String { return self._s[3082]! } - public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3084]! } - public var Calls_NoCallsPlaceholder: String { return self._s[3085]! } - public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3086]! } - public var VoiceOver_AttachMedia: String { return self._s[3088]! } - public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3089]! } + public var Cache_Files: String { return self._s[3079]! } + public var Permissions_PrivacyPolicy: String { return self._s[3080]! } + public var SocksProxySetup_ConnectAndSave: String { return self._s[3081]! } + public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3082]! } + public var AutoDownloadSettings_TypeContacts: String { return self._s[3084]! } + public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3086]! } + public var Calls_NoCallsPlaceholder: String { return self._s[3087]! } + public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3088]! } + public var VoiceOver_AttachMedia: String { return self._s[3090]! } + public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3091]! } public func PUSH_CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3090]!, self._r[3090]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3092]!, self._r[3092]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3091]! } - public var Conversation_SetReminder_Title: String { return self._s[3092]! } - public var Passport_FieldAddressHelp: String { return self._s[3093]! } - public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3094]! } - public var PUSH_REMINDER_TITLE: String { return self._s[3095]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3093]! } + public var Conversation_SetReminder_Title: String { return self._s[3094]! } + public var Passport_FieldAddressHelp: String { return self._s[3095]! } + public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3096]! } + public var PUSH_REMINDER_TITLE: String { return self._s[3097]! } public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3096]!, self._r[3096]!, [_0]) + return formatWithArgumentRanges(self._s[3098]!, self._r[3098]!, [_0]) } - public var Channel_AdminLog_EmptyTitle: String { return self._s[3097]! } - public var Privacy_Calls_NeverAllow_Title: String { return self._s[3098]! } - public var Login_UnknownError: String { return self._s[3099]! } - public var Group_UpgradeNoticeText2: String { return self._s[3102]! } - public var Watch_Compose_AddContact: String { return self._s[3103]! } - public var Web_Error: String { return self._s[3104]! } - public var Gif_Search: String { return self._s[3105]! } - public var Profile_MessageLifetime1h: String { return self._s[3106]! } - public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3107]! } - public var Channel_Username_CheckingUsername: String { return self._s[3108]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[3109]! } - public var AutoDownloadSettings_TypeChannels: String { return self._s[3110]! } - public var Channel_AboutItem: String { return self._s[3111]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3113]! } - public var VoiceOver_Chat_VoiceMessage: String { return self._s[3114]! } - public var GroupInfo_SharedMedia: String { return self._s[3115]! } + public var Channel_AdminLog_EmptyTitle: String { return self._s[3099]! } + public var Privacy_Calls_NeverAllow_Title: String { return self._s[3100]! } + public var Login_UnknownError: String { return self._s[3101]! } + public var Group_UpgradeNoticeText2: String { return self._s[3104]! } + public var Watch_Compose_AddContact: String { return self._s[3105]! } + public var Web_Error: String { return self._s[3106]! } + public var Gif_Search: String { return self._s[3107]! } + public var Profile_MessageLifetime1h: String { return self._s[3108]! } + public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3109]! } + public var Channel_Username_CheckingUsername: String { return self._s[3110]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[3111]! } + public var AutoDownloadSettings_TypeChannels: String { return self._s[3112]! } + public var Channel_AboutItem: String { return self._s[3113]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3115]! } + public var VoiceOver_Chat_VoiceMessage: String { return self._s[3116]! } + public var GroupInfo_SharedMedia: String { return self._s[3117]! } public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3116]!, self._r[3116]!, [_1]) - } - public var Call_PhoneCallInProgressMessage: String { return self._s[3117]! } - public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3118]!, self._r[3118]!, [_1]) } - public var ChatList_UndoArchiveRevealedText: String { return self._s[3119]! } - public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3120]! } - public var Conversation_SearchByName_Placeholder: String { return self._s[3121]! } - public var CreatePoll_AddOption: String { return self._s[3122]! } - public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3123]! } - public var Group_UpgradeNoticeHeader: String { return self._s[3124]! } - public var Channel_Management_AddModerator: String { return self._s[3125]! } - public var AutoDownloadSettings_MaxFileSize: String { return self._s[3126]! } - public var StickerPacksSettings_ShowStickersButton: String { return self._s[3127]! } - public var NotificationsSound_Hello: String { return self._s[3128]! } - public var SocksProxySetup_SavedProxies: String { return self._s[3129]! } - public var Channel_Stickers_Placeholder: String { return self._s[3131]! } + public var Call_PhoneCallInProgressMessage: String { return self._s[3119]! } + public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3120]!, self._r[3120]!, [_1]) + } + public var ChatList_UndoArchiveRevealedText: String { return self._s[3121]! } + public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3122]! } + public var Conversation_SearchByName_Placeholder: String { return self._s[3123]! } + public var CreatePoll_AddOption: String { return self._s[3124]! } + public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3125]! } + public var Group_UpgradeNoticeHeader: String { return self._s[3126]! } + public var Channel_Management_AddModerator: String { return self._s[3127]! } + public var AutoDownloadSettings_MaxFileSize: String { return self._s[3128]! } + public var StickerPacksSettings_ShowStickersButton: String { return self._s[3129]! } + public var NotificationsSound_Hello: String { return self._s[3130]! } + public var SocksProxySetup_SavedProxies: String { return self._s[3131]! } + public var Channel_Stickers_Placeholder: String { return self._s[3133]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3132]!, self._r[3132]!, [_0]) + return formatWithArgumentRanges(self._s[3134]!, self._r[3134]!, [_0]) } - public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3133]! } - public var Channel_Management_AddModeratorHelp: String { return self._s[3134]! } - public var ContactInfo_BirthdayLabel: String { return self._s[3135]! } - public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3136]! } - public var AutoDownloadSettings_Channels: String { return self._s[3137]! } - public var Passport_Language_mn: String { return self._s[3138]! } - public var Notifications_ResetAllNotificationsHelp: String { return self._s[3141]! } - public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3142]! } - public var Passport_Language_ja: String { return self._s[3144]! } - public var Settings_About_Title: String { return self._s[3145]! } - public var Settings_NotificationsAndSounds: String { return self._s[3146]! } - public var ChannelInfo_DeleteGroup: String { return self._s[3147]! } - public var Settings_BlockedUsers: String { return self._s[3148]! } + public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3135]! } + public var Channel_Management_AddModeratorHelp: String { return self._s[3136]! } + public var ContactInfo_BirthdayLabel: String { return self._s[3137]! } + public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3138]! } + public var AutoDownloadSettings_Channels: String { return self._s[3139]! } + public var Passport_Language_mn: String { return self._s[3140]! } + public var Notifications_ResetAllNotificationsHelp: String { return self._s[3143]! } + public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3144]! } + public var Passport_Language_ja: String { return self._s[3146]! } + public var Settings_About_Title: String { return self._s[3147]! } + public var Settings_NotificationsAndSounds: String { return self._s[3148]! } + public var ChannelInfo_DeleteGroup: String { return self._s[3149]! } + public var Settings_BlockedUsers: String { return self._s[3150]! } public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3149]!, self._r[3149]!, [_0]) + return formatWithArgumentRanges(self._s[3151]!, self._r[3151]!, [_0]) } - public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3150]! } - public var AutoDownloadSettings_PreloadVideo: String { return self._s[3151]! } - public var Passport_Address_AddResidentialAddress: String { return self._s[3152]! } - public var Channel_Username_Title: String { return self._s[3153]! } + public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3152]! } + public var AutoDownloadSettings_PreloadVideo: String { return self._s[3153]! } + public var Passport_Address_AddResidentialAddress: String { return self._s[3154]! } + public var Channel_Username_Title: String { return self._s[3155]! } public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3154]!, self._r[3154]!, [_0]) + return formatWithArgumentRanges(self._s[3156]!, self._r[3156]!, [_0]) } - public var AttachmentMenu_File: String { return self._s[3156]! } - public var AppleWatch_Title: String { return self._s[3157]! } - public var Activity_RecordingVideoMessage: String { return self._s[3158]! } + public var AttachmentMenu_File: String { return self._s[3158]! } + public var AppleWatch_Title: String { return self._s[3159]! } + public var Activity_RecordingVideoMessage: String { return self._s[3160]! } public func Channel_DiscussionGroup_PublicChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3159]!, self._r[3159]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3161]!, self._r[3161]!, [_1, _2]) } - public var Weekday_Saturday: String { return self._s[3160]! } - public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3161]! } - public var Profile_CreateEncryptedChatError: String { return self._s[3162]! } - public var Common_Next: String { return self._s[3164]! } - public var Channel_Stickers_YourStickers: String { return self._s[3166]! } - public var Message_Theme: String { return self._s[3167]! } - public var Call_AudioRouteHeadphones: String { return self._s[3168]! } - public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3170]! } - public var Watch_Contacts_NoResults: String { return self._s[3172]! } - public var PhotoEditor_TintTool: String { return self._s[3175]! } - public var LoginPassword_ResetAccount: String { return self._s[3177]! } - public var Settings_SavedMessages: String { return self._s[3178]! } - public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3179]! } - public var Bot_GenericSupportStatus: String { return self._s[3180]! } - public var StickerPack_Add: String { return self._s[3181]! } - public var Checkout_TotalAmount: String { return self._s[3182]! } - public var Your_cards_number_is_invalid: String { return self._s[3183]! } - public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3184]! } - public var VoiceOver_Chat_VideoMessage: String { return self._s[3185]! } + public var Weekday_Saturday: String { return self._s[3162]! } + public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3163]! } + public var Profile_CreateEncryptedChatError: String { return self._s[3164]! } + public var Common_Next: String { return self._s[3166]! } + public var Channel_Stickers_YourStickers: String { return self._s[3168]! } + public var Message_Theme: String { return self._s[3169]! } + public var Call_AudioRouteHeadphones: String { return self._s[3170]! } + public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3172]! } + public var Watch_Contacts_NoResults: String { return self._s[3174]! } + public var PhotoEditor_TintTool: String { return self._s[3177]! } + public var LoginPassword_ResetAccount: String { return self._s[3179]! } + public var Settings_SavedMessages: String { return self._s[3180]! } + public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3181]! } + public var Bot_GenericSupportStatus: String { return self._s[3182]! } + public var StickerPack_Add: String { return self._s[3183]! } + public var Checkout_TotalAmount: String { return self._s[3184]! } + public var Your_cards_number_is_invalid: String { return self._s[3185]! } + public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3186]! } + public var VoiceOver_Chat_VideoMessage: String { return self._s[3187]! } public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3186]!, self._r[3186]!, [_0]) + return formatWithArgumentRanges(self._s[3188]!, self._r[3188]!, [_0]) } public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3187]!, self._r[3187]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3189]!, self._r[3189]!, [_1, _2]) } - public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3188]! } + public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3190]! } public func PUSH_CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3190]!, self._r[3190]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3192]!, self._r[3192]!, [_1, _2]) } public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3191]!, self._r[3191]!, [_0]) + return formatWithArgumentRanges(self._s[3193]!, self._r[3193]!, [_0]) } - public var GroupInfo_InviteLink_ShareLink: String { return self._s[3192]! } - public var StickerPack_Share: String { return self._s[3193]! } - public var Passport_DeleteAddress: String { return self._s[3194]! } - public var Settings_Passport: String { return self._s[3195]! } - public var SharedMedia_EmptyFilesText: String { return self._s[3196]! } - public var Conversation_DeleteMessagesForMe: String { return self._s[3197]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3198]! } - public var Contacts_PermissionsText: String { return self._s[3199]! } - public var Group_Setup_HistoryVisible: String { return self._s[3200]! } - public var Passport_Address_AddRentalAgreement: String { return self._s[3202]! } - public var SocksProxySetup_Title: String { return self._s[3203]! } - public var Notification_Mute1h: String { return self._s[3204]! } + public var GroupInfo_InviteLink_ShareLink: String { return self._s[3194]! } + public var StickerPack_Share: String { return self._s[3195]! } + public var Passport_DeleteAddress: String { return self._s[3196]! } + public var Settings_Passport: String { return self._s[3197]! } + public var SharedMedia_EmptyFilesText: String { return self._s[3198]! } + public var Conversation_DeleteMessagesForMe: String { return self._s[3199]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3200]! } + public var Contacts_PermissionsText: String { return self._s[3201]! } + public var Group_Setup_HistoryVisible: String { return self._s[3202]! } + public var Passport_Address_AddRentalAgreement: String { return self._s[3204]! } + public var SocksProxySetup_Title: String { return self._s[3205]! } + public var Notification_Mute1h: String { return self._s[3206]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3205]!, self._r[3205]!, [_0]) + return formatWithArgumentRanges(self._s[3207]!, self._r[3207]!, [_0]) } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3207]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3209]! } public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3208]!, self._r[3208]!, [_1]) + return formatWithArgumentRanges(self._s[3210]!, self._r[3210]!, [_1]) } - public var FastTwoStepSetup_PasswordSection: String { return self._s[3209]! } - public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3212]! } - public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3214]! } - public var DialogList_NoMessagesText: String { return self._s[3215]! } - public var Privacy_ContactsResetConfirmation: String { return self._s[3216]! } - public var Privacy_Calls_P2PHelp: String { return self._s[3217]! } - public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3219]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[3220]! } - public var Common_TakePhotoOrVideo: String { return self._s[3221]! } - public var Wallet_Words_Text: String { return self._s[3222]! } - public var Call_StatusBusy: String { return self._s[3223]! } - public var Conversation_PinnedMessage: String { return self._s[3224]! } - public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3225]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3226]! } - public var Undo_ChatCleared: String { return self._s[3227]! } - public var AppleWatch_ReplyPresets: String { return self._s[3228]! } - public var Passport_DiscardMessageDescription: String { return self._s[3230]! } - public var Login_NetworkError: String { return self._s[3231]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[3211]! } + public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3214]! } + public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3216]! } + public var DialogList_NoMessagesText: String { return self._s[3217]! } + public var Privacy_ContactsResetConfirmation: String { return self._s[3218]! } + public var Privacy_Calls_P2PHelp: String { return self._s[3219]! } + public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3221]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[3222]! } + public var Common_TakePhotoOrVideo: String { return self._s[3223]! } + public var Wallet_Words_Text: String { return self._s[3224]! } + public var Call_StatusBusy: String { return self._s[3225]! } + public var Conversation_PinnedMessage: String { return self._s[3226]! } + public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3227]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3228]! } + public var Undo_ChatCleared: String { return self._s[3229]! } + public var AppleWatch_ReplyPresets: String { return self._s[3230]! } + public var Passport_DiscardMessageDescription: String { return self._s[3232]! } + public var Login_NetworkError: String { return self._s[3233]! } public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3232]!, self._r[3232]!, [_0]) + return formatWithArgumentRanges(self._s[3234]!, self._r[3234]!, [_0]) } public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3233]!, self._r[3233]!, [_0]) + return formatWithArgumentRanges(self._s[3235]!, self._r[3235]!, [_0]) } - public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3234]! } - public var Wallet_WordCheck_ViewWords: String { return self._s[3236]! } - public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3237]! } + public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3236]! } + public var Wallet_WordCheck_ViewWords: String { return self._s[3238]! } + public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3239]! } public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3239]!, self._r[3239]!, [_0]) + return formatWithArgumentRanges(self._s[3241]!, self._r[3241]!, [_0]) } - public var Call_ConnectionErrorMessage: String { return self._s[3240]! } - public var VoiceOver_Chat_Music: String { return self._s[3241]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3242]! } - public var Compose_GroupTokenListPlaceholder: String { return self._s[3244]! } - public var ConversationMedia_Title: String { return self._s[3245]! } - public var EncryptionKey_Title: String { return self._s[3247]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3248]! } - public var Notification_Exceptions_AddException: String { return self._s[3249]! } - public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3250]! } - public var Profile_MessageLifetime1m: String { return self._s[3251]! } + public var Call_ConnectionErrorMessage: String { return self._s[3242]! } + public var VoiceOver_Chat_Music: String { return self._s[3243]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3244]! } + public var Compose_GroupTokenListPlaceholder: String { return self._s[3246]! } + public var ConversationMedia_Title: String { return self._s[3247]! } + public var EncryptionKey_Title: String { return self._s[3249]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3250]! } + public var Notification_Exceptions_AddException: String { return self._s[3251]! } + public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3252]! } + public var Profile_MessageLifetime1m: String { return self._s[3253]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3252]!, self._r[3252]!, [_1]) + return formatWithArgumentRanges(self._s[3254]!, self._r[3254]!, [_1]) } - public var Month_GenMay: String { return self._s[3253]! } + public var Month_GenMay: String { return self._s[3255]! } public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3254]!, self._r[3254]!, [_0]) + return formatWithArgumentRanges(self._s[3256]!, self._r[3256]!, [_0]) } - public var PeopleNearby_Users: String { return self._s[3255]! } - public var Wallet_Send_AddressInfo: String { return self._s[3256]! } - public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3257]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[3258]! } - public var Conversation_EmptyPlaceholder: String { return self._s[3260]! } - public var Passport_Address_AddPassportRegistration: String { return self._s[3261]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[3262]! } - public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3263]! } - public var Camera_TapAndHoldForVideo: String { return self._s[3264]! } - public var Channel_JoinChannel: String { return self._s[3266]! } - public var Appearance_Animations: String { return self._s[3269]! } + public var PeopleNearby_Users: String { return self._s[3257]! } + public var Wallet_Send_AddressInfo: String { return self._s[3258]! } + public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3259]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[3260]! } + public var Conversation_EmptyPlaceholder: String { return self._s[3262]! } + public var Passport_Address_AddPassportRegistration: String { return self._s[3263]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[3264]! } + public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3265]! } + public var Camera_TapAndHoldForVideo: String { return self._s[3266]! } + public var Channel_JoinChannel: String { return self._s[3268]! } + public var Appearance_Animations: String { return self._s[3271]! } public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3270]!, self._r[3270]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3272]!, self._r[3272]!, [_1, _2]) } - public var Stickers_GroupStickers: String { return self._s[3272]! } - public var Appearance_ShareTheme: String { return self._s[3273]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[3275]! } - public var Passport_Address_Street: String { return self._s[3276]! } - public var Conversation_AddContact: String { return self._s[3277]! } - public var Login_PhonePlaceholder: String { return self._s[3278]! } - public var Channel_Members_InviteLink: String { return self._s[3280]! } - public var Bot_Stop: String { return self._s[3281]! } - public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3283]! } - public var Notification_PassportValueAddress: String { return self._s[3284]! } - public var Month_ShortJuly: String { return self._s[3285]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3286]! } - public var Channel_AdminLog_BanSendMedia: String { return self._s[3287]! } - public var Passport_Identity_ReverseSide: String { return self._s[3288]! } - public var Watch_Stickers_Recents: String { return self._s[3291]! } - public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3293]! } - public var Map_SendThisLocation: String { return self._s[3294]! } + public var Stickers_GroupStickers: String { return self._s[3274]! } + public var Appearance_ShareTheme: String { return self._s[3275]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[3277]! } + public var Passport_Address_Street: String { return self._s[3278]! } + public var Conversation_AddContact: String { return self._s[3279]! } + public var Login_PhonePlaceholder: String { return self._s[3280]! } + public var Channel_Members_InviteLink: String { return self._s[3282]! } + public var Bot_Stop: String { return self._s[3283]! } + public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3285]! } + public var Notification_PassportValueAddress: String { return self._s[3286]! } + public var Month_ShortJuly: String { return self._s[3287]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3288]! } + public var Channel_AdminLog_BanSendMedia: String { return self._s[3289]! } + public var Passport_Identity_ReverseSide: String { return self._s[3290]! } + public var Watch_Stickers_Recents: String { return self._s[3293]! } + public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3295]! } + public var Map_SendThisLocation: String { return self._s[3296]! } public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3295]!, self._r[3295]!, [_0]) + return formatWithArgumentRanges(self._s[3297]!, self._r[3297]!, [_0]) } public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3296]!, self._r[3296]!, [_0]) + return formatWithArgumentRanges(self._s[3298]!, self._r[3298]!, [_0]) } - public var ConvertToSupergroup_Note: String { return self._s[3297]! } - public var Wallet_Intro_NotNow: String { return self._s[3298]! } + public var ConvertToSupergroup_Note: String { return self._s[3299]! } + public var Wallet_Intro_NotNow: String { return self._s[3300]! } public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3299]!, self._r[3299]!, [_0]) + return formatWithArgumentRanges(self._s[3301]!, self._r[3301]!, [_0]) } - public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3300]! } + public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3302]! } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3301]!, self._r[3301]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3303]!, self._r[3303]!, [_0, _1]) } - public var Login_CallRequestState3: String { return self._s[3303]! } - public var Wallpaper_SearchShort: String { return self._s[3304]! } - public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3306]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3307]! } - public var Channel_BotDoesntSupportGroups: String { return self._s[3308]! } + public var Login_CallRequestState3: String { return self._s[3305]! } + public var Wallpaper_SearchShort: String { return self._s[3306]! } + public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3308]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3309]! } + public var Channel_BotDoesntSupportGroups: String { return self._s[3310]! } public func PUSH_CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3309]!, self._r[3309]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3311]!, self._r[3311]!, [_1, _2]) } - public var Channel_AdminLogFilter_Title: String { return self._s[3310]! } - public var Notifications_GroupNotificationsExceptions: String { return self._s[3315]! } + public var Channel_AdminLogFilter_Title: String { return self._s[3312]! } + public var Notifications_GroupNotificationsExceptions: String { return self._s[3317]! } public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3316]!, self._r[3316]!, [_0]) + return formatWithArgumentRanges(self._s[3318]!, self._r[3318]!, [_0]) } - public var Passport_CorrectErrors: String { return self._s[3317]! } - public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3318]! } + public var Passport_CorrectErrors: String { return self._s[3319]! } + public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3320]! } public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3319]!, self._r[3319]!, [_0]) + return formatWithArgumentRanges(self._s[3321]!, self._r[3321]!, [_0]) } - public var Map_SendMyCurrentLocation: String { return self._s[3320]! } - public var Channel_DiscussionGroup: String { return self._s[3321]! } + public var Map_SendMyCurrentLocation: String { return self._s[3322]! } + public var Channel_DiscussionGroup: String { return self._s[3323]! } public func PUSH_PINNED_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3322]!, self._r[3322]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3324]!, self._r[3324]!, [_1, _2]) } - public var SharedMedia_SearchNoResults: String { return self._s[3323]! } - public var Permissions_NotificationsText_v0: String { return self._s[3324]! } - public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3325]! } - public var Appearance_AppIcon: String { return self._s[3326]! } - public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3327]! } - public var LoginPassword_FloodError: String { return self._s[3328]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[3330]! } + public var SharedMedia_SearchNoResults: String { return self._s[3325]! } + public var Permissions_NotificationsText_v0: String { return self._s[3326]! } + public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3327]! } + public var Appearance_AppIcon: String { return self._s[3328]! } + public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3329]! } + public var LoginPassword_FloodError: String { return self._s[3330]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[3332]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3331]!, self._r[3331]!, [_0]) - } - public var Passport_Language_bn: String { return self._s[3332]! } - public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3333]!, self._r[3333]!, [_0]) } - public var ChatList_Context_Pin: String { return self._s[3334]! } - public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { + public var Passport_Language_bn: String { return self._s[3334]! } + public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3335]!, self._r[3335]!, [_0]) } + public var ChatList_Context_Pin: String { return self._s[3336]! } + public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3337]!, self._r[3337]!, [_0]) + } public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3336]!, self._r[3336]!, [_0]) + return formatWithArgumentRanges(self._s[3338]!, self._r[3338]!, [_0]) } - public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3339]! } - public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3341]! } - public var Contacts_PermissionsAllow: String { return self._s[3342]! } - public var ReportPeer_ReasonCopyright: String { return self._s[3343]! } - public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3344]! } - public var WallpaperPreview_Pattern: String { return self._s[3345]! } - public var Paint_Duplicate: String { return self._s[3346]! } - public var Passport_Address_Country: String { return self._s[3347]! } - public var Notification_RenamedChannel: String { return self._s[3349]! } - public var ChatList_Context_Unmute: String { return self._s[3350]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3351]! } - public var Group_MessagePhotoUpdated: String { return self._s[3352]! } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[3353]! } - public var Conversation_ContextMenuBan: String { return self._s[3354]! } - public var TwoStepAuth_EmailSent: String { return self._s[3355]! } - public var MessagePoll_NoVotes: String { return self._s[3356]! } - public var Passport_Language_is: String { return self._s[3357]! } - public var PeopleNearby_UsersEmpty: String { return self._s[3359]! } - public var Tour_Text5: String { return self._s[3360]! } + public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3341]! } + public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3343]! } + public var Contacts_PermissionsAllow: String { return self._s[3344]! } + public var ReportPeer_ReasonCopyright: String { return self._s[3345]! } + public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3346]! } + public var WallpaperPreview_Pattern: String { return self._s[3347]! } + public var Paint_Duplicate: String { return self._s[3348]! } + public var Passport_Address_Country: String { return self._s[3349]! } + public var Notification_RenamedChannel: String { return self._s[3351]! } + public var ChatList_Context_Unmute: String { return self._s[3352]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3353]! } + public var Group_MessagePhotoUpdated: String { return self._s[3354]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[3355]! } + public var Conversation_ContextMenuBan: String { return self._s[3356]! } + public var TwoStepAuth_EmailSent: String { return self._s[3357]! } + public var MessagePoll_NoVotes: String { return self._s[3358]! } + public var Passport_Language_is: String { return self._s[3359]! } + public var PeopleNearby_UsersEmpty: String { return self._s[3361]! } + public var Tour_Text5: String { return self._s[3362]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3362]!, self._r[3362]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3364]!, self._r[3364]!, [_1, _2]) } - public var Undo_SecretChatDeleted: String { return self._s[3363]! } - public var SocksProxySetup_ShareQRCode: String { return self._s[3364]! } + public var Undo_SecretChatDeleted: String { return self._s[3365]! } + public var SocksProxySetup_ShareQRCode: String { return self._s[3366]! } public func VoiceOver_Chat_Size(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3365]!, self._r[3365]!, [_0]) + return formatWithArgumentRanges(self._s[3367]!, self._r[3367]!, [_0]) } - public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3366]! } - public var Paint_Edit: String { return self._s[3368]! } - public var ScheduledMessages_ReminderNotification: String { return self._s[3370]! } - public var Undo_DeletedGroup: String { return self._s[3372]! } - public var LoginPassword_ForgotPassword: String { return self._s[3373]! } - public var Wallet_WordImport_IncorrectTitle: String { return self._s[3374]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[3375]! } + public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3368]! } + public var Paint_Edit: String { return self._s[3370]! } + public var ScheduledMessages_ReminderNotification: String { return self._s[3372]! } + public var Undo_DeletedGroup: String { return self._s[3374]! } + public var LoginPassword_ForgotPassword: String { return self._s[3375]! } + public var Wallet_WordImport_IncorrectTitle: String { return self._s[3376]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[3377]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3376]!, self._r[3376]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3378]!, self._r[3378]!, [_0, _1]) } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3377]! } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3378]! } - public var Passport_Language_uz: String { return self._s[3379]! } - public var Conversation_PinMessageAlertGroup: String { return self._s[3380]! } - public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3381]! } - public var Map_StopLiveLocation: String { return self._s[3383]! } - public var VoiceOver_MessageContextSend: String { return self._s[3385]! } - public var PasscodeSettings_Help: String { return self._s[3386]! } - public var NotificationsSound_Input: String { return self._s[3387]! } - public var Share_Title: String { return self._s[3390]! } - public var LogoutOptions_Title: String { return self._s[3391]! } - public var Wallet_Send_AddressText: String { return self._s[3392]! } - public var Login_TermsOfServiceAgree: String { return self._s[3393]! } - public var Compose_NewEncryptedChatTitle: String { return self._s[3394]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3395]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3396]! } - public var EnterPasscode_EnterTitle: String { return self._s[3397]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3379]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3380]! } + public var Passport_Language_uz: String { return self._s[3381]! } + public var Conversation_PinMessageAlertGroup: String { return self._s[3382]! } + public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3383]! } + public var Map_StopLiveLocation: String { return self._s[3385]! } + public var VoiceOver_MessageContextSend: String { return self._s[3387]! } + public var PasscodeSettings_Help: String { return self._s[3388]! } + public var NotificationsSound_Input: String { return self._s[3389]! } + public var Share_Title: String { return self._s[3392]! } + public var LogoutOptions_Title: String { return self._s[3393]! } + public var Wallet_Send_AddressText: String { return self._s[3394]! } + public var Login_TermsOfServiceAgree: String { return self._s[3395]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[3396]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3397]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3398]! } + public var EnterPasscode_EnterTitle: String { return self._s[3399]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3398]!, self._r[3398]!, [_0]) + return formatWithArgumentRanges(self._s[3400]!, self._r[3400]!, [_0]) } - public var Settings_CopyPhoneNumber: String { return self._s[3399]! } - public var Conversation_AddToContacts: String { return self._s[3400]! } + public var Settings_CopyPhoneNumber: String { return self._s[3401]! } + public var Conversation_AddToContacts: String { return self._s[3402]! } public func VoiceOver_Chat_ReplyFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3401]!, self._r[3401]!, [_0]) - } - public var NotificationsSound_Keys: String { return self._s[3402]! } - public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3403]!, self._r[3403]!, [_0]) } - public var Notification_MessageLifetime1w: String { return self._s[3404]! } - public var Message_Video: String { return self._s[3405]! } - public var AutoDownloadSettings_CellularTitle: String { return self._s[3406]! } + public var NotificationsSound_Keys: String { return self._s[3404]! } + public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3405]!, self._r[3405]!, [_0]) + } + public var Notification_MessageLifetime1w: String { return self._s[3406]! } + public var Message_Video: String { return self._s[3407]! } + public var AutoDownloadSettings_CellularTitle: String { return self._s[3408]! } public func PUSH_CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3407]!, self._r[3407]!, [_1]) + return formatWithArgumentRanges(self._s[3409]!, self._r[3409]!, [_1]) } public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3410]!, self._r[3410]!, [_0]) + return formatWithArgumentRanges(self._s[3412]!, self._r[3412]!, [_0]) } public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3411]!, self._r[3411]!, [_0]) + return formatWithArgumentRanges(self._s[3413]!, self._r[3413]!, [_0]) } - public var Passport_Language_mk: String { return self._s[3412]! } - public var CreatePoll_CancelConfirmation: String { return self._s[3413]! } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3415]! } - public var PrivacyPolicy_Decline: String { return self._s[3416]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[3417]! } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3418]! } - public var Permissions_SiriAllow_v0: String { return self._s[3420]! } - public var Appearance_ThemeCarouselNight: String { return self._s[3421]! } + public var Passport_Language_mk: String { return self._s[3414]! } + public var CreatePoll_CancelConfirmation: String { return self._s[3415]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3417]! } + public var PrivacyPolicy_Decline: String { return self._s[3418]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[3419]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3420]! } + public var Permissions_SiriAllow_v0: String { return self._s[3422]! } + public var Appearance_ThemeCarouselNight: String { return self._s[3423]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3422]!, self._r[3422]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3424]!, self._r[3424]!, [_1, "\(_2)"]) } public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3423]!, self._r[3423]!, [_0]) + return formatWithArgumentRanges(self._s[3425]!, self._r[3425]!, [_0]) } - public var Paint_Regular: String { return self._s[3424]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[3425]! } - public var SocksProxySetup_ShareLink: String { return self._s[3426]! } - public var Wallet_Qr_Title: String { return self._s[3427]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[3428]! } - public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3430]! } - public var GroupInfo_InviteByLink: String { return self._s[3431]! } - public var MessageTimer_Custom: String { return self._s[3432]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3433]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3435]! } - public var Conversation_SendMessage_SetReminder: String { return self._s[3436]! } - public var VoiceOver_Chat_Selected: String { return self._s[3437]! } - public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3438]! } - public var Channel_Username_InvalidTaken: String { return self._s[3439]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[3440]! } - public var Wallet_WordCheck_TryAgain: String { return self._s[3441]! } - public var Settings_ChatBackground: String { return self._s[3442]! } - public var Channel_Subscribers_Title: String { return self._s[3443]! } - public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3444]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3445]! } - public var Watch_ConnectionDescription: String { return self._s[3446]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[3450]! } - public var Wallpaper_ResetWallpapers: String { return self._s[3451]! } - public var EditProfile_Title: String { return self._s[3452]! } - public var NotificationsSound_Bamboo: String { return self._s[3454]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3456]! } - public var Login_SmsRequestState2: String { return self._s[3457]! } - public var Passport_Language_ar: String { return self._s[3458]! } + public var Paint_Regular: String { return self._s[3426]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[3427]! } + public var SocksProxySetup_ShareLink: String { return self._s[3428]! } + public var Wallet_Qr_Title: String { return self._s[3429]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[3430]! } + public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3432]! } + public var GroupInfo_InviteByLink: String { return self._s[3433]! } + public var MessageTimer_Custom: String { return self._s[3434]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3435]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3437]! } + public var Conversation_SendMessage_SetReminder: String { return self._s[3438]! } + public var VoiceOver_Chat_Selected: String { return self._s[3439]! } + public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3440]! } + public var Channel_Username_InvalidTaken: String { return self._s[3441]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[3442]! } + public var Wallet_WordCheck_TryAgain: String { return self._s[3443]! } + public var Settings_ChatBackground: String { return self._s[3444]! } + public var Channel_Subscribers_Title: String { return self._s[3445]! } + public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3446]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3447]! } + public var Watch_ConnectionDescription: String { return self._s[3448]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[3452]! } + public var Wallpaper_ResetWallpapers: String { return self._s[3453]! } + public var EditProfile_Title: String { return self._s[3454]! } + public var NotificationsSound_Bamboo: String { return self._s[3456]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3458]! } + public var Login_SmsRequestState2: String { return self._s[3459]! } + public var Passport_Language_ar: String { return self._s[3460]! } public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3459]!, self._r[3459]!, [_0]) + return formatWithArgumentRanges(self._s[3461]!, self._r[3461]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3460]! } - public var Wallet_Created_Text: String { return self._s[3461]! } - public var Conversation_MessageDialogEdit: String { return self._s[3462]! } - public var Wallet_Created_Proceed: String { return self._s[3463]! } - public var Wallet_Words_Done: String { return self._s[3464]! } - public var VoiceOver_Media_PlaybackPause: String { return self._s[3465]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3462]! } + public var Wallet_Created_Text: String { return self._s[3463]! } + public var Conversation_MessageDialogEdit: String { return self._s[3464]! } + public var Wallet_Created_Proceed: String { return self._s[3465]! } + public var Wallet_Words_Done: String { return self._s[3466]! } + public var VoiceOver_Media_PlaybackPause: String { return self._s[3467]! } public func PUSH_AUTH_UNKNOWN(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3466]!, self._r[3466]!, [_1]) + return formatWithArgumentRanges(self._s[3468]!, self._r[3468]!, [_1]) } - public var Common_Close: String { return self._s[3467]! } - public var GroupInfo_PublicLink: String { return self._s[3468]! } - public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3469]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3470]! } + public var Common_Close: String { return self._s[3469]! } + public var GroupInfo_PublicLink: String { return self._s[3470]! } + public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3471]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3472]! } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3474]!, self._r[3474]!, [_0]) - } - public var UserInfo_About_Placeholder: String { return self._s[3475]! } - public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3476]!, self._r[3476]!, [_0]) } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[3477]! } - public var Channel_Info_Banned: String { return self._s[3479]! } + public var UserInfo_About_Placeholder: String { return self._s[3477]! } + public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3478]!, self._r[3478]!, [_0]) + } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[3479]! } + public var Channel_Info_Banned: String { return self._s[3481]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3480]!, self._r[3480]!, [_0]) + return formatWithArgumentRanges(self._s[3482]!, self._r[3482]!, [_0]) } - public var Appearance_Other: String { return self._s[3481]! } - public var Passport_Language_my: String { return self._s[3482]! } - public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3483]! } + public var Appearance_Other: String { return self._s[3483]! } + public var Passport_Language_my: String { return self._s[3484]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3485]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3484]!, self._r[3484]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3486]!, self._r[3486]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3485]! } - public var Preview_CopyAddress: String { return self._s[3486]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3487]! } + public var Preview_CopyAddress: String { return self._s[3488]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3487]!, self._r[3487]!, [_0]) + return formatWithArgumentRanges(self._s[3489]!, self._r[3489]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[3488]! } - public var UserInfo_BotSettings: String { return self._s[3489]! } - public var LiveLocation_MenuStopAll: String { return self._s[3491]! } - public var Passport_PasswordCreate: String { return self._s[3492]! } - public var StickerSettings_MaskContextInfo: String { return self._s[3493]! } - public var Message_PinnedLocationMessage: String { return self._s[3494]! } - public var Map_Satellite: String { return self._s[3495]! } - public var Watch_Message_Unsupported: String { return self._s[3496]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[3497]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3498]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[3490]! } + public var UserInfo_BotSettings: String { return self._s[3491]! } + public var LiveLocation_MenuStopAll: String { return self._s[3493]! } + public var Passport_PasswordCreate: String { return self._s[3494]! } + public var StickerSettings_MaskContextInfo: String { return self._s[3495]! } + public var Message_PinnedLocationMessage: String { return self._s[3496]! } + public var Map_Satellite: String { return self._s[3497]! } + public var Watch_Message_Unsupported: String { return self._s[3498]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[3499]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3500]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3499]!, self._r[3499]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3501]!, self._r[3501]!, [_0, _1]) } public func Conversation_OpenBotLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3500]!, self._r[3500]!, [_0]) + return formatWithArgumentRanges(self._s[3502]!, self._r[3502]!, [_0]) } - public var Wallet_WordImport_Continue: String { return self._s[3501]! } - public var Notifications_ChannelNotificationsHelp: String { return self._s[3502]! } - public var Privacy_Calls_P2PContacts: String { return self._s[3503]! } - public var NotificationsSound_None: String { return self._s[3504]! } - public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3506]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[3507]! } + public var Wallet_WordImport_Continue: String { return self._s[3503]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[3504]! } + public var Privacy_Calls_P2PContacts: String { return self._s[3505]! } + public var NotificationsSound_None: String { return self._s[3506]! } + public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3508]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[3509]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3508]!, self._r[3508]!, [_1]) + return formatWithArgumentRanges(self._s[3510]!, self._r[3510]!, [_1]) } - public var Cache_Indexing: String { return self._s[3509]! } - public var DialogList_RecentTitlePeople: String { return self._s[3511]! } - public var DialogList_EncryptionRejected: String { return self._s[3512]! } - public var GroupInfo_Administrators: String { return self._s[3513]! } - public var Passport_ScanPassportHelp: String { return self._s[3514]! } - public var Application_Name: String { return self._s[3515]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3516]! } - public var Appearance_ThemeCarouselDay: String { return self._s[3518]! } - public var Passport_Identity_TranslationHelp: String { return self._s[3519]! } + public var Cache_Indexing: String { return self._s[3511]! } + public var DialogList_RecentTitlePeople: String { return self._s[3513]! } + public var DialogList_EncryptionRejected: String { return self._s[3514]! } + public var GroupInfo_Administrators: String { return self._s[3515]! } + public var Passport_ScanPassportHelp: String { return self._s[3516]! } + public var Application_Name: String { return self._s[3517]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3518]! } + public var Appearance_ThemeCarouselDay: String { return self._s[3520]! } + public var Passport_Identity_TranslationHelp: String { return self._s[3521]! } public func VoiceOver_Chat_VideoMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3520]!, self._r[3520]!, [_0]) - } - public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3521]!, self._r[3521]!, [_0]) - } - public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3522]!, self._r[3522]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3523]! } - public var Privacy_ChatsTitle: String { return self._s[3524]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[3525]! } - public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3526]! } - public var Watch_Suggestion_HoldOn: String { return self._s[3527]! } - public var Group_EditAdmin_TransferOwnership: String { return self._s[3528]! } - public var Group_LinkedChannel: String { return self._s[3529]! } - public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3530]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[3531]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3532]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[3533]! } - public var ScheduledMessages_RemindersTitle: String { return self._s[3535]! } - public var Channel_Setup_TypePublic: String { return self._s[3537]! } + public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3523]!, self._r[3523]!, [_0]) + } + public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3524]!, self._r[3524]!, [_0]) + } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3525]! } + public var Privacy_ChatsTitle: String { return self._s[3526]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[3527]! } + public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3528]! } + public var Watch_Suggestion_HoldOn: String { return self._s[3529]! } + public var Group_EditAdmin_TransferOwnership: String { return self._s[3530]! } + public var Group_LinkedChannel: String { return self._s[3531]! } + public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3532]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[3533]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3534]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[3535]! } + public var ScheduledMessages_RemindersTitle: String { return self._s[3537]! } + public var Channel_Setup_TypePublic: String { return self._s[3539]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3538]!, self._r[3538]!, [_0]) + return formatWithArgumentRanges(self._s[3540]!, self._r[3540]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[3540]! } - public var Map_OpenInMaps: String { return self._s[3542]! } + public var Channel_TypeSetup_Title: String { return self._s[3542]! } + public var Map_OpenInMaps: String { return self._s[3544]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3543]!, self._r[3543]!, [_1]) + return formatWithArgumentRanges(self._s[3545]!, self._r[3545]!, [_1]) } - public var NotificationsSound_Tremolo: String { return self._s[3545]! } + public var NotificationsSound_Tremolo: String { return self._s[3547]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3546]!, self._r[3546]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3548]!, self._r[3548]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[3547]! } - public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3548]! } - public var Passport_PasswordHelp: String { return self._s[3549]! } - public var Login_CodeExpiredError: String { return self._s[3550]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3551]! } - public var Conversation_TitleUnmute: String { return self._s[3552]! } - public var Passport_Identity_ScansHelp: String { return self._s[3553]! } - public var Passport_Language_lo: String { return self._s[3554]! } - public var Camera_FlashAuto: String { return self._s[3555]! } - public var Conversation_OpenBotLinkOpen: String { return self._s[3556]! } - public var Common_Cancel: String { return self._s[3557]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[3558]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3559]! } - public var Appearance_TintAllColors: String { return self._s[3560]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[3549]! } + public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3550]! } + public var Passport_PasswordHelp: String { return self._s[3551]! } + public var Login_CodeExpiredError: String { return self._s[3552]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3553]! } + public var Conversation_TitleUnmute: String { return self._s[3554]! } + public var Passport_Identity_ScansHelp: String { return self._s[3555]! } + public var Passport_Language_lo: String { return self._s[3556]! } + public var Camera_FlashAuto: String { return self._s[3557]! } + public var Conversation_OpenBotLinkOpen: String { return self._s[3558]! } + public var Common_Cancel: String { return self._s[3559]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[3560]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3561]! } + public var Appearance_TintAllColors: String { return self._s[3562]! } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3561]!, self._r[3561]!, [_1]) + return formatWithArgumentRanges(self._s[3563]!, self._r[3563]!, [_1]) } - public var Conversation_ReportSpamConfirmation: String { return self._s[3562]! } - public var ChatSettings_Title: String { return self._s[3564]! } - public var Passport_PasswordReset: String { return self._s[3565]! } - public var SocksProxySetup_TypeNone: String { return self._s[3566]! } - public var EditTheme_Title: String { return self._s[3568]! } - public var PhoneNumberHelp_Help: String { return self._s[3569]! } - public var Checkout_EnterPassword: String { return self._s[3570]! } - public var Share_AuthTitle: String { return self._s[3572]! } - public var Activity_UploadingDocument: String { return self._s[3573]! } - public var State_Connecting: String { return self._s[3574]! } - public var Profile_MessageLifetime1w: String { return self._s[3575]! } - public var Conversation_ContextMenuReport: String { return self._s[3576]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3577]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[3578]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[3564]! } + public var ChatSettings_Title: String { return self._s[3566]! } + public var Passport_PasswordReset: String { return self._s[3567]! } + public var SocksProxySetup_TypeNone: String { return self._s[3568]! } + public var EditTheme_Title: String { return self._s[3570]! } + public var PhoneNumberHelp_Help: String { return self._s[3571]! } + public var Checkout_EnterPassword: String { return self._s[3572]! } + public var Share_AuthTitle: String { return self._s[3574]! } + public var Activity_UploadingDocument: String { return self._s[3575]! } + public var State_Connecting: String { return self._s[3576]! } + public var Profile_MessageLifetime1w: String { return self._s[3577]! } + public var Conversation_ContextMenuReport: String { return self._s[3578]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3579]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[3580]! } public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3579]!, self._r[3579]!, [_0]) + return formatWithArgumentRanges(self._s[3581]!, self._r[3581]!, [_0]) } - public var AuthSessions_Terminate: String { return self._s[3580]! } - public var Wallet_WordImport_CanNotRemember: String { return self._s[3581]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3582]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3583]! } - public var PhotoEditor_Set: String { return self._s[3584]! } - public var EmptyGroupInfo_Title: String { return self._s[3585]! } - public var Login_PadPhoneHelp: String { return self._s[3586]! } - public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3589]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3591]! } - public var NotificationsSound_Complete: String { return self._s[3592]! } - public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3593]! } - public var Group_Info_AdminLog: String { return self._s[3594]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3595]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3596]! } - public var Conversation_Admin: String { return self._s[3598]! } - public var Conversation_GifTooltip: String { return self._s[3599]! } - public var Passport_NotLoggedInMessage: String { return self._s[3600]! } + public var AuthSessions_Terminate: String { return self._s[3582]! } + public var Wallet_WordImport_CanNotRemember: String { return self._s[3583]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3584]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3585]! } + public var PhotoEditor_Set: String { return self._s[3586]! } + public var EmptyGroupInfo_Title: String { return self._s[3587]! } + public var Login_PadPhoneHelp: String { return self._s[3588]! } + public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3591]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3593]! } + public var NotificationsSound_Complete: String { return self._s[3594]! } + public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3595]! } + public var Group_Info_AdminLog: String { return self._s[3596]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3597]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3598]! } + public var Conversation_Admin: String { return self._s[3600]! } + public var Conversation_GifTooltip: String { return self._s[3601]! } + public var Passport_NotLoggedInMessage: String { return self._s[3602]! } public func AutoDownloadSettings_OnFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3602]!, self._r[3602]!, [_0]) + return formatWithArgumentRanges(self._s[3604]!, self._r[3604]!, [_0]) } - public var Profile_MessageLifetimeForever: String { return self._s[3603]! } - public var SharedMedia_EmptyTitle: String { return self._s[3605]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3607]! } - public var Username_Help: String { return self._s[3608]! } - public var DialogList_LanguageTooltip: String { return self._s[3610]! } - public var Map_LoadError: String { return self._s[3611]! } - public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3612]! } - public var Channel_AdminLog_AddMembers: String { return self._s[3613]! } - public var ArchivedChats_IntroTitle2: String { return self._s[3614]! } - public var Notification_Exceptions_NewException: String { return self._s[3615]! } - public var TwoStepAuth_EmailTitle: String { return self._s[3616]! } - public var WatchRemote_AlertText: String { return self._s[3617]! } + public var Profile_MessageLifetimeForever: String { return self._s[3605]! } + public var SharedMedia_EmptyTitle: String { return self._s[3607]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3609]! } + public var Username_Help: String { return self._s[3610]! } + public var DialogList_LanguageTooltip: String { return self._s[3612]! } + public var Map_LoadError: String { return self._s[3613]! } + public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3614]! } + public var Channel_AdminLog_AddMembers: String { return self._s[3615]! } + public var ArchivedChats_IntroTitle2: String { return self._s[3616]! } + public var Notification_Exceptions_NewException: String { return self._s[3617]! } + public var TwoStepAuth_EmailTitle: String { return self._s[3618]! } + public var WatchRemote_AlertText: String { return self._s[3619]! } public func Wallet_Send_ConfirmationText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3618]!, self._r[3618]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3620]!, self._r[3620]!, [_1, _2]) } - public var ChatSettings_ConnectionType_Title: String { return self._s[3621]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[3623]! } public func Settings_CheckPhoneNumberTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3622]!, self._r[3622]!, [_0]) + return formatWithArgumentRanges(self._s[3624]!, self._r[3624]!, [_0]) } - public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3623]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[3624]! } + public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3625]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[3626]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3625]!, self._r[3625]!, [_0]) + return formatWithArgumentRanges(self._s[3627]!, self._r[3627]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3626]!, self._r[3626]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3628]!, self._r[3628]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[3627]! } - public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3628]! } - public var Conversation_PrivateChannelTooltip: String { return self._s[3630]! } - public var ChatList_UndoArchiveText1: String { return self._s[3631]! } - public var AccessDenied_VideoMicrophone: String { return self._s[3632]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3633]! } - public var Cache_ClearNone: String { return self._s[3634]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[3635]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[3636]! } + public var Group_AdminLog_EmptyText: String { return self._s[3629]! } + public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3630]! } + public var Conversation_PrivateChannelTooltip: String { return self._s[3632]! } + public var Wallet_Created_ExportErrorText: String { return self._s[3633]! } + public var ChatList_UndoArchiveText1: String { return self._s[3634]! } + public var AccessDenied_VideoMicrophone: String { return self._s[3635]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3636]! } + public var Cache_ClearNone: String { return self._s[3637]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[3638]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[3639]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3637]!, self._r[3637]!, [_0]) - } - public var Passport_Identity_Country: String { return self._s[3638]! } - public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3639]!, self._r[3639]!, [_0]) - } - public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3640]!, self._r[3640]!, [_0]) } - public var Exceptions_AddToExceptions: String { return self._s[3641]! } - public var AccessDenied_Settings: String { return self._s[3642]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3643]! } - public var Month_ShortMay: String { return self._s[3644]! } - public var Compose_NewGroup: String { return self._s[3646]! } - public var Group_Setup_TypePrivate: String { return self._s[3648]! } - public var Login_PadPhoneHelpTitle: String { return self._s[3650]! } - public var Appearance_ThemeDayClassic: String { return self._s[3651]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3652]! } - public var AutoDownloadSettings_OffForAll: String { return self._s[3653]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3654]! } - public var Conversation_typing: String { return self._s[3656]! } - public var Undo_ScheduledMessagesCleared: String { return self._s[3657]! } - public var Paint_Masks: String { return self._s[3658]! } - public var Contacts_DeselectAll: String { return self._s[3659]! } - public var Username_InvalidTaken: String { return self._s[3660]! } - public var Call_StatusNoAnswer: String { return self._s[3661]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[3662]! } - public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3663]! } - public var Passport_Identity_Selfie: String { return self._s[3664]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[3665]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3666]! } - public var Conversation_ClearSecretHistory: String { return self._s[3667]! } - public var PeopleNearby_Description: String { return self._s[3669]! } - public var NetworkUsageSettings_Title: String { return self._s[3670]! } - public var Your_cards_security_code_is_invalid: String { return self._s[3672]! } + public var Passport_Identity_Country: String { return self._s[3641]! } + public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3642]!, self._r[3642]!, [_0]) + } + public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3643]!, self._r[3643]!, [_0]) + } + public var Exceptions_AddToExceptions: String { return self._s[3644]! } + public var AccessDenied_Settings: String { return self._s[3645]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3646]! } + public var Month_ShortMay: String { return self._s[3647]! } + public var Compose_NewGroup: String { return self._s[3649]! } + public var Group_Setup_TypePrivate: String { return self._s[3651]! } + public var Login_PadPhoneHelpTitle: String { return self._s[3653]! } + public var Appearance_ThemeDayClassic: String { return self._s[3654]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3655]! } + public var AutoDownloadSettings_OffForAll: String { return self._s[3656]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3657]! } + public var Conversation_typing: String { return self._s[3659]! } + public var Undo_ScheduledMessagesCleared: String { return self._s[3660]! } + public var Paint_Masks: String { return self._s[3661]! } + public var Contacts_DeselectAll: String { return self._s[3662]! } + public var Username_InvalidTaken: String { return self._s[3663]! } + public var Call_StatusNoAnswer: String { return self._s[3664]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[3665]! } + public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3666]! } + public var Passport_Identity_Selfie: String { return self._s[3667]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[3668]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3669]! } + public var Conversation_ClearSecretHistory: String { return self._s[3670]! } + public var PeopleNearby_Description: String { return self._s[3672]! } + public var NetworkUsageSettings_Title: String { return self._s[3673]! } + public var Your_cards_security_code_is_invalid: String { return self._s[3675]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3674]!, self._r[3674]!, [_0]) + return formatWithArgumentRanges(self._s[3677]!, self._r[3677]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3675]!, self._r[3675]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3678]!, self._r[3678]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[3677]! } - public var VoiceOver_Navigation_Search: String { return self._s[3678]! } - public var Map_LiveLocationTitle: String { return self._s[3679]! } - public var Login_InfoAvatarAdd: String { return self._s[3680]! } - public var Passport_Identity_FilesView: String { return self._s[3681]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[3682]! } - public var Privacy_Calls_NeverAllow: String { return self._s[3683]! } - public var VoiceOver_Chat_File: String { return self._s[3684]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[3680]! } + public var VoiceOver_Navigation_Search: String { return self._s[3681]! } + public var Map_LiveLocationTitle: String { return self._s[3682]! } + public var Login_InfoAvatarAdd: String { return self._s[3683]! } + public var Passport_Identity_FilesView: String { return self._s[3684]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[3685]! } + public var Privacy_Calls_NeverAllow: String { return self._s[3686]! } + public var VoiceOver_Chat_File: String { return self._s[3687]! } + public var Wallet_Settings_DeleteWalletInfo: String { return self._s[3688]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3685]!, self._r[3685]!, [_0]) + return formatWithArgumentRanges(self._s[3689]!, self._r[3689]!, [_0]) } - public var ContactInfo_PhoneNumberHidden: String { return self._s[3686]! } - public var TwoStepAuth_ConfirmationText: String { return self._s[3687]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3688]! } + public var ContactInfo_PhoneNumberHidden: String { return self._s[3690]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[3691]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3692]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3689]!, self._r[3689]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3693]!, self._r[3693]!, [_1, _2, _3]) } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3690]! } - public var Wallet_Intro_CreateErrorText: String { return self._s[3691]! } - public var Tour_Title2: String { return self._s[3692]! } - public var Wallet_Sent_ViewWallet: String { return self._s[3693]! } - public var Conversation_FileOpenIn: String { return self._s[3694]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3695]! } - public var Wallet_Send_ErrorInvalidAddress: String { return self._s[3696]! } - public var Wallpaper_Set: String { return self._s[3697]! } - public var Passport_Identity_Translations: String { return self._s[3699]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3694]! } + public var Wallet_Intro_CreateErrorText: String { return self._s[3695]! } + public var Tour_Title2: String { return self._s[3696]! } + public var Wallet_Sent_ViewWallet: String { return self._s[3697]! } + public var Conversation_FileOpenIn: String { return self._s[3698]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3699]! } + public var Wallet_Send_ErrorInvalidAddress: String { return self._s[3700]! } + public var Wallpaper_Set: String { return self._s[3701]! } + public var Passport_Identity_Translations: String { return self._s[3703]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3700]!, self._r[3700]!, [_0]) + return formatWithArgumentRanges(self._s[3704]!, self._r[3704]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[3701]! } + public var Channel_LeaveChannel: String { return self._s[3705]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3702]!, self._r[3702]!, [_1]) + return formatWithArgumentRanges(self._s[3706]!, self._r[3706]!, [_1]) } - public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3704]! } - public var PhotoEditor_HighlightsTint: String { return self._s[3705]! } - public var Passport_Email_Delete: String { return self._s[3706]! } - public var Conversation_Mute: String { return self._s[3708]! } - public var Channel_AddBotAsAdmin: String { return self._s[3709]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[3711]! } - public var Channel_Management_LabelOwner: String { return self._s[3713]! } + public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3708]! } + public var PhotoEditor_HighlightsTint: String { return self._s[3709]! } + public var Passport_Email_Delete: String { return self._s[3710]! } + public var Conversation_Mute: String { return self._s[3712]! } + public var Channel_AddBotAsAdmin: String { return self._s[3713]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[3715]! } + public var Channel_Management_LabelOwner: String { return self._s[3717]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3714]!, self._r[3714]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3718]!, self._r[3718]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[3715]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[3716]! } - public var Common_No: String { return self._s[3717]! } - public var Weekday_Sunday: String { return self._s[3718]! } - public var Notification_Reply: String { return self._s[3719]! } - public var Conversation_ViewMessage: String { return self._s[3720]! } + public var Calls_CallTabDescription: String { return self._s[3719]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[3720]! } + public var Common_No: String { return self._s[3721]! } + public var Weekday_Sunday: String { return self._s[3722]! } + public var Notification_Reply: String { return self._s[3723]! } + public var Conversation_ViewMessage: String { return self._s[3724]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3721]!, self._r[3721]!, [_0]) + return formatWithArgumentRanges(self._s[3725]!, self._r[3725]!, [_0]) } public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3722]!, self._r[3722]!, [_0]) + return formatWithArgumentRanges(self._s[3726]!, self._r[3726]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3723]! } - public var Wallet_Send_Title: String { return self._s[3724]! } - public var Message_PinnedDocumentMessage: String { return self._s[3725]! } - public var Wallet_Info_RefreshErrorText: String { return self._s[3726]! } - public var DialogList_TabTitle: String { return self._s[3728]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[3729]! } - public var Passport_FieldEmail: String { return self._s[3730]! } - public var Conversation_UnpinMessageAlert: String { return self._s[3731]! } - public var Passport_Address_TypeBankStatement: String { return self._s[3732]! } - public var Wallet_SecureStorageReset_Title: String { return self._s[3733]! } - public var Passport_Identity_ExpiryDate: String { return self._s[3734]! } - public var Privacy_Calls_P2P: String { return self._s[3735]! } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3727]! } + public var Wallet_Send_Title: String { return self._s[3728]! } + public var Message_PinnedDocumentMessage: String { return self._s[3729]! } + public var Wallet_Info_RefreshErrorText: String { return self._s[3730]! } + public var DialogList_TabTitle: String { return self._s[3732]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[3733]! } + public var Passport_FieldEmail: String { return self._s[3734]! } + public var Conversation_UnpinMessageAlert: String { return self._s[3735]! } + public var Passport_Address_TypeBankStatement: String { return self._s[3736]! } + public var Wallet_SecureStorageReset_Title: String { return self._s[3737]! } + public var Passport_Identity_ExpiryDate: String { return self._s[3738]! } + public var Privacy_Calls_P2P: String { return self._s[3739]! } public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3737]!, self._r[3737]!, [_0]) + return formatWithArgumentRanges(self._s[3741]!, self._r[3741]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[3738]! } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[3742]! } public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3739]!, self._r[3739]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3743]!, self._r[3743]!, [_1, _2]) } - public var Stickers_ClearRecent: String { return self._s[3740]! } - public var EnterPasscode_ChangeTitle: String { return self._s[3741]! } - public var Passport_InfoText: String { return self._s[3742]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3743]! } + public var Stickers_ClearRecent: String { return self._s[3744]! } + public var EnterPasscode_ChangeTitle: String { return self._s[3745]! } + public var Passport_InfoText: String { return self._s[3746]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3747]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3744]!, self._r[3744]!, [_0]) + return formatWithArgumentRanges(self._s[3748]!, self._r[3748]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3745]!, self._r[3745]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3749]!, self._r[3749]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3746]! } - public var ScheduledMessages_PollUnavailable: String { return self._s[3747]! } - public var VoiceOver_Navigation_Compose: String { return self._s[3748]! } - public var Passport_Identity_EditDriversLicense: String { return self._s[3749]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[3751]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3752]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3750]! } + public var ScheduledMessages_PollUnavailable: String { return self._s[3751]! } + public var VoiceOver_Navigation_Compose: String { return self._s[3752]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[3753]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[3755]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3756]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3753]!, self._r[3753]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3757]!, self._r[3757]!, [_1, _2]) } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3755]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3759]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3757]!, self._r[3757]!, [_0]) + return formatWithArgumentRanges(self._s[3761]!, self._r[3761]!, [_0]) } - public var DialogList_Unread: String { return self._s[3758]! } + public var DialogList_Unread: String { return self._s[3762]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3759]!, self._r[3759]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3763]!, self._r[3763]!, [_1, _2]) } public func Updated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3760]!, self._r[3760]!, [_0]) + return formatWithArgumentRanges(self._s[3764]!, self._r[3764]!, [_0]) } - public var User_DeletedAccount: String { return self._s[3761]! } - public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3762]! } + public var User_DeletedAccount: String { return self._s[3765]! } + public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3766]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3763]!, self._r[3763]!, [_0]) + return formatWithArgumentRanges(self._s[3767]!, self._r[3767]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[3764]! } - public var SharedMedia_CategoryMedia: String { return self._s[3765]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3766]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3767]! } - public var Watch_ChatList_Compose: String { return self._s[3768]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3769]! } - public var AutoDownloadSettings_Delimeter: String { return self._s[3770]! } - public var Watch_Microphone_Access: String { return self._s[3771]! } - public var Group_Setup_HistoryHeader: String { return self._s[3772]! } - public var Map_SetThisLocation: String { return self._s[3773]! } - public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[3774]! } - public var Activity_UploadingPhoto: String { return self._s[3775]! } - public var Conversation_Edit: String { return self._s[3777]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[3778]! } - public var Login_TermsOfServiceDecline: String { return self._s[3779]! } - public var Message_PinnedContactMessage: String { return self._s[3780]! } + public var UserInfo_NotificationsDefault: String { return self._s[3768]! } + public var SharedMedia_CategoryMedia: String { return self._s[3769]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3770]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3771]! } + public var Watch_ChatList_Compose: String { return self._s[3772]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3773]! } + public var AutoDownloadSettings_Delimeter: String { return self._s[3774]! } + public var Watch_Microphone_Access: String { return self._s[3775]! } + public var Group_Setup_HistoryHeader: String { return self._s[3776]! } + public var Map_SetThisLocation: String { return self._s[3777]! } + public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[3778]! } + public var Activity_UploadingPhoto: String { return self._s[3779]! } + public var Conversation_Edit: String { return self._s[3781]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[3782]! } + public var Login_TermsOfServiceDecline: String { return self._s[3783]! } + public var Message_PinnedContactMessage: String { return self._s[3784]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3781]!, self._r[3781]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3785]!, self._r[3785]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3782]!, self._r[3782]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[3786]!, self._r[3786]!, [_1, _2, _3, _4, _5]) } - public var Appearance_LargeEmoji: String { return self._s[3783]! } - public var TwoStepAuth_AdditionalPassword: String { return self._s[3785]! } - public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[3786]! } + public var Appearance_LargeEmoji: String { return self._s[3787]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[3789]! } + public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[3790]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3787]!, self._r[3787]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3791]!, self._r[3791]!, [_1, _2]) } - public var Passport_Phone_EnterOtherNumber: String { return self._s[3788]! } - public var Message_PinnedPhotoMessage: String { return self._s[3789]! } - public var Passport_FieldPhone: String { return self._s[3790]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3791]! } - public var ChatSettings_AutoPlayGifs: String { return self._s[3792]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[3794]! } - public var Conversation_Call: String { return self._s[3795]! } - public var Common_TakePhoto: String { return self._s[3797]! } - public var Group_EditAdmin_RankTitle: String { return self._s[3798]! } - public var Wallet_Receive_CommentHeader: String { return self._s[3799]! } - public var Channel_NotificationLoading: String { return self._s[3800]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[3792]! } + public var Message_PinnedPhotoMessage: String { return self._s[3793]! } + public var Passport_FieldPhone: String { return self._s[3794]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3795]! } + public var ChatSettings_AutoPlayGifs: String { return self._s[3796]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[3798]! } + public var Conversation_Call: String { return self._s[3799]! } + public var Common_TakePhoto: String { return self._s[3801]! } + public var Group_EditAdmin_RankTitle: String { return self._s[3802]! } + public var Wallet_Receive_CommentHeader: String { return self._s[3803]! } + public var Channel_NotificationLoading: String { return self._s[3804]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3801]!, self._r[3801]!, [_0]) - } - public func ScheduledMessages_ScheduledDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3802]!, self._r[3802]!, [_0]) - } - public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3803]!, self._r[3803]!, [_1]) - } - public var Permissions_SiriTitle_v0: String { return self._s[3804]! } - public func VoiceOver_Chat_VoiceMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3805]!, self._r[3805]!, [_0]) } - public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { + public func ScheduledMessages_ScheduledDate(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3806]!, self._r[3806]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[3807]! } - public var Common_edit: String { return self._s[3808]! } - public var PrivacySettings_AuthSessions: String { return self._s[3809]! } - public var Month_ShortJune: String { return self._s[3810]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3811]! } - public var Call_ReportSend: String { return self._s[3812]! } - public var Watch_LastSeen_JustNow: String { return self._s[3813]! } - public var Notifications_MessageNotifications: String { return self._s[3814]! } - public var WallpaperSearch_ColorGreen: String { return self._s[3815]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3817]! } - public var Group_Status: String { return self._s[3818]! } + public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3807]!, self._r[3807]!, [_1]) + } + public var Permissions_SiriTitle_v0: String { return self._s[3808]! } + public func VoiceOver_Chat_VoiceMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3809]!, self._r[3809]!, [_0]) + } + public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3810]!, self._r[3810]!, [_0]) + } + public var Channel_MessagePhotoRemoved: String { return self._s[3811]! } + public var Common_edit: String { return self._s[3812]! } + public var PrivacySettings_AuthSessions: String { return self._s[3813]! } + public var Month_ShortJune: String { return self._s[3814]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3815]! } + public var Call_ReportSend: String { return self._s[3816]! } + public var Watch_LastSeen_JustNow: String { return self._s[3817]! } + public var Notifications_MessageNotifications: String { return self._s[3818]! } + public var WallpaperSearch_ColorGreen: String { return self._s[3819]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3821]! } + public var Group_Status: String { return self._s[3822]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3819]!, self._r[3819]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3823]!, self._r[3823]!, [_0, _1]) } - public var TextFormat_AddLinkTitle: String { return self._s[3820]! } - public var ShareMenu_ShareTo: String { return self._s[3821]! } - public var Conversation_Moderate_Ban: String { return self._s[3822]! } + public var TextFormat_AddLinkTitle: String { return self._s[3824]! } + public var ShareMenu_ShareTo: String { return self._s[3825]! } + public var Conversation_Moderate_Ban: String { return self._s[3826]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3823]!, self._r[3823]!, [_0]) + return formatWithArgumentRanges(self._s[3827]!, self._r[3827]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[3824]! } - public var Map_LiveLocationFor8Hours: String { return self._s[3825]! } + public var SharedMedia_ViewInChat: String { return self._s[3828]! } + public var Map_LiveLocationFor8Hours: String { return self._s[3829]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3826]!, self._r[3826]!, [_1]) + return formatWithArgumentRanges(self._s[3830]!, self._r[3830]!, [_1]) } public func PUSH_PINNED_POLL(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3827]!, self._r[3827]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3831]!, self._r[3831]!, [_1, _2]) } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3829]!, self._r[3829]!, [_0]) + return formatWithArgumentRanges(self._s[3833]!, self._r[3833]!, [_0]) } - public var Map_OpenInHereMaps: String { return self._s[3830]! } - public var Appearance_ReduceMotion: String { return self._s[3831]! } + public var Map_OpenInHereMaps: String { return self._s[3834]! } + public var Appearance_ReduceMotion: String { return self._s[3835]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3832]!, self._r[3832]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3836]!, self._r[3836]!, [_1, _2]) } - public var Channel_Setup_TypePublicHelp: String { return self._s[3833]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[3834]! } - public var PhotoEditor_Skip: String { return self._s[3835]! } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + public var Channel_Setup_TypePublicHelp: String { return self._s[3837]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[3838]! } + public var PhotoEditor_Skip: String { return self._s[3839]! } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func ForwardedLocations(_ value: Int32) -> String { + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } - public func Updated_HoursAgo(_ value: Int32) -> String { + public func Media_ShareVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedFiles(_ value: Int32) -> String { + public func ForwardedVideoMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedContacts(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func MessageTimer_Minutes(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) } - public func Map_ETAHours(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, _1, _2) + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, _1, _2) + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_SelectedChats(_ value: Int32) -> String { + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Link(_ value: Int32) -> String { + public func ForwardedContacts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Hours(_ value: Int32) -> String { + public func Conversation_StatusSubscribers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, _1, _2) + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + public func ForwardedPhotos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, _1, _2) + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, _1, _2) + public func Theme_UsersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { + public func Updated_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_StatusOnline(_ value: Int32) -> String { + public func Notification_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedGifs(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func MessageTimer_Months(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + public func SharedMedia_Link(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) } - public func UserCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, _1, _2) } - public func MessageTimer_ShortDays(_ value: Int32) -> String { + public func ForwardedPolls(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) } - public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_StickerCount(_ value: Int32) -> String { + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteExpires_Minutes(_ value: Int32) -> String { + public func Passport_Scans(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func Contacts_ImportersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, _1, _2) + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) } - public func Invitation_Members(_ value: Int32) -> String { + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_ShareVideo(_ value: Int32) -> String { + public func QuickSend_Photos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + public func Call_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func StickerPack_StickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + public func ForwardedLocations(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { + public func MuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_ShareItem(_ value: Int32) -> String { + public func AttachmentMenu_SendItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Passport_Scans(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func MessageTimer_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteExpires_Hours(_ value: Int32) -> String { + public func Call_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + public func MessageTimer_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) @@ -4574,331 +4582,327 @@ public final class PresentationStrings { let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) } - public func Contacts_ImportersCount(_ value: Int32) -> String { + public func Conversation_SelectedMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedPolls(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Years(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) - } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) - } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedMessages(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Weeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_SharePhoto(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedStickers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Updated_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPhotos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Conversation_SelectedMessages(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, _1, _2) } public func Map_ETAMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedVideos(_ value: Int32) -> String { + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) } - public func Theme_UsersCount(_ value: Int32) -> String { + public func UserCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Video(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) - } - public func QuickSend_Photos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusMembers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideoMessages(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortHours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) } public func Call_ShortSeconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Years(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusOnline(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_File(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Updated_HoursAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Months(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Weeks(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ChatList_SelectedChats(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Invitation_Members(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, _0, _1) + } + public func ForwardedMessages(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func MessageTimer_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift index 903f3c4419..ec81eb3ae1 100644 --- a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift +++ b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift @@ -565,7 +565,7 @@ public struct PresentationResourcesChat { public static func chatHistoryNavigationButtonBadgeImage(_ theme: PresentationTheme) -> UIImage? { return theme.image(PresentationResourceKey.chatHistoryNavigationButtonBadgeImage.rawValue, { theme in - return generateStretchableFilledCircleImage(diameter: 18.0, color: theme.chat.historyNavigation.badgeBackgroundColor, strokeColor: theme.chat.historyNavigation.badgeStrokeColor, strokeWidth: 1.0, backgroundColor: nil) + return generateFilledCircleImage(diameter: 18.0, color: theme.chat.historyNavigation.badgeBackgroundColor, strokeColor: theme.chat.historyNavigation.badgeStrokeColor, strokeWidth: 1.0, backgroundColor: nil) }) } diff --git a/submodules/TelegramUI/TelegramUI/AppDelegate.swift b/submodules/TelegramUI/TelegramUI/AppDelegate.swift index 8eee6c7913..55b3a7ae91 100644 --- a/submodules/TelegramUI/TelegramUI/AppDelegate.swift +++ b/submodules/TelegramUI/TelegramUI/AppDelegate.swift @@ -231,6 +231,8 @@ final class SharedApplicationContext { private let deviceToken = Promise(nil) + private var cloudDataContext: Any? + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { precondition(!testIsLaunched) testIsLaunched = true @@ -240,7 +242,6 @@ final class SharedApplicationContext { let launchStartTime = CFAbsoluteTimeGetCurrent() - let statusBarHost = ApplicationStatusBarHost() let (window, hostView) = nativeWindowHostView() self.mainWindow = Window1(hostView: hostView, statusBarHost: statusBarHost) @@ -248,6 +249,8 @@ final class SharedApplicationContext { self.window = window self.nativeWindow = window + self.cloudDataContext = makeCloudDataContext() + let clearNotificationsManager = ClearNotificationsManager(getNotificationIds: { completion in if #available(iOS 10.0, *) { UNUserNotificationCenter.current().getDeliveredNotifications(completionHandler: { notifications in @@ -368,7 +371,7 @@ final class SharedApplicationContext { |> map { token in let data = buildConfig.bundleData(withAppToken: token) if let data = data, let jsonString = String(data: data, encoding: .utf8) { - Logger.shared.log("data", "\(jsonString)") + //Logger.shared.log("data", "\(jsonString)") } else { Logger.shared.log("data", "can't deserialize") } diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index 52042de4a5..7152957ee9 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -5777,7 +5777,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G self.recorderFeedback?.prepareImpact(.light) } - self.videoRecorder.set(.single(legacyInstantVideoController(theme: self.presentationData.theme, panelFrame: currentInputPanelFrame, context: self.context, peerId: peerId, slowmodeState: !self.presentationInterfaceState.isScheduledMessages ? self.presentationInterfaceState.slowmodeState : nil, send: { [weak self] message in + self.videoRecorder.set(.single(legacyInstantVideoController(theme: self.presentationData.theme, panelFrame: self.view.convert(currentInputPanelFrame, to: nil), context: self.context, peerId: peerId, slowmodeState: !self.presentationInterfaceState.isScheduledMessages ? self.presentationInterfaceState.slowmodeState : nil, send: { [weak self] message in if let strongSelf = self { let replyMessageId = strongSelf.presentationInterfaceState.interfaceState.replyMessageId strongSelf.chatDisplayNode.setupSendActionOnViewUpdate({ @@ -5831,7 +5831,8 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } }) case .send: - let _ = (audioRecorderValue.takenRecordedData() |> deliverOnMainQueue).start(next: { [weak self] data in + let _ = (audioRecorderValue.takenRecordedData() + |> deliverOnMainQueue).start(next: { [weak self] data in if let strongSelf = self, let data = data { if data.duration < 0.5 { strongSelf.recorderFeedback?.error() diff --git a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift index e4eb62aa80..e894672ebe 100644 --- a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift @@ -908,7 +908,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { let menuHeight = controller.controllerNode.updateLayout(layout: layout, horizontalOrigin: globalSelfOrigin.x, transition: transition) ensureTopInsetForOverlayHighlightedItems = menuHeight - let bottomInset = containerInsets.bottom + inputPanelsHeight + UIScreenPixel + let bottomInset = containerInsets.bottom + inputPanelsHeight let bottomFrame = CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - bottomInset), size: CGSize(width: layout.size.width, height: max(0.0, bottomInset - (layout.inputHeight ?? 0.0)))) let messageActionSheetBottomDimNode: ASDisplayNode @@ -1077,8 +1077,8 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { transition.updateAlpha(node: accessoryPanelNode, alpha: 1.0) } - let inputContextPanelsFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - inputPanelsHeight - insets.top - UIScreenPixel))) - let inputContextPanelsOverMainPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - (inputPanelSize == nil ? CGFloat(0.0) : inputPanelSize!.height) - insets.top - UIScreenPixel))) + let inputContextPanelsFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - inputPanelsHeight - insets.top))) + let inputContextPanelsOverMainPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - (inputPanelSize == nil ? CGFloat(0.0) : inputPanelSize!.height) - insets.top))) if let inputContextPanelNode = self.inputContextPanelNode { let panelFrame = inputContextPanelNode.placement == .overTextInput ? inputContextPanelsOverMainPanelFrame : inputContextPanelsFrame diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift index 849e41666d..21202879a2 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift @@ -381,6 +381,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode } self.tapRecognizer = recognizer self.view.addGestureRecognizer(recognizer) + self.view.isExclusiveTouch = true let replyRecognizer = ChatSwipeToReplyRecognizer(target: self, action: #selector(self.swipeToReplyGesture(_:))) replyRecognizer.shouldBegin = { [weak self] in diff --git a/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift b/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift index c274d8502b..39f7a1426b 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift @@ -21,7 +21,7 @@ final class InstantVideoControllerRecordingStatus { } } -final class InstantVideoController: LegacyController { +final class InstantVideoController: LegacyController, StandalonePresentableController { private var captureController: TGVideoMessageCaptureController? var onDismiss: (() -> Void)? diff --git a/submodules/TelegramUI/TelegramUI/PeerSelectionController.swift b/submodules/TelegramUI/TelegramUI/PeerSelectionController.swift index f48b7cdbcb..37f441d94b 100644 --- a/submodules/TelegramUI/TelegramUI/PeerSelectionController.swift +++ b/submodules/TelegramUI/TelegramUI/PeerSelectionController.swift @@ -155,9 +155,15 @@ public final class PeerSelectionControllerImpl: ViewController, PeerSelectionCon } } + var isProcessingContentOffsetChanged = false self.peerSelectionNode.contentOffsetChanged = { [weak self] offset in + if isProcessingContentOffsetChanged { + return + } + isProcessingContentOffsetChanged = true if let strongSelf = self, let searchContentNode = strongSelf.searchContentNode { searchContentNode.updateListVisibleContentOffset(offset) + isProcessingContentOffsetChanged = false } } diff --git a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping index 81184a87ad..0629e60996 100644 Binary files a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping and b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletCreated.tgs b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletCreated.tgs index f5bac9d80b..4e87c321ed 100644 Binary files a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletCreated.tgs and b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletCreated.tgs differ diff --git a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletDone.tgs b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletDone.tgs new file mode 100644 index 0000000000..456cc1e2fe Binary files /dev/null and b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletDone.tgs differ diff --git a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletEmpty.tgs b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletEmpty.tgs index b33b54599f..e4b8e01649 100644 Binary files a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletEmpty.tgs and b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletEmpty.tgs differ diff --git a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletNotAvailable.tgs b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletNotAvailable.tgs new file mode 100644 index 0000000000..9285160db5 Binary files /dev/null and b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletNotAvailable.tgs differ diff --git a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletWordCheck.tgs b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletWordCheck.tgs index 9008fc51e2..3a35762f4e 100644 Binary files a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletWordCheck.tgs and b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletWordCheck.tgs differ diff --git a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletWordList.tgs b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletWordList.tgs index 278b1531b6..d0bd460e3f 100644 Binary files a/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletWordList.tgs and b/submodules/TelegramUI/TelegramUI/Resources/WalletAnimations/WalletWordList.tgs differ diff --git a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift index 8414b342a2..0d3fa90d9e 100644 --- a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift +++ b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift @@ -17,6 +17,7 @@ import UrlHandling import WalletUI import LegacyMediaPickerUI import LocalMediaResources +import OverlayStatusController private enum CallStatusText: Equatable { case none @@ -1031,10 +1032,11 @@ public final class SharedAccountContextImpl: SharedAccountContext { ) |> deliverOnMainQueue).start(next: { wallets, currentPublicKey, preferences in let appConfiguration = preferences.values[PreferencesKeys.appConfiguration] as? AppConfiguration ?? .defaultValue - guard let config = WalletConfiguration.with(appConfiguration: appConfiguration).config else { + let walletConfiguration = WalletConfiguration.with(appConfiguration: appConfiguration) + guard let config = walletConfiguration.config, let blockchainName = walletConfiguration.blockchainName else { return } - let tonContext = storedContext.context(config: config) + let tonContext = storedContext.context(config: config, blockchainName: blockchainName) if wallets.wallets.isEmpty { if let _ = currentPublicKey { @@ -1044,15 +1046,20 @@ public final class SharedAccountContextImpl: SharedAccountContext { } } else { let walletInfo = wallets.wallets[0].info + let exportCompleted = wallets.wallets[0].exportCompleted if let currentPublicKey = currentPublicKey { if currentPublicKey == walletInfo.encryptedSecret.publicKey { let _ = (walletAddress(publicKey: walletInfo.publicKey, tonInstance: tonContext.instance) |> deliverOnMainQueue).start(next: { address in switch walletContext { - case .generic: - present(WalletInfoScreen(context: context, tonContext: tonContext, walletInfo: walletInfo, address: address)) - case let .send(address, amount, comment): - present(walletSendScreen(context: context, tonContext: tonContext, randomId: arc4random64(), walletInfo: walletInfo, address: address, amount: amount, comment: comment)) + case .generic: + if exportCompleted { + present(WalletInfoScreen(context: context, tonContext: tonContext, walletInfo: walletInfo, address: address, enableDebugActions: !GlobalExperimentalSettings.isAppStoreBuild)) + } else { + present(WalletSplashScreen(context: context, tonContext: tonContext, mode: .created(walletInfo, nil), walletCreatedPreloadState: nil)) + } + case let .send(address, amount, comment): + present(walletSendScreen(context: context, tonContext: tonContext, randomId: arc4random64(), walletInfo: walletInfo, address: address, amount: amount, comment: comment)) } }) diff --git a/submodules/WalletUI/Sources/WalletConfiguration.swift b/submodules/WalletUI/Sources/WalletConfiguration.swift index 68cc6548ad..fba2a7d7ee 100644 --- a/submodules/WalletUI/Sources/WalletConfiguration.swift +++ b/submodules/WalletUI/Sources/WalletConfiguration.swift @@ -3,18 +3,20 @@ import TelegramCore public struct WalletConfiguration { static var defaultValue: WalletConfiguration { - return WalletConfiguration(config: nil) + return WalletConfiguration(config: nil, blockchainName: nil) } public let config: String? + public let blockchainName: String? - fileprivate init(config: String?) { + fileprivate init(config: String?, blockchainName: String?) { self.config = config + self.blockchainName = blockchainName } public static func with(appConfiguration: AppConfiguration) -> WalletConfiguration { - if let data = appConfiguration.data, let config = data["wallet_config"] as? String { - return WalletConfiguration(config: config) + if let data = appConfiguration.data, let config = data["wallet_config"] as? String, let blockchainName = data["wallet_blockchain_name"] as? String { + return WalletConfiguration(config: config, blockchainName: blockchainName) } else { return .defaultValue } diff --git a/submodules/WalletUI/Sources/WalletInfoEmptyNode.swift b/submodules/WalletUI/Sources/WalletInfoEmptyNode.swift index 5d19edebbc..9abb113d20 100644 --- a/submodules/WalletUI/Sources/WalletInfoEmptyNode.swift +++ b/submodules/WalletUI/Sources/WalletInfoEmptyNode.swift @@ -71,10 +71,9 @@ final class WalletInfoEmptyItemNode: ListViewItemNode { self.animationNode = AnimatedStickerNode() if let path = getAppBundle().path(forResource: "WalletEmpty", ofType: "tgs") { - self.animationNode.setup(account: account, resource: .localFile(path), width: 280, height: 280, mode: .direct) + self.animationNode.setup(account: account, resource: .localFile(path), width: 280, height: 280, playbackMode: .once, mode: .direct) self.animationNode.visibility = true } - self.animationNode.visibility = true self.titleNode = TextNode() self.titleNode.displaysAsynchronously = false diff --git a/submodules/WalletUI/Sources/WalletInfoScreen.swift b/submodules/WalletUI/Sources/WalletInfoScreen.swift index 23a2ad8ad1..4ceca814bc 100644 --- a/submodules/WalletUI/Sources/WalletInfoScreen.swift +++ b/submodules/WalletUI/Sources/WalletInfoScreen.swift @@ -16,8 +16,9 @@ import AnimationUI public final class WalletInfoScreen: ViewController { private let context: AccountContext private let tonContext: TonContext - private let walletInfo: WalletInfo + private let walletInfo: WalletInfo? private let address: String + private let enableDebugActions: Bool private var presentationData: PresentationData @@ -26,11 +27,12 @@ public final class WalletInfoScreen: ViewController { return self._ready } - public init(context: AccountContext, tonContext: TonContext, walletInfo: WalletInfo, address: String) { + public init(context: AccountContext, tonContext: TonContext, walletInfo: WalletInfo?, address: String, enableDebugActions: Bool) { self.context = context self.tonContext = tonContext self.walletInfo = walletInfo self.address = address + self.enableDebugActions = enableDebugActions self.presentationData = context.sharedContext.currentPresentationData.with { $0 } @@ -45,7 +47,9 @@ public final class WalletInfoScreen: ViewController { self.navigationBar?.intrinsicCanTransitionInline = false self.navigationItem.backBarButtonItem = UIBarButtonItem(title: self.presentationData.strings.Common_Back, style: .plain, target: nil, action: nil) - self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: generateTintedImage(image: UIImage(bundleImageName: "Wallet/NavigationSettingsIcon"), color: .white), style: .plain, target: self, action: #selector(self.settingsPressed)) + if let _ = walletInfo { + self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: generateTintedImage(image: UIImage(bundleImageName: "Wallet/NavigationSettingsIcon"), color: .white), style: .plain, target: self, action: #selector(self.settingsPressed)) + } self.scrollToTop = { [weak self] in (self?.displayNode as? WalletInfoScreenNode)?.scrollToTop() @@ -61,25 +65,27 @@ public final class WalletInfoScreen: ViewController { } @objc private func settingsPressed() { - self.push(walletSettingsController(context: self.context, tonContext: self.tonContext, walletInfo: self.walletInfo)) + if let walletInfo = self.walletInfo { + self.push(walletSettingsController(context: self.context, tonContext: self.tonContext, walletInfo: walletInfo)) + } } override public func loadDisplayNode() { self.displayNode = WalletInfoScreenNode(account: self.context.account, tonContext: self.tonContext, presentationData: self.presentationData, walletInfo: self.walletInfo, address: self.address, sendAction: { [weak self] in - guard let strongSelf = self else { + guard let strongSelf = self, let walletInfo = strongSelf.walletInfo else { return } - strongSelf.push(walletSendScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, randomId: arc4random64(), walletInfo: strongSelf.walletInfo)) + strongSelf.push(walletSendScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, randomId: arc4random64(), walletInfo: walletInfo)) }, receiveAction: { [weak self] in - guard let strongSelf = self else { + guard let strongSelf = self, let walletInfo = strongSelf.walletInfo else { return } - strongSelf.push(walletReceiveScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: strongSelf.walletInfo, address: strongSelf.address)) + strongSelf.push(walletReceiveScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, address: strongSelf.address)) }, openTransaction: { [weak self] transaction in guard let strongSelf = self else { return } - strongSelf.push(walletTransactionInfoController(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: strongSelf.walletInfo, walletTransaction: transaction)) + strongSelf.push(walletTransactionInfoController(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: strongSelf.walletInfo, walletTransaction: transaction, enableDebugActions: strongSelf.enableDebugActions)) }, present: { [weak self] c, a in guard let strongSelf = self else { return @@ -154,16 +160,16 @@ private final class WalletInfoBalanceNode: ASDisplayNode { func update(width: CGFloat, scaleTransition: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat { let sideInset: CGFloat = 16.0 let balanceIconSpacing: CGFloat = scaleTransition * 0.0 + (1.0 - scaleTransition) * (-12.0) - let balanceVerticalIconOffset: CGFloat = scaleTransition * (-6.0) + (1.0 - scaleTransition) * (-2.0) + let balanceVerticalIconOffset: CGFloat = scaleTransition * (-2.0) + (1.0 - scaleTransition) * (-2.0) let balanceIntegralTextSize = self.balanceIntegralTextNode.updateLayout(CGSize(width: width - sideInset * 2.0, height: 200.0)) let balanceFractionalTextSize = self.balanceFractionalTextNode.updateLayout(CGSize(width: width - sideInset * 2.0, height: 200.0)) - let balanceIconSize = CGSize(width: 60.0, height: 60.0) + let balanceIconSize = CGSize(width: 50.0, height: 50.0) let integralScale: CGFloat = scaleTransition * 1.0 + (1.0 - scaleTransition) * 0.8 let fractionalScale: CGFloat = scaleTransition * 0.5 + (1.0 - scaleTransition) * 0.8 - let balanceOrigin = CGPoint(x: floor((width - balanceIntegralTextSize.width * integralScale - balanceFractionalTextSize.width * fractionalScale - balanceIconSpacing - balanceIconSize.width / 2.0) / 2.0), y: 0.0) + let balanceOrigin = CGPoint(x: floor((width - balanceIntegralTextSize.width * integralScale - balanceFractionalTextSize.width * fractionalScale - balanceIconSpacing + balanceIconSize.width / 2.0) / 2.0), y: 0.0) let balanceIntegralTextFrame = CGRect(origin: balanceOrigin, size: balanceIntegralTextSize) let apparentBalanceIntegralTextFrame = CGRect(origin: balanceIntegralTextFrame.origin, size: CGSize(width: balanceIntegralTextFrame.width * integralScale, height: balanceIntegralTextFrame.height * integralScale)) @@ -174,7 +180,7 @@ private final class WalletInfoBalanceNode: ASDisplayNode { balanceFractionalTextFrame.origin.y += balanceFractionalTextFrame.height * 0.5 * (0.8 - fractionalScale) let balanceIconFrame: CGRect - balanceIconFrame = CGRect(origin: CGPoint(x: apparentBalanceFractionalTextFrame.maxX + balanceIconSpacing * integralScale, y: balanceIntegralTextFrame.midY - balanceIconSize.height / 2.0 + balanceVerticalIconOffset), size: balanceIconSize) + balanceIconFrame = CGRect(origin: CGPoint(x: apparentBalanceIntegralTextFrame.minX - balanceIconSize.width - balanceIconSpacing * integralScale, y: balanceIntegralTextFrame.midY - balanceIconSize.height / 2.0 + balanceVerticalIconOffset), size: balanceIconSize) transition.updateFrameAsPositionAndBounds(node: self.balanceIntegralTextNode, frame: balanceIntegralTextFrame) transition.updateTransformScale(node: self.balanceIntegralTextNode, scale: integralScale) @@ -194,6 +200,8 @@ private final class WalletInfoHeaderNode: ASDisplayNode { var isRefreshing: Bool = false var timestamp: Int32? + private let hasActions: Bool + let balanceNode: WalletInfoBalanceNode private let refreshNode: WalletRefreshNode private let balanceSubtitleNode: ImmediateTextNode @@ -202,12 +210,14 @@ private final class WalletInfoHeaderNode: ASDisplayNode { private let headerBackgroundNode: ASDisplayNode private let headerCornerNode: ASImageNode - init(account: Account, presentationData: PresentationData, sendAction: @escaping () -> Void, receiveAction: @escaping () -> Void) { + init(account: Account, presentationData: PresentationData, hasActions: Bool, sendAction: @escaping () -> Void, receiveAction: @escaping () -> Void) { + self.hasActions = hasActions + self.balanceNode = WalletInfoBalanceNode(account: account, theme: presentationData.theme, dateTimeFormat: presentationData.dateTimeFormat) self.balanceSubtitleNode = ImmediateTextNode() self.balanceSubtitleNode.displaysAsynchronously = false - self.balanceSubtitleNode.attributedText = NSAttributedString(string: presentationData.strings.Wallet_Info_YourBalance, font: Font.regular(13), textColor: UIColor(white: 1.0, alpha: 0.6)) + self.balanceSubtitleNode.attributedText = NSAttributedString(string: hasActions ? presentationData.strings.Wallet_Info_YourBalance : "balance", font: Font.regular(13), textColor: UIColor(white: 1.0, alpha: 0.6)) self.headerBackgroundNode = ASDisplayNode() self.headerBackgroundNode.backgroundColor = .black @@ -233,8 +243,10 @@ private final class WalletInfoHeaderNode: ASDisplayNode { self.addSubnode(self.headerBackgroundNode) self.addSubnode(self.headerCornerNode) - self.addSubnode(self.receiveButtonNode) - self.addSubnode(self.sendButtonNode) + if hasActions { + self.addSubnode(self.receiveButtonNode) + self.addSubnode(self.sendButtonNode) + } self.addSubnode(self.balanceNode) self.addSubnode(self.balanceSubtitleNode) self.addSubnode(self.refreshNode) @@ -247,7 +259,7 @@ private final class WalletInfoHeaderNode: ASDisplayNode { } } - func update(size: CGSize, navigationHeight: CGFloat, offset: CGFloat, transition: ContainedViewLayoutTransition) { + func update(size: CGSize, navigationHeight: CGFloat, offset: CGFloat, transition: ContainedViewLayoutTransition, isScrolling: Bool) { let sideInset: CGFloat = 16.0 let buttonSideInset: CGFloat = 48.0 let titleSpacing: CGFloat = 10.0 @@ -255,6 +267,15 @@ private final class WalletInfoHeaderNode: ASDisplayNode { let buttonHeight: CGFloat = 50.0 let balanceSubtitleSpacing: CGFloat = 0.0 + let alphaTransition: ContainedViewLayoutTransition + if transition.isAnimated { + alphaTransition = transition + } else if isScrolling { + alphaTransition = .animated(duration: 0.2, curve: .easeInOut) + } else { + alphaTransition = transition + } + let minOffset = navigationHeight let maxOffset = size.height @@ -266,7 +287,7 @@ private final class WalletInfoHeaderNode: ASDisplayNode { let minButtonsOffset = maxOffset - buttonHeight - sideInset let maxButtonsOffset = maxOffset let buttonTransition: CGFloat = max(0.0, min(1.0, (effectiveOffset - minButtonsOffset) / (maxButtonsOffset - minButtonsOffset))) - let buttonAlpha = buttonTransition * 1.0 + let buttonAlpha: CGFloat = buttonTransition let balanceSubtitleSize = self.balanceSubtitleNode.updateLayout(CGSize(width: size.width - sideInset * 2.0, height: 200.0)) @@ -341,6 +362,7 @@ private final class WalletInfoHeaderNode: ASDisplayNode { self.balanceSubtitleNode.isHidden = false self.refreshNode.isHidden = false } + transition.updateFrame(node: self.receiveButtonNode, frame: receiveButtonFrame) transition.updateAlpha(node: self.receiveButtonNode, alpha: buttonAlpha) self.receiveButtonNode.updateLayout(width: receiveButtonFrame.width, transition: transition) @@ -438,11 +460,12 @@ private func preparedTransition(from fromEntries: [WalletInfoListEntry], to toEn return WalletInfoListTransaction(deletions: deletions, insertions: insertions, updates: updates) } + private final class WalletInfoScreenNode: ViewControllerTracingNode { private let account: Account private let tonContext: TonContext private var presentationData: PresentationData - private let walletInfo: WalletInfo + private let walletInfo: WalletInfo? private let address: String private let openTransaction: (WalletTransaction) -> Void @@ -476,7 +499,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { private var updateTimestampTimer: SwiftSignalKit.Timer? - init(account: Account, tonContext: TonContext, presentationData: PresentationData, walletInfo: WalletInfo, address: String, sendAction: @escaping () -> Void, receiveAction: @escaping () -> Void, openTransaction: @escaping (WalletTransaction) -> Void, present: @escaping (ViewController, Any?) -> Void) { + init(account: Account, tonContext: TonContext, presentationData: PresentationData, walletInfo: WalletInfo?, address: String, sendAction: @escaping () -> Void, receiveAction: @escaping () -> Void, openTransaction: @escaping (WalletTransaction) -> Void, present: @escaping (ViewController, Any?) -> Void) { self.account = account self.tonContext = tonContext self.presentationData = presentationData @@ -485,12 +508,13 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { self.openTransaction = openTransaction self.present = present - self.headerNode = WalletInfoHeaderNode(account: account, presentationData: presentationData, sendAction: sendAction, receiveAction: receiveAction) + self.headerNode = WalletInfoHeaderNode(account: account, presentationData: presentationData, hasActions: walletInfo != nil, sendAction: sendAction, receiveAction: receiveAction) self.listNode = ListView() self.listNode.verticalScrollIndicatorColor = UIColor(white: 0.0, alpha: 0.3) self.listNode.verticalScrollIndicatorFollowsOverscroll = true self.listNode.isHidden = true + self.listNode.view.disablesInteractiveModalDismiss = true self.loadingIndicator = UIActivityIndicatorView(style: .whiteLarge) @@ -527,7 +551,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { strongSelf.refreshTransactions() } } - strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: offset, transition: listTransition) + strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: offset, transition: listTransition, isScrolling: true) } } @@ -614,7 +638,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { let headerFrame = CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: visualHeaderHeight)) transition.updateFrame(node: self.headerNode, frame: headerFrame) - self.headerNode.update(size: headerFrame.size, navigationHeight: navigationHeight, offset: visualHeaderOffset, transition: transition) + self.headerNode.update(size: headerFrame.size, navigationHeight: navigationHeight, offset: visualHeaderOffset, transition: transition, isScrolling: false) transition.updateFrame(node: self.listNode, frame: CGRect(origin: CGPoint(x: 0.0, y: visualListOffset), size: layout.size)) @@ -656,7 +680,14 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { self.headerNode.isRefreshing = true - self.stateDisposable.set((getCombinedWalletState(postbox: self.account.postbox, walletInfo: self.walletInfo, tonInstance: self.tonContext.instance) + let subject: CombinedWalletStateSubject + if let walletInfo = self.walletInfo { + subject = .wallet(walletInfo) + } else { + subject = .address(self.address) + } + + self.stateDisposable.set((getCombinedWalletState(postbox: self.account.postbox, subject: subject, tonInstance: self.tonContext.instance) |> deliverOnMainQueue).start(next: { [weak self] value in guard let strongSelf = self else { return @@ -694,7 +725,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { strongSelf.headerNode.timestamp = Int32(clamping: combinedState.timestamp) if strongSelf.isReady, let (layout, navigationHeight) = strongSelf.validLayout { - strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: strongSelf.listOffset ?? 0.0, transition: .immediate) + strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: strongSelf.listOffset ?? 0.0, transition: .immediate, isScrolling: false) } strongSelf.transactionsLoaded(isReload: true, transactions: combinedState.topTransactions) @@ -702,7 +733,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { strongSelf.headerNode.isRefreshing = false if strongSelf.isReady, let (layout, navigationHeight) = strongSelf.validLayout { - strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: strongSelf.listOffset ?? 0.0, transition: .animated(duration: 0.2, curve: .easeInOut)) + strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: strongSelf.listOffset ?? 0.0, transition: .animated(duration: 0.2, curve: .easeInOut), isScrolling: false) } let wasReady = strongSelf.isReady @@ -710,7 +741,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { if strongSelf.isReady && !wasReady { if let (layout, navigationHeight) = strongSelf.validLayout { - strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: layout.size.height, transition: .immediate) + strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: layout.size.height, transition: .immediate, isScrolling: false) } strongSelf.becameReady(animated: strongSelf.didSetContentReady) @@ -733,7 +764,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { } if strongSelf.isReady, let (layout, navigationHeight) = strongSelf.validLayout { - strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: strongSelf.listOffset ?? 0.0, transition: .immediate) + strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: strongSelf.listOffset ?? 0.0, transition: .immediate, isScrolling: false) } strongSelf.loadingMoreTransactions = false @@ -742,7 +773,7 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { strongSelf.headerNode.isRefreshing = false if strongSelf.isReady, let (layout, navigationHeight) = strongSelf.validLayout { - strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: strongSelf.listOffset ?? 0.0, transition: .animated(duration: 0.2, curve: .easeInOut)) + strongSelf.headerNode.update(size: strongSelf.headerNode.bounds.size, navigationHeight: navigationHeight, offset: strongSelf.listOffset ?? 0.0, transition: .animated(duration: 0.2, curve: .easeInOut), isScrolling: false) } if !strongSelf.didSetContentReady { diff --git a/submodules/WalletUI/Sources/WalletInfoTransactionItem.swift b/submodules/WalletUI/Sources/WalletInfoTransactionItem.swift index ae3ce56992..b0978c5dc3 100644 --- a/submodules/WalletUI/Sources/WalletInfoTransactionItem.swift +++ b/submodules/WalletUI/Sources/WalletInfoTransactionItem.swift @@ -94,6 +94,7 @@ class WalletInfoTransactionItemNode: ListViewItemNode { private let bottomStripeNode: ASDisplayNode private let highlightedBackgroundNode: ASDisplayNode + private let titleSignNode: TextNode private let titleNode: TextNode private let directionNode: TextNode private let iconNode: ASImageNode @@ -113,6 +114,11 @@ class WalletInfoTransactionItemNode: ListViewItemNode { self.bottomStripeNode = ASDisplayNode() self.bottomStripeNode.isLayerBacked = true + self.titleSignNode = TextNode() + self.titleSignNode.isUserInteractionEnabled = false + self.titleSignNode.contentMode = .left + self.titleSignNode.contentsScale = UIScreen.main.scale + self.titleNode = TextNode() self.titleNode.isUserInteractionEnabled = false self.titleNode.contentMode = .left @@ -149,6 +155,7 @@ class WalletInfoTransactionItemNode: ListViewItemNode { super.init(layerBacked: false, dynamicBounce: false) + self.addSubnode(self.titleSignNode) self.addSubnode(self.titleNode) self.addSubnode(self.iconNode) self.addSubnode(self.directionNode) @@ -160,6 +167,7 @@ class WalletInfoTransactionItemNode: ListViewItemNode { } func asyncLayout() -> (_ item: WalletInfoTransactionItem, _ params: ListViewItemLayoutParams, _ hasPrevious: Bool, _ hasNext: Bool, _ dateAtBottom: Bool) -> (ListViewItemNodeLayout, () -> Void) { + let makeTitleSignLayout = TextNode.asyncLayout(self.titleSignNode) let makeTitleLayout = TextNode.asyncLayout(self.titleNode) let makeDirectionLayout = TextNode.asyncLayout(self.directionNode) let makeTextLayout = TextNode.asyncLayout(self.textNode) @@ -175,10 +183,11 @@ class WalletInfoTransactionItemNode: ListViewItemNode { updatedTheme = item.theme } let iconImage: UIImage? = transactionIcon - let iconSize = iconImage?.size ?? CGSize(width: 10.0, height: 10.0) + let iconSize = /*iconImage?.size ??*/ CGSize(width: 14.0, height: 12.0) let leftInset = 16.0 + params.leftInset + let sign: String let title: String let directionText: String let titleColor: UIColor @@ -186,7 +195,8 @@ class WalletInfoTransactionItemNode: ListViewItemNode { var text: String = "" var description: String = "" if transferredValue <= 0 { - title = "\(formatBalanceText(transferredValue, decimalSeparator: item.dateTimeFormat.decimalSeparator))" + sign = "-" + title = "\(formatBalanceText(-transferredValue, decimalSeparator: item.dateTimeFormat.decimalSeparator))" titleColor = item.theme.list.itemPrimaryTextColor if item.walletTransaction.outMessages.isEmpty { directionText = "" @@ -206,7 +216,8 @@ class WalletInfoTransactionItemNode: ListViewItemNode { } } } else { - title = "+\(formatBalanceText(transferredValue, decimalSeparator: item.dateTimeFormat.decimalSeparator))" + sign = "+" + title = "\(formatBalanceText(transferredValue, decimalSeparator: item.dateTimeFormat.decimalSeparator))" titleColor = item.theme.chatList.secretTitleColor directionText = item.strings.Wallet_Info_TransactionFrom if let inMessage = item.walletTransaction.inMessage { @@ -233,6 +244,10 @@ class WalletInfoTransactionItemNode: ListViewItemNode { titleString.append(NSAttributedString(string: title, font: Font.bold(17.0), textColor: titleColor)) } + let signString = NSAttributedString(string: sign, font: Font.bold(17.0), textColor: titleColor) + + let (titleSignLayout, titleSignApply) = makeTitleSignLayout(TextNodeLayoutArguments(attributedString: signString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - leftInset - 20.0 - dateLayout.size.width - directionLayout.size.width - iconSize.width, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) + let (titleLayout, titleApply) = makeTitleLayout(TextNodeLayoutArguments(attributedString: titleString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - leftInset - 20.0 - dateLayout.size.width - directionLayout.size.width - iconSize.width, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let (textLayout, textApply) = makeTextLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: text, font: textFont, textColor: item.theme.list.itemPrimaryTextColor), backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - leftInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) @@ -282,6 +297,7 @@ class WalletInfoTransactionItemNode: ListViewItemNode { strongSelf.iconNode.image = iconImage } + let _ = titleSignApply() let _ = titleApply() let _ = textApply() let _ = descriptionApply() @@ -299,13 +315,16 @@ class WalletInfoTransactionItemNode: ListViewItemNode { } strongSelf.bottomStripeNode.frame = CGRect(origin: CGPoint(x: leftInset, y: contentSize.height - separatorHeight), size: CGSize(width: params.width - leftInset, height: separatorHeight)) - let titleFrame = CGRect(origin: CGPoint(x: leftInset, y: topInset), size: titleLayout.size) - strongSelf.titleNode.frame = titleFrame + let titleSignFrame = CGRect(origin: CGPoint(x: leftInset, y: topInset), size: titleSignLayout.size) + strongSelf.titleSignNode.frame = titleSignFrame - let iconFrame = CGRect(origin: CGPoint(x: titleFrame.maxX + 3.0, y: titleFrame.minY + floor((titleFrame.height - iconSize.height) / 2.0) - 1.0), size: iconSize) + let iconFrame = CGRect(origin: CGPoint(x: titleSignFrame.maxX + 1.0, y: titleSignFrame.minY + floor((titleSignFrame.height - iconSize.height) / 2.0) - 1.0), size: iconSize) strongSelf.iconNode.frame = iconFrame - let directionFrame = CGRect(origin: CGPoint(x: iconFrame.maxX + 3.0, y: titleFrame.maxY - directionLayout.size.height - 1.0), size: directionLayout.size) + let titleFrame = CGRect(origin: CGPoint(x: iconFrame.maxX + 1.0, y: topInset), size: titleLayout.size) + strongSelf.titleNode.frame = titleFrame + + let directionFrame = CGRect(origin: CGPoint(x: titleFrame.maxX + 3.0, y: titleFrame.maxY - directionLayout.size.height - 1.0), size: directionLayout.size) strongSelf.directionNode.frame = directionFrame let textFrame = CGRect(origin: CGPoint(x: leftInset, y: titleFrame.maxY + titleSpacing), size: textLayout.size) @@ -402,17 +421,17 @@ private final class WalletInfoTransactionDateHeader: ListViewItemHeader { var timeinfo: tm = tm() localtime_r(&time, &timeinfo) - self.roundedTimestamp = timeinfo.tm_year * 100 + timeinfo.tm_mon self.month = timeinfo.tm_mon self.year = timeinfo.tm_year - self.id = Int64(self.roundedTimestamp) - if timestamp == Int32.max { self.localTimestamp = timestamp / (granularity) * (granularity) } else { self.localTimestamp = ((timestamp + timezoneOffset) / (granularity)) * (granularity) } + + self.roundedTimestamp = self.localTimestamp + self.id = Int64(self.roundedTimestamp) } let stickDirection: ListViewItemHeaderStickDirection = .top diff --git a/submodules/WalletUI/Sources/WalletPasscodeScreen.swift b/submodules/WalletUI/Sources/WalletPasscodeScreen.swift index ca22bc49ad..a169ec2217 100644 --- a/submodules/WalletUI/Sources/WalletPasscodeScreen.swift +++ b/submodules/WalletUI/Sources/WalletPasscodeScreen.swift @@ -80,7 +80,7 @@ public final class WalletPasscodeScreen: ViewController { } return true } - controllers.append(WalletSplashScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, mode: .sending(walletInfo, address, amount, comment, strongSelf.randomId), walletCreatedPreloadState: nil)) + controllers.append(WalletSplashScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, mode: .sending(walletInfo, address, amount, comment, strongSelf.randomId, Data()), walletCreatedPreloadState: nil)) strongSelf.view.endEditing(true) navigationController.setViewControllers(controllers, animated: true) } diff --git a/submodules/WalletUI/Sources/WalletSendScreen.swift b/submodules/WalletUI/Sources/WalletSendScreen.swift index ba9dc49709..a62fbd5ea1 100644 --- a/submodules/WalletUI/Sources/WalletSendScreen.swift +++ b/submodules/WalletUI/Sources/WalletSendScreen.swift @@ -14,8 +14,10 @@ import TextFormat import DeviceAccess import TelegramStringFormatting import UrlHandling +import OverlayStatusController private let balanceIcon = UIImage(bundleImageName: "Wallet/TransactionGem")?.precomposed() +private let textLimit: Int = 124 private final class WalletSendScreenArguments { let context: AccountContext @@ -226,7 +228,7 @@ private enum WalletSendScreenEntry: ItemListNodeEntry { case let .commentHeader(theme, text): return ItemListSectionHeaderItem(theme: theme, text: text, sectionId: self.section) case let .comment(theme, placeholder, value): - return ItemListMultilineInputItem(theme: theme, text: value, placeholder: placeholder, maxLength: ItemListMultilineInputItemTextLimit(value: 124, display: true), sectionId: self.section, style: .blocks, returnKeyType: .send, textUpdated: { text in + return ItemListMultilineInputItem(theme: theme, text: value, placeholder: placeholder, maxLength: ItemListMultilineInputItemTextLimit(value: textLimit, display: true, mode: .bytes), sectionId: self.section, style: .blocks, returnKeyType: .send, textUpdated: { text in arguments.updateText(WalletSendScreenEntryTag.comment, text) }, updatedFocus: { focus in if focus { @@ -279,6 +281,13 @@ public func walletSendScreen(context: AccountContext, tonContext: TonContext, ra statePromise.set(stateValue.modify { f($0) }) } + let serverSaltValue = Promise() + serverSaltValue.set(getServerWalletSalt(network: context.account.network) + |> map(Optional.init) + |> `catch` { _ -> Signal in + return .single(nil) + }) + var presentControllerImpl: ((ViewController, Any?) -> Void)? var presentInGlobalOverlayImpl: ((ViewController, Any?) -> Void)? var pushImpl: ((ViewController) -> Void)? @@ -372,7 +381,37 @@ public func walletSendScreen(context: AccountContext, tonContext: TonContext, ra }), TextAlertAction(type: .defaultAction, title: presentationData.strings.Wallet_Send_ConfirmationConfirm, action: { dismissAlertImpl?(false) dismissInputImpl?() - pushImpl?(WalletSplashScreen(context: context, tonContext: tonContext, mode: .sending(walletInfo, state.address, amount, state.comment, randomId), walletCreatedPreloadState: nil)) + + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + let progressSignal = Signal { subscriber in + let controller = OverlayStatusController(theme: presentationData.theme, strings: presentationData.strings, type: .loading(cancelled: nil)) + presentControllerImpl?(controller, nil) + return ActionDisposable { [weak controller] in + Queue.mainQueue().async() { + controller?.dismiss() + } + } + } + |> runOn(Queue.mainQueue()) + |> delay(0.15, queue: Queue.mainQueue()) + let progressDisposable = progressSignal.start() + + var serverSaltSignal = serverSaltValue.get() + |> take(1) + + serverSaltSignal = serverSaltSignal + |> afterDisposed { + Queue.mainQueue().async { + progressDisposable.dispose() + } + } + + let _ = (serverSaltSignal + |> deliverOnMainQueue).start(next: { serverSalt in + if let serverSalt = serverSalt { + pushImpl?(WalletSplashScreen(context: context, tonContext: tonContext, mode: .sending(walletInfo, state.address, amount, state.comment, randomId, serverSalt), walletCreatedPreloadState: nil)) + } + }) })], allowInputInset: false, dismissAutomatically: false) presentInGlobalOverlayImpl?(controller, nil) @@ -385,7 +424,7 @@ public func walletSendScreen(context: AccountContext, tonContext: TonContext, ra } }) - let walletState: Signal = getCombinedWalletState(postbox: context.account.postbox, walletInfo: walletInfo, tonInstance: tonContext.instance) + let walletState: Signal = getCombinedWalletState(postbox: context.account.postbox, subject: .wallet(walletInfo), tonInstance: tonContext.instance) |> map { combinedState in var state: WalletState? switch combinedState { @@ -416,7 +455,9 @@ public func walletSendScreen(context: AccountContext, tonContext: TonContext, ra let amount = amountValue(state.amount) var sendEnabled = false if let balance = balance { - sendEnabled = isValidAddress(state.address, exactLength: true) && amount > 0 && amount <= balance.balance && state.comment.count <= 124 + let textLength: Int = state.comment.data(using: .utf8, allowLossyConversion: true)?.count ?? 0 + + sendEnabled = isValidAddress(state.address, exactLength: true) && amount > 0 && amount <= balance.balance && textLength <= textLimit } let rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Wallet_Send_Send), style: .bold, enabled: sendEnabled, action: { arguments.proceed() diff --git a/submodules/WalletUI/Sources/WalletSettingsScreen.swift b/submodules/WalletUI/Sources/WalletSettingsScreen.swift index 89b9a4bfee..1f972444e8 100644 --- a/submodules/WalletUI/Sources/WalletSettingsScreen.swift +++ b/submodules/WalletUI/Sources/WalletSettingsScreen.swift @@ -31,12 +31,13 @@ private enum WalletSettingsSection: Int32 { private enum WalletSettingsEntry: ItemListNodeEntry { case exportWallet(PresentationTheme, String) case deleteWallet(PresentationTheme, String) + case deleteWalletInfo(PresentationTheme, String) var section: ItemListSectionId { switch self { case .exportWallet: return WalletSettingsSection.exportWallet.rawValue - case .deleteWallet: + case .deleteWallet, .deleteWalletInfo: return WalletSettingsSection.deleteWallet.rawValue } } @@ -47,6 +48,8 @@ private enum WalletSettingsEntry: ItemListNodeEntry { return 0 case .deleteWallet: return 1 + case .deleteWalletInfo: + return 2 } } @@ -64,6 +67,8 @@ private enum WalletSettingsEntry: ItemListNodeEntry { return ItemListActionItem(theme: theme, title: text, kind: .destructive, alignment: .natural, sectionId: self.section, style: .blocks, action: { arguments.deleteWallet() }) + case let .deleteWalletInfo(theme, text): + return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section) } } } @@ -76,6 +81,8 @@ private func walletSettingsControllerEntries(presentationData: PresentationData, entries.append(.exportWallet(presentationData.theme, "Export Wallet")) entries.append(.deleteWallet(presentationData.theme, presentationData.strings.Wallet_Settings_DeleteWallet)) + entries.append(.deleteWalletInfo(presentationData.theme, presentationData.strings.Wallet_Settings_DeleteWalletInfo)) + return entries } @@ -108,6 +115,7 @@ public func walletSettingsController(context: AccountContext, tonContext: TonCon let presentationData = context.sharedContext.currentPresentationData.with { $0 } let actionSheet = ActionSheetController(presentationTheme: presentationData.theme) actionSheet.setItemGroups([ActionSheetItemGroup(items: [ + ActionSheetTextItem(title: presentationData.strings.Wallet_Settings_DeleteWalletInfo), ActionSheetButtonItem(title: presentationData.strings.Wallet_Settings_DeleteWallet, color: .destructive, action: { [weak actionSheet] in actionSheet?.dismissAnimated() let controller = OverlayStatusController(theme: presentationData.theme, strings: presentationData.strings, type: .loading(cancelled: nil)) diff --git a/submodules/WalletUI/Sources/WalletSplashScreen.swift b/submodules/WalletUI/Sources/WalletSplashScreen.swift index 11992ecfb0..a6de99fec9 100644 --- a/submodules/WalletUI/Sources/WalletSplashScreen.swift +++ b/submodules/WalletUI/Sources/WalletSplashScreen.swift @@ -23,10 +23,10 @@ public enum WalletSecureStorageResetReason { public enum WalletSplashMode { case intro - case created(WalletInfo, [String]) + case created(WalletInfo, [String]?) case success(WalletInfo) case restoreFailed - case sending(WalletInfo, String, Int64, String, Int64) + case sending(WalletInfo, String, Int64, String, Int64, Data) case sent(WalletInfo, Int64) case secureStorageNotAvailable case secureStorageReset(WalletSecureStorageResetReason) @@ -36,7 +36,7 @@ public final class WalletSplashScreen: ViewController { private let context: AccountContext private let tonContext: TonContext private var presentationData: PresentationData - private let mode: WalletSplashMode + private var mode: WalletSplashMode private let walletCreatedPreloadState: Promise? @@ -56,7 +56,7 @@ public final class WalletSplashScreen: ViewController { self.walletCreatedPreloadState = walletCreatedPreloadState } else { self.walletCreatedPreloadState = Promise() - self.walletCreatedPreloadState?.set(getCombinedWalletState(postbox: context.account.postbox, walletInfo: walletInfo, tonInstance: tonContext.instance) + self.walletCreatedPreloadState?.set(getCombinedWalletState(postbox: context.account.postbox, subject: .wallet(walletInfo), tonInstance: tonContext.instance) |> `catch` { _ -> Signal in return .complete() }) @@ -66,7 +66,7 @@ public final class WalletSplashScreen: ViewController { self.walletCreatedPreloadState = walletCreatedPreloadState } else { self.walletCreatedPreloadState = Promise() - self.walletCreatedPreloadState?.set(getCombinedWalletState(postbox: context.account.postbox, walletInfo: walletInfo, tonInstance: tonContext.instance) + self.walletCreatedPreloadState?.set(getCombinedWalletState(postbox: context.account.postbox, subject: .wallet(walletInfo), tonInstance: tonContext.instance) |> `catch` { _ -> Signal in return .complete() }) @@ -86,12 +86,28 @@ public final class WalletSplashScreen: ViewController { case .intro: self.navigationItem.setLeftBarButton(UIBarButtonItem(title: self.presentationData.strings.Wallet_Intro_NotNow, style: .plain, target: self, action: #selector(self.backPressed)), animated: false) self.navigationItem.setRightBarButton(UIBarButtonItem(title: self.presentationData.strings.Wallet_Intro_ImportExisting, style: .plain, target: self, action: #selector(self.importPressed)), animated: false) - case let .sending(walletInfo, address, amount, textMessage, randomId): + case let .sending(walletInfo, address, amount, textMessage, randomId, serverSalt): self.navigationItem.setLeftBarButton(UIBarButtonItem(customDisplayNode: ASDisplayNode())!, animated: false) - self.sendGrams(walletInfo: walletInfo, address: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: false, randomId: randomId) - case .sent, .created: + let _ = (self.tonContext.keychain.decrypt(walletInfo.encryptedSecret) + |> deliverOnMainQueue).start(next: { [weak self] decryptedSecret in + guard let strongSelf = self else { + return + } + strongSelf.sendGrams(walletInfo: walletInfo, decryptedSecret: decryptedSecret, address: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: false, randomId: randomId, serverSalt: serverSalt) + }, error: { [weak self] _ in + guard let strongSelf = self else { + return + } + let text = strongSelf.presentationData.strings.Wallet_Send_ErrorDecryptionFailed + let controller = textAlertController(context: strongSelf.context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: { + self?.dismiss() + })]) + strongSelf.present(controller, in: .window(.root)) + strongSelf.dismiss() + }) + case .sent: self.navigationItem.setLeftBarButton(UIBarButtonItem(customDisplayNode: ASDisplayNode())!, animated: false) - case .restoreFailed, .secureStorageNotAvailable, .secureStorageReset: + case .restoreFailed, .secureStorageNotAvailable, .secureStorageReset, .created: break case .success: break @@ -112,8 +128,8 @@ public final class WalletSplashScreen: ViewController { self.push(WalletWordCheckScreen(context: self.context, tonContext: self.tonContext, mode: .import, walletCreatedPreloadState: nil)) } - private func sendGrams(walletInfo: WalletInfo, address: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, randomId: Int64) { - let _ = (sendGramsFromWallet(network: self.context.account.network, tonInstance: self.tonContext.instance, keychain: self.tonContext.keychain, walletInfo: walletInfo, toAddress: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: 0, randomId: randomId) + private func sendGrams(walletInfo: WalletInfo, decryptedSecret: Data, address: String, amount: Int64, textMessage: String, forceIfDestinationNotInitialized: Bool, randomId: Int64, serverSalt: Data) { + let _ = (sendGramsFromWallet(network: self.context.account.network, tonInstance: self.tonContext.instance, walletInfo: walletInfo, decryptedSecret: decryptedSecret, serverSalt: serverSalt, toAddress: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: forceIfDestinationNotInitialized, timeout: 0, randomId: randomId) |> deliverOnMainQueue).start(error: { [weak self] error in guard let strongSelf = self else { return @@ -136,7 +152,7 @@ public final class WalletSplashScreen: ViewController { } }), TextAlertAction(type: .defaultAction, title: "Send Anyway", action: { - self?.sendGrams(walletInfo: walletInfo, address: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: true, randomId: randomId) + self?.sendGrams(walletInfo: walletInfo, decryptedSecret: decryptedSecret, address: address, amount: amount, textMessage: textMessage, forceIfDestinationNotInitialized: true, randomId: randomId, serverSalt: serverSalt) }) ]) strongSelf.present(controller, in: .window(.root)) @@ -164,7 +180,7 @@ public final class WalletSplashScreen: ViewController { var controllers: [UIViewController] = [] for controller in navigationController.viewControllers { if let controller = controller as? WalletInfoScreen { - let infoScreen = WalletInfoScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, address: address) + let infoScreen = WalletInfoScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, address: address, enableDebugActions: false) infoScreen.navigationPresentation = controller.navigationPresentation controllers.append(infoScreen) } else { @@ -206,7 +222,30 @@ public final class WalletSplashScreen: ViewController { ], actionLayout: .vertical), in: .window(.root)) }) case let .created(walletInfo, wordList): - strongSelf.push(WalletWordDisplayScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, wordList: wordList, mode: .check, walletCreatedPreloadState: strongSelf.walletCreatedPreloadState)) + if let wordList = wordList { + strongSelf.push(WalletWordDisplayScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, wordList: wordList, mode: .check, walletCreatedPreloadState: strongSelf.walletCreatedPreloadState)) + } else { + let controller = OverlayStatusController(theme: strongSelf.presentationData.theme, strings: strongSelf.presentationData.strings, type: .loading(cancelled: nil)) + strongSelf.present(controller, in: .window(.root)) + let _ = (walletRestoreWords(network: strongSelf.context.account.network, walletInfo: walletInfo, tonInstance: strongSelf.tonContext.instance, keychain: strongSelf.tonContext.keychain) + |> deliverOnMainQueue).start(next: { wordList in + guard let strongSelf = self else { + return + } + strongSelf.mode = .created(walletInfo, wordList) + controller.dismiss() + strongSelf.push(WalletWordDisplayScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, wordList: wordList, mode: .check, walletCreatedPreloadState: strongSelf.walletCreatedPreloadState)) + }, error: { _ in + guard let strongSelf = self else { + return + } + controller.dismiss() + strongSelf.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.presentationData.theme), title: strongSelf.presentationData.strings.Wallet_Created_ExportErrorTitle, text: strongSelf.presentationData.strings.Wallet_Created_ExportErrorText, actions: [ + TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: { + }) + ], actionLayout: .vertical), in: .window(.root)) + }) + } case let .success(walletInfo): let _ = (walletAddress(publicKey: walletInfo.publicKey, tonInstance: strongSelf.tonContext.instance) |> deliverOnMainQueue).start(next: { address in @@ -270,7 +309,7 @@ public final class WalletSplashScreen: ViewController { } return true } - controllers.append(WalletInfoScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, address: address)) + controllers.append(WalletInfoScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, address: address, enableDebugActions: false)) strongSelf.view.endEditing(true) navigationController.setViewControllers(controllers, animated: true) } @@ -302,7 +341,7 @@ public final class WalletSplashScreen: ViewController { } if !controllers.contains(where: { $0 is WalletInfoScreen }) { - let infoScreen = WalletInfoScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, address: address) + let infoScreen = WalletInfoScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, walletInfo: walletInfo, address: address, enableDebugActions: false) infoScreen.navigationPresentation = .modal controllers.append(infoScreen) } @@ -466,7 +505,7 @@ private final class WalletSplashScreenNode: ViewControllerTracingNode { buttonText = self.presentationData.strings.Wallet_Completed_ViewWallet termsText = NSAttributedString(string: "") self.iconNode.image = nil - if let path = getAppBundle().path(forResource: "celebrate", ofType: "tgs") { + if let path = getAppBundle().path(forResource: "WalletDone", ofType: "tgs") { self.animationNode.setup(account: account, resource: .localFile(path), width: 260, height: 260, playbackMode: .once, mode: .direct) self.animationSize = CGSize(width: 130.0, height: 130.0) self.animationNode.visibility = true @@ -478,7 +517,7 @@ private final class WalletSplashScreenNode: ViewControllerTracingNode { buttonText = self.presentationData.strings.Wallet_RestoreFailed_CreateWallet termsText = NSAttributedString(string: "") self.iconNode.image = nil - if let path = getAppBundle().path(forResource: "sad", ofType: "tgs") { + if let path = getAppBundle().path(forResource: "WalletNotAvailable", ofType: "tgs") { self.animationNode.setup(account: account, resource: .localFile(path), width: 260, height: 260, playbackMode: .once, mode: .direct) self.animationSize = CGSize(width: 130.0, height: 130.0) self.animationNode.visibility = true @@ -504,7 +543,7 @@ private final class WalletSplashScreenNode: ViewControllerTracingNode { buttonText = self.presentationData.strings.Wallet_Sent_ViewWallet termsText = NSAttributedString(string: "") self.iconNode.image = nil - if let path = getAppBundle().path(forResource: "celebrate", ofType: "tgs") { + if let path = getAppBundle().path(forResource: "WalletDone", ofType: "tgs") { self.animationNode.setup(account: account, resource: .localFile(path), width: 260, height: 260, playbackMode: .once, mode: .direct) self.animationSize = CGSize(width: 130.0, height: 130.0) self.animationNode.visibility = true @@ -561,7 +600,7 @@ private final class WalletSplashScreenNode: ViewControllerTracingNode { } termsText = NSAttributedString(string: "") self.iconNode.image = nil - if let path = getAppBundle().path(forResource: "sad", ofType: "tgs") { + if let path = getAppBundle().path(forResource: "WalletNotAvailable", ofType: "tgs") { self.animationNode.setup(account: account, resource: .localFile(path), width: 260, height: 260, playbackMode: .once, mode: .direct) self.animationSize = CGSize(width: 130.0, height: 130.0) self.animationNode.visibility = true diff --git a/submodules/WalletUI/Sources/WalletTransactionInfoScreen.swift b/submodules/WalletUI/Sources/WalletTransactionInfoScreen.swift index b0efb46827..014b4d1649 100644 --- a/submodules/WalletUI/Sources/WalletTransactionInfoScreen.swift +++ b/submodules/WalletUI/Sources/WalletTransactionInfoScreen.swift @@ -33,6 +33,7 @@ private enum WalletTransactionInfoSection: Int32 { } private enum WalletTransactionInfoEntryTag: ItemListItemTag { + case address case comment func isEqual(to other: ItemListItemTag) -> Bool { @@ -47,7 +48,7 @@ private enum WalletTransactionInfoEntryTag: ItemListItemTag { private enum WalletTransactionInfoEntry: ItemListNodeEntry { case amount(PresentationTheme, PresentationStrings, PresentationDateTimeFormat, WalletTransaction) case infoHeader(PresentationTheme, String) - case infoAddress(PresentationTheme, String) + case infoAddress(PresentationTheme, String, String?) case infoCopyAddress(PresentationTheme, String) case infoSendGrams(PresentationTheme, String) case commentHeader(PresentationTheme, String) @@ -93,8 +94,12 @@ private enum WalletTransactionInfoEntry: ItemListNodeEntry { return WalletTransactionHeaderItem(theme: theme, strings: strings, dateTimeFormat: dateTimeFormat, walletTransaction: walletTransaction, sectionId: self.section) case let .infoHeader(theme, text): return ItemListSectionHeaderItem(theme: theme, text: text, sectionId: self.section) - case let .infoAddress(theme, text): - return ItemListMultilineTextItem(theme: theme, text: text, enabledEntityTypes: [], font: .monospace, sectionId: self.section, style: .blocks) + case let .infoAddress(theme, text, address): + return ItemListMultilineTextItem(theme: theme, text: text, enabledEntityTypes: [], font: .monospace, sectionId: self.section, style: .blocks, longTapAction: address == nil ? nil : { + if let address = address { + arguments.displayContextMenu(WalletTransactionInfoEntryTag.address, address) + } + }, tag: WalletTransactionInfoEntryTag.address) case let .infoCopyAddress(theme, text): return ItemListActionItem(theme: theme, title: text, kind: .generic, alignment: .natural, sectionId: self.section, style: .blocks, action: { arguments.copyWalletAddress() @@ -173,13 +178,14 @@ private func extractDescription(_ walletTransaction: WalletTransaction) -> Strin return text } -private func walletTransactionInfoControllerEntries(presentationData: PresentationData, walletTransaction: WalletTransaction, state: WalletTransactionInfoControllerState) -> [WalletTransactionInfoEntry] { +private func walletTransactionInfoControllerEntries(presentationData: PresentationData, walletTransaction: WalletTransaction, state: WalletTransactionInfoControllerState, walletInfo: WalletInfo?) -> [WalletTransactionInfoEntry] { var entries: [WalletTransactionInfoEntry] = [] entries.append(.amount(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, walletTransaction)) let transferredValue = walletTransaction.transferredValue let address = extractAddress(walletTransaction) + var singleAddress: String? let text = stringForAddress(strings: presentationData.strings, address: address) let description = extractDescription(walletTransaction) @@ -188,9 +194,12 @@ private func walletTransactionInfoControllerEntries(presentationData: Presentati } else { entries.append(.infoHeader(presentationData.theme, presentationData.strings.Wallet_TransactionInfo_SenderHeader)) } - - entries.append(.infoAddress(presentationData.theme, text)) - if case .list = address { + var singleAddres: String? + if case let .list(list) = address, list.count == 1 { + singleAddres = list.first + } + entries.append(.infoAddress(presentationData.theme, text, singleAddres)) + if case .list = address, walletInfo != nil { entries.append(.infoCopyAddress(presentationData.theme, presentationData.strings.Wallet_TransactionInfo_CopyAddress)) entries.append(.infoSendGrams(presentationData.theme, presentationData.strings.Wallet_TransactionInfo_SendGrams)) } @@ -203,7 +212,7 @@ private func walletTransactionInfoControllerEntries(presentationData: Presentati return entries } -func walletTransactionInfoController(context: AccountContext, tonContext: TonContext, walletInfo: WalletInfo, walletTransaction: WalletTransaction) -> ViewController { +func walletTransactionInfoController(context: AccountContext, tonContext: TonContext, walletInfo: WalletInfo?, walletTransaction: WalletTransaction, enableDebugActions: Bool) -> ViewController { let statePromise = ValuePromise(WalletTransactionInfoControllerState(), ignoreRepeated: true) let stateValue = Atomic(value: WalletTransactionInfoControllerState()) let updateState: ((WalletTransactionInfoControllerState) -> WalletTransactionInfoControllerState) -> Void = { f in @@ -223,6 +232,9 @@ func walletTransactionInfoController(context: AccountContext, tonContext: TonCon presentControllerImpl?(OverlayStatusController(theme: presentationData.theme, strings: presentationData.strings, type: .genericSuccess(presentationData.strings.Wallet_TransactionInfo_AddressCopied, false)), nil) } }, sendGrams: { + guard let walletInfo = walletInfo else { + return + } let address = extractAddress(walletTransaction) if case let .list(addresses) = address, let address = addresses.first { dismissImpl?() @@ -235,7 +247,7 @@ func walletTransactionInfoController(context: AccountContext, tonContext: TonCon let signal = combineLatest(queue: .mainQueue(), context.sharedContext.presentationData, statePromise.get()) |> map { presentationData, state -> (ItemListControllerState, (ItemListNodeState, WalletTransactionInfoEntry.ItemGenerationArguments)) in let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Wallet_TransactionInfo_Title), leftNavigationButton: nil, rightNavigationButton: nil, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: false) - let listState = ItemListNodeState(entries: walletTransactionInfoControllerEntries(presentationData: presentationData, walletTransaction: walletTransaction, state: state), style: .blocks, animateChanges: false) + let listState = ItemListNodeState(entries: walletTransactionInfoControllerEntries(presentationData: presentationData, walletTransaction: walletTransaction, state: state, walletInfo: walletInfo), style: .blocks, animateChanges: false) return (controllerState, (listState, arguments)) } @@ -271,9 +283,19 @@ func walletTransactionInfoController(context: AccountContext, tonContext: TonCon return false }) if let resultItemNode = resultItemNode { - let contextMenuController = ContextMenuController(actions: [ContextMenuAction(content: .text(title: presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: presentationData.strings.Conversation_ContextMenuCopy), action: { + var actions: [ContextMenuAction] = [] + actions.append(ContextMenuAction(content: .text(title: presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: presentationData.strings.Conversation_ContextMenuCopy), action: { UIPasteboard.general.string = value - })]) + })) + if enableDebugActions { + if case .address = tag { + actions.append(ContextMenuAction(content: .text(title: "View Transactions", accessibilityLabel: "View Transactions"), action: { + pushImpl?(WalletInfoScreen(context: context, tonContext: tonContext, walletInfo: nil, address: value, enableDebugActions: enableDebugActions)) + //dismissImpl?() + })) + } + } + let contextMenuController = ContextMenuController(actions: actions) strongController.present(contextMenuController, in: .window(.root), with: ContextMenuControllerPresentationArguments(sourceNodeAndRect: { [weak resultItemNode] in if let strongController = controller, let resultItemNode = resultItemNode { return (resultItemNode, resultItemNode.contentBounds.insetBy(dx: 0.0, dy: -2.0), strongController.displayNode, strongController.view.bounds) @@ -345,6 +367,7 @@ private let titleFont = Font.regular(14.0) private let titleBoldFont = Font.semibold(14.0) private class WalletTransactionHeaderItemNode: ListViewItemNode { + private let titleSignNode: TextNode private let titleNode: TextNode private let subtitleNode: TextNode private let iconNode: ASImageNode @@ -353,6 +376,11 @@ private class WalletTransactionHeaderItemNode: ListViewItemNode { private var item: WalletTransactionHeaderItem? init() { + self.titleSignNode = TextNode() + self.titleSignNode.isUserInteractionEnabled = false + self.titleSignNode.contentMode = .left + self.titleSignNode.contentsScale = UIScreen.main.scale + self.titleNode = TextNode() self.titleNode.isUserInteractionEnabled = false self.titleNode.contentMode = .left @@ -373,6 +401,7 @@ private class WalletTransactionHeaderItemNode: ListViewItemNode { super.init(layerBacked: false, dynamicBounce: false) + self.addSubnode(self.titleSignNode) self.addSubnode(self.titleNode) self.addSubnode(self.subtitleNode) self.addSubnode(self.iconNode) @@ -380,6 +409,7 @@ private class WalletTransactionHeaderItemNode: ListViewItemNode { } func asyncLayout() -> (_ item: WalletTransactionHeaderItem, _ params: ListViewItemLayoutParams, _ neighbors: ItemListNeighbors) -> (ListViewItemNodeLayout, () -> Void) { + let makeTitleSignLayout = TextNode.asyncLayout(self.titleSignNode) let makeTitleLayout = TextNode.asyncLayout(self.titleNode) let makeSubtitleLayout = TextNode.asyncLayout(self.subtitleNode) let iconSize = self.iconNode.image?.size ?? CGSize(width: 10.0, height: 10.0) @@ -388,14 +418,17 @@ private class WalletTransactionHeaderItemNode: ListViewItemNode { let leftInset: CGFloat = 15.0 + params.leftInset let verticalInset: CGFloat = 24.0 + let signString: String let balanceString: String let titleColor: UIColor let transferredValue = item.walletTransaction.transferredValue if transferredValue <= 0 { - balanceString = "\(formatBalanceText(transferredValue, decimalSeparator: item.dateTimeFormat.decimalSeparator))" + signString = "-" + balanceString = "\(formatBalanceText(-transferredValue, decimalSeparator: item.dateTimeFormat.decimalSeparator))" titleColor = item.theme.list.itemPrimaryTextColor } else { - balanceString = "+\(formatBalanceText(transferredValue, decimalSeparator: item.dateTimeFormat.decimalSeparator))" + signString = "+" + balanceString = "\(formatBalanceText(transferredValue, decimalSeparator: item.dateTimeFormat.decimalSeparator))" titleColor = item.theme.chatList.secretTitleColor } @@ -408,9 +441,11 @@ private class WalletTransactionHeaderItemNode: ListViewItemNode { } else { title.append(NSAttributedString(string: balanceString, font: Font.bold(48.0), textColor: titleColor)) } + let titleSign = NSAttributedString(string: signString, font: Font.bold(48.0), textColor: titleColor) let subtitle: String = stringForFullDate(timestamp: Int32(clamping: item.walletTransaction.timestamp), strings: item.strings, dateTimeFormat: item.dateTimeFormat) + let (titleSignLayout, titleSignApply) = makeTitleSignLayout(TextNodeLayoutArguments(attributedString: titleSign, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - params.rightInset - leftInset * 2.0, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let (titleLayout, titleApply) = makeTitleLayout(TextNodeLayoutArguments(attributedString: title, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - params.rightInset - leftInset * 2.0, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let (subtitleLayout, subtitleApply) = makeSubtitleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: subtitle, font: Font.regular(13.0), textColor: item.theme.list.freeTextColor), backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - params.rightInset - leftInset * 2.0, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) @@ -431,18 +466,25 @@ private class WalletTransactionHeaderItemNode: ListViewItemNode { strongSelf.activateArea.frame = CGRect(origin: CGPoint(x: params.leftInset, y: 0.0), size: CGSize(width: params.width - params.leftInset - params.rightInset, height: layout.contentSize.height)) //strongSelf.activateArea.accessibilityLabel = attributedText.string + let _ = titleSignApply() let _ = titleApply() let _ = subtitleApply() - let iconSpacing: CGFloat = 8.0 - let contentWidth = titleLayout.size.width + iconSpacing + iconSize.width / 2.0 - let titleFrame = CGRect(origin: CGPoint(x: floor((params.width - contentWidth) / 2.0), y: verticalInset), size: titleLayout.size) + let iconSpacing: CGFloat = 4.0 + let contentWidth = titleSignLayout.size.width + iconSpacing + titleLayout.size.width + iconSpacing + iconSize.width * 3.0 / 2.0 + let contentOrigin = floor((params.width - contentWidth) / 2.0) + let titleSignFrame = CGRect(origin: CGPoint(x: contentOrigin, y: verticalInset), size: titleSignLayout.size) + let iconFrame = CGRect(origin: CGPoint(x: contentOrigin + titleSignFrame.width * titleScale + iconSpacing, y: titleSignFrame.minY + floor((titleSignFrame.height - iconSize.height) / 2.0) - 2.0), size: iconSize) + let titleFrame = CGRect(origin: CGPoint(x: iconFrame.maxX + iconSpacing, y: verticalInset), size: titleLayout.size) let subtitleFrame = CGRect(origin: CGPoint(x: floor((params.width - subtitleLayout.size.width) / 2.0), y: titleFrame.maxY - 5.0), size: subtitleLayout.size) + strongSelf.titleSignNode.position = titleSignFrame.center + strongSelf.titleSignNode.bounds = CGRect(origin: CGPoint(), size: titleSignFrame.size) + strongSelf.titleSignNode.transform = CATransform3DMakeScale(titleScale, titleScale, 1.0) strongSelf.titleNode.position = titleFrame.center strongSelf.titleNode.bounds = CGRect(origin: CGPoint(), size: titleFrame.size) strongSelf.titleNode.transform = CATransform3DMakeScale(titleScale, titleScale, 1.0) strongSelf.subtitleNode.frame = subtitleFrame - strongSelf.iconNode.frame = CGRect(origin: CGPoint(x: floor(titleFrame.midX + titleFrame.width / 2.0 * titleScale + iconSpacing), y: titleFrame.minY + floor((titleFrame.height - iconSize.height) / 2.0) - 2.0), size: iconSize) + strongSelf.iconNode.frame = iconFrame } }) } diff --git a/submodules/WalletUI/Sources/WalletWordCheckScreen.swift b/submodules/WalletUI/Sources/WalletWordCheckScreen.swift index 578aae6cf1..aa2d08f272 100644 --- a/submodules/WalletUI/Sources/WalletWordCheckScreen.swift +++ b/submodules/WalletUI/Sources/WalletWordCheckScreen.swift @@ -2142,6 +2142,7 @@ public final class WalletWordCheckScreen: ViewController { } return true } + let _ = confirmWalletExported(postbox: strongSelf.context.account.postbox, walletInfo: walletInfo).start() controllers.append(WalletSplashScreen(context: strongSelf.context, tonContext: strongSelf.tonContext, mode: .success(walletInfo), walletCreatedPreloadState: strongSelf.walletCreatedPreloadState)) strongSelf.view.endEditing(true) navigationController.setViewControllers(controllers, animated: true) @@ -2247,6 +2248,7 @@ private func generateClearIcon(color: UIColor) -> UIImage? { } private final class WordCheckInputNode: ASDisplayNode, UITextFieldDelegate { + private let previous: (WordCheckInputNode) -> Void private let next: (WordCheckInputNode, Bool) -> Void private let focused: (WordCheckInputNode) -> Void private let pasteWords: ([String]) -> Void @@ -2267,7 +2269,8 @@ private final class WordCheckInputNode: ASDisplayNode, UITextFieldDelegate { } } - init(theme: PresentationTheme, index: Int, possibleWordList: [String], next: @escaping (WordCheckInputNode, Bool) -> Void, isLast: Bool, focused: @escaping (WordCheckInputNode) -> Void, pasteWords: @escaping ([String]) -> Void) { + init(theme: PresentationTheme, index: Int, possibleWordList: [String], previous: @escaping (WordCheckInputNode) -> Void, next: @escaping (WordCheckInputNode, Bool) -> Void, isLast: Bool, focused: @escaping (WordCheckInputNode) -> Void, pasteWords: @escaping ([String]) -> Void) { + self.previous = previous self.next = next self.focused = focused self.pasteWords = pasteWords @@ -2316,6 +2319,12 @@ private final class WordCheckInputNode: ASDisplayNode, UITextFieldDelegate { self.addSubnode(self.inputNode) self.addSubnode(self.clearButtonNode) + self.inputNode.textField.didDeleteBackwardWhileEmpty = { [weak self] in + guard let strongSelf = self else { + return + } + strongSelf.previous(strongSelf) + } self.inputNode.textField.delegate = self self.inputNode.textField.addTarget(self, action: #selector(self.textFieldChanged(_:)), for: .editingChanged) @@ -2644,12 +2653,15 @@ private final class WalletWordCheckScreenNode: ViewControllerTracingNode, UIScro var inputNodes: [WordCheckInputNode] = [] + var previousWord: ((WordCheckInputNode) -> Void)? var nextWord: ((WordCheckInputNode, Bool) -> Void)? var focused: ((WordCheckInputNode) -> Void)? var pasteWords: (([String]) -> Void)? for i in 0 ..< wordIndices.count { - inputNodes.append(WordCheckInputNode(theme: presentationData.theme, index: wordIndices[i], possibleWordList: possibleWordList, next: { node, done in + inputNodes.append(WordCheckInputNode(theme: presentationData.theme, index: wordIndices[i], possibleWordList: possibleWordList, previous: { node in + previousWord?(node) + }, next: { node, done in nextWord?(node, done) }, isLast: i == wordIndices.count - 1, focused: { node in focused?(node) @@ -2703,6 +2715,14 @@ private final class WalletWordCheckScreenNode: ViewControllerTracingNode, UIScro self.secondaryActionButtonNode.addTarget(self, action: #selector(self.secondaryActionPressed), forControlEvents: .touchUpInside) + previousWord = { [weak self] node in + guard let strongSelf = self else { + return + } + if let index = strongSelf.inputNodes.firstIndex(where: { $0 === node }), index != 0 { + strongSelf.inputNodes[index - 1].focus() + } + } nextWord = { [weak self] node, done in guard let strongSelf = self else { return @@ -2714,7 +2734,7 @@ private final class WalletWordCheckScreenNode: ViewControllerTracingNode, UIScro strongSelf.scrollNode.view.scrollRectToVisible(strongSelf.buttonNode.frame.insetBy(dx: 0.0, dy: -20.0), animated: true) } } else { - if let index = strongSelf.inputNodes.firstIndex(where: { $0 === node }) { + if let index = strongSelf.inputNodes.firstIndex(where: { $0 === node }), index != strongSelf.inputNodes.count - 1 { strongSelf.inputNodes[index + 1].focus() } }