diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index b36c7a8f41..89f90b9d11 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -2152,6 +2152,7 @@ "Notification.GameScoreSelfSimple_0" = "scored %@"; "Stickers.Install" = "ADD"; +"Stickers.Installed" = "ADDED"; "MaskStickerSettings.Title" = "Masks"; "MaskStickerSettings.Info" = "You can add masks to photos and videos you send. To do this, open the photo editor before sending a photo or video."; diff --git a/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift b/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift index 516dc59f06..13e2fdbe3c 100644 --- a/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift +++ b/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift @@ -87,7 +87,7 @@ private final class AuthorizationSequenceCountrySelectionNavigationContentNode: self?.cancel() } - self.searchBar.textUpdated = { [weak self] query in + self.searchBar.textUpdated = { [weak self] query, _ in self?.queryUpdated?(query) } } diff --git a/submodules/LocationUI/Sources/LocationSearchNavigationContentNode.swift b/submodules/LocationUI/Sources/LocationSearchNavigationContentNode.swift index 56db5556a5..1ed628ab9b 100644 --- a/submodules/LocationUI/Sources/LocationSearchNavigationContentNode.swift +++ b/submodules/LocationUI/Sources/LocationSearchNavigationContentNode.swift @@ -31,7 +31,7 @@ final class LocationSearchNavigationContentNode: NavigationBarContentNode { self?.searchBar.deactivate(clear: false) self?.interaction.dismissSearch() } - self.searchBar.textUpdated = { [weak self] query in + self.searchBar.textUpdated = { [weak self] query, _ in self?.interaction.updateSearchQuery(query) } } diff --git a/submodules/PeerInfoUI/Sources/ChannelDiscussionGroupSetupSearchItem.swift b/submodules/PeerInfoUI/Sources/ChannelDiscussionGroupSetupSearchItem.swift index 562102a2c4..3c1189a27f 100644 --- a/submodules/PeerInfoUI/Sources/ChannelDiscussionGroupSetupSearchItem.swift +++ b/submodules/PeerInfoUI/Sources/ChannelDiscussionGroupSetupSearchItem.swift @@ -132,7 +132,7 @@ private final class ChannelDiscussionSearchNavigationContentNode: NavigationBarC self?.cancel() } - self.searchBar.textUpdated = { [weak self] query in + self.searchBar.textUpdated = { [weak self] query, _ in self?.queryUpdated?(query) } diff --git a/submodules/PeerInfoUI/Sources/GroupInfoSearchNavigationContentNode.swift b/submodules/PeerInfoUI/Sources/GroupInfoSearchNavigationContentNode.swift index f9ad551e82..5a1a9ede36 100644 --- a/submodules/PeerInfoUI/Sources/GroupInfoSearchNavigationContentNode.swift +++ b/submodules/PeerInfoUI/Sources/GroupInfoSearchNavigationContentNode.swift @@ -45,7 +45,7 @@ final class GroupInfoSearchNavigationContentNode: NavigationBarContentNode, Item self?.cancel() } - self.searchBar.textUpdated = { [weak self] query in + self.searchBar.textUpdated = { [weak self] query, _ in self?.queryUpdated?(query) } diff --git a/submodules/SearchBarNode/Sources/SearchBarNode.swift b/submodules/SearchBarNode/Sources/SearchBarNode.swift index a5abf6faca..34b1c52c4f 100644 --- a/submodules/SearchBarNode/Sources/SearchBarNode.swift +++ b/submodules/SearchBarNode/Sources/SearchBarNode.swift @@ -252,7 +252,7 @@ public enum SearchBarStyle { public class SearchBarNode: ASDisplayNode, UITextFieldDelegate { public var cancel: (() -> Void)? - public var textUpdated: ((String) -> Void)? + public var textUpdated: ((String, String?) -> Void)? public var textReturned: ((String) -> Void)? public var clearPrefix: (() -> Void)? @@ -338,9 +338,11 @@ public class SearchBarNode: ASDisplayNode, UITextFieldDelegate { private let fieldStyle: SearchBarStyle private var theme: SearchBarNodeTheme? private var strings: PresentationStrings? + private let cancelText: String? - public init(theme: SearchBarNodeTheme, strings: PresentationStrings, fieldStyle: SearchBarStyle = .legacy) { + public init(theme: SearchBarNodeTheme, strings: PresentationStrings, fieldStyle: SearchBarStyle = .legacy, cancelText: String? = nil) { self.fieldStyle = fieldStyle + self.cancelText = cancelText self.backgroundNode = ASDisplayNode() self.backgroundNode.isLayerBacked = true @@ -400,7 +402,7 @@ public class SearchBarNode: ASDisplayNode, UITextFieldDelegate { public func updateThemeAndStrings(theme: SearchBarNodeTheme, strings: PresentationStrings) { if self.theme != theme || self.strings !== strings { - self.cancelButton.setAttributedTitle(NSAttributedString(string: strings.Common_Cancel, font: Font.regular(17.0), textColor: theme.accent), for: []) + self.cancelButton.setAttributedTitle(NSAttributedString(string: self.cancelText ?? strings.Common_Cancel, font: self.cancelText != nil ? Font.semibold(17.0) : Font.regular(17.0), textColor: theme.accent), for: []) } if self.theme != theme { self.backgroundNode.backgroundColor = theme.background @@ -623,7 +625,7 @@ public class SearchBarNode: ASDisplayNode, UITextFieldDelegate { @objc private func textFieldDidChange(_ textField: UITextField) { self.updateIsEmpty() if let textUpdated = self.textUpdated { - textUpdated(textField.text ?? "") + textUpdated(textField.text ?? "", textField.textInputMode?.primaryLanguage) } } diff --git a/submodules/SearchUI/Sources/SearchDisplayController.swift b/submodules/SearchUI/Sources/SearchDisplayController.swift index d3c6254589..ac909ed34e 100644 --- a/submodules/SearchUI/Sources/SearchDisplayController.swift +++ b/submodules/SearchUI/Sources/SearchDisplayController.swift @@ -27,7 +27,7 @@ public final class SearchDisplayController { self.mode = mode self.contentNode = contentNode - self.searchBar.textUpdated = { [weak contentNode] text in + self.searchBar.textUpdated = { [weak contentNode] text, _ in contentNode?.searchTextUpdated(text: text) } self.searchBar.cancel = { [weak self] in diff --git a/submodules/StickerPackPreviewUI/Sources/StickerPackScreen.swift b/submodules/StickerPackPreviewUI/Sources/StickerPackScreen.swift index e5d85dca1a..fc25d6e4b8 100644 --- a/submodules/StickerPackPreviewUI/Sources/StickerPackScreen.swift +++ b/submodules/StickerPackPreviewUI/Sources/StickerPackScreen.swift @@ -1066,7 +1066,7 @@ public enum StickerPackScreenPerformedAction { } public func StickerPackScreen(context: AccountContext, mode: StickerPackPreviewControllerMode = .default, mainStickerPack: StickerPackReference, stickerPacks: [StickerPackReference], parentNavigationController: NavigationController? = nil, sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)? = nil, actionPerformed: ((StickerPackCollectionInfo, [ItemCollectionItem], StickerPackScreenPerformedAction) -> Void)? = nil) -> ViewController { - return StickerPackScreenImpl(context: context, stickerPacks: stickerPacks, selectedStickerPackIndex: stickerPacks.firstIndex(of: mainStickerPack) ?? 0, parentNavigationController: parentNavigationController, sendSticker: sendSticker) + //return StickerPackScreenImpl(context: context, stickerPacks: stickerPacks, selectedStickerPackIndex: stickerPacks.firstIndex(of: mainStickerPack) ?? 0, parentNavigationController: parentNavigationController, sendSticker: sendSticker) let controller = StickerPackPreviewController(context: context, stickerPack: mainStickerPack, mode: mode, parentNavigationController: parentNavigationController, actionPerformed: actionPerformed) controller.sendSticker = sendSticker diff --git a/submodules/StickerResources/Sources/StickerResources.swift b/submodules/StickerResources/Sources/StickerResources.swift index dc70e68749..125936cff6 100644 --- a/submodules/StickerResources/Sources/StickerResources.swift +++ b/submodules/StickerResources/Sources/StickerResources.swift @@ -102,7 +102,7 @@ private func chatMessageStickerDatas(postbox: Postbox, file: TelegramMediaFile, public func chatMessageAnimatedStickerDatas(postbox: Postbox, file: TelegramMediaFile, small: Bool, size: CGSize, fitzModifier: EmojiFitzModifier? = nil, fetched: Bool, onlyFullSize: Bool, synchronousLoad: Bool) -> Signal, NoError> { let thumbnailResource = chatMessageStickerResource(file: file, small: true) - let resource = chatMessageStickerResource(file: file, small: small) + let resource = chatMessageStickerResource(file: file, small: false) let firstFrameRepresentation = CachedAnimatedStickerFirstFrameRepresentation(width: Int32(size.width), height: Int32(size.height), fitzModifier: fitzModifier) let maybeFetched = postbox.mediaBox.cachedResourceRepresentation(resource, representation: firstFrameRepresentation, complete: false, fetch: false, attemptSynchronously: synchronousLoad) diff --git a/submodules/TelegramCore/Sources/UpdatePeers.swift b/submodules/TelegramCore/Sources/UpdatePeers.swift index cbc5782285..5a5253a588 100644 --- a/submodules/TelegramCore/Sources/UpdatePeers.swift +++ b/submodules/TelegramCore/Sources/UpdatePeers.swift @@ -143,22 +143,26 @@ func updateContacts(transaction: Transaction, apiUsers: [Api.User]) { var contactIds = transaction.getContactPeerIds() var updated = false for user in apiUsers { - let isContact: Bool + var isContact: Bool? switch user { - case let .user(user): + case let .user(user): + if (user.flags & (1 << 20)) == 0 { isContact = (user.flags & (1 << 11)) != 0 - case .userEmpty: - isContact = false - } - if isContact { - if !contactIds.contains(user.peerId) { - contactIds.insert(user.peerId) - updated = true } - } else { - if contactIds.contains(user.peerId) { - contactIds.remove(user.peerId) - updated = true + case .userEmpty: + isContact = false + } + if let isContact = isContact { + if isContact { + if !contactIds.contains(user.peerId) { + contactIds.insert(user.peerId) + updated = true + } + } else { + if contactIds.contains(user.peerId) { + contactIds.remove(user.peerId) + updated = true + } } } } diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index 2a23a3f164..e275516155 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -3639,1602 +3639,1602 @@ public final class PresentationStrings: Equatable { return formatWithArgumentRanges(self._s[3238]!, self._r[3238]!, [_1, _2, _3]) } public var Appearance_TextSize_Automatic: String { return self._s[3239]! } + public var Stickers_Installed: String { return self._s[3241]! } public func PUSH_PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3241]!, self._r[3241]!, [_1]) + return formatWithArgumentRanges(self._s[3242]!, self._r[3242]!, [_1]) } public func StickerPackActionInfo_AddedText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3242]!, self._r[3242]!, [_0]) + return formatWithArgumentRanges(self._s[3243]!, self._r[3243]!, [_0]) } - public var ChangePhoneNumberNumber_Help: String { return self._s[3243]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[3244]! } public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3244]!, self._r[3244]!, [_1, _1, _1, _2]) + return formatWithArgumentRanges(self._s[3245]!, self._r[3245]!, [_1, _1, _1, _2]) } - public var ChatList_UndoArchiveTitle: String { return self._s[3245]! } - public var Notification_Exceptions_Add: String { return self._s[3246]! } - public var DialogList_You: String { return self._s[3247]! } - public var MediaPicker_Send: String { return self._s[3250]! } - public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[3251]! } - public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[3252]! } - public var Call_AudioRouteSpeaker: String { return self._s[3253]! } - public var Watch_UserInfo_Title: String { return self._s[3254]! } - public var VoiceOver_Chat_PollFinalResults: String { return self._s[3255]! } - public var Appearance_AccentColor: String { return self._s[3257]! } + public var ChatList_UndoArchiveTitle: String { return self._s[3246]! } + public var Notification_Exceptions_Add: String { return self._s[3247]! } + public var DialogList_You: String { return self._s[3248]! } + public var MediaPicker_Send: String { return self._s[3251]! } + public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[3252]! } + public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[3253]! } + public var Call_AudioRouteSpeaker: String { return self._s[3254]! } + public var Watch_UserInfo_Title: String { return self._s[3255]! } + public var VoiceOver_Chat_PollFinalResults: String { return self._s[3256]! } + public var Appearance_AccentColor: String { return self._s[3258]! } public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3258]!, self._r[3258]!, [_0]) + return formatWithArgumentRanges(self._s[3259]!, self._r[3259]!, [_0]) } - public var Permissions_ContactsAllowInSettings_v0: String { return self._s[3259]! } + public var Permissions_ContactsAllowInSettings_v0: String { return self._s[3260]! } public func PUSH_CHANNEL_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3260]!, self._r[3260]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3261]!, self._r[3261]!, [_1, _2]) } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[3261]! } - public var WebSearch_RecentClearConfirmation: String { return self._s[3262]! } - public var Notification_CallOutgoing: String { return self._s[3263]! } - public var PrivacySettings_PasscodeAndFaceId: String { return self._s[3264]! } - public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[3265]! } - public var Call_RecordingDisabledMessage: String { return self._s[3266]! } - public var Message_Game: String { return self._s[3267]! } - public var Conversation_PressVolumeButtonForSound: String { return self._s[3268]! } - public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[3269]! } - public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[3270]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[3271]! } - public var Date_DialogDateFormat: String { return self._s[3273]! } - public var WallpaperColors_SetCustomColor: String { return self._s[3274]! } - public var Notifications_InAppNotifications: String { return self._s[3275]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[3262]! } + public var WebSearch_RecentClearConfirmation: String { return self._s[3263]! } + public var Notification_CallOutgoing: String { return self._s[3264]! } + public var PrivacySettings_PasscodeAndFaceId: String { return self._s[3265]! } + public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[3266]! } + public var Call_RecordingDisabledMessage: String { return self._s[3267]! } + public var Message_Game: String { return self._s[3268]! } + public var Conversation_PressVolumeButtonForSound: String { return self._s[3269]! } + public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[3270]! } + public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[3271]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[3272]! } + public var Date_DialogDateFormat: String { return self._s[3274]! } + public var WallpaperColors_SetCustomColor: String { return self._s[3275]! } + public var Notifications_InAppNotifications: String { return self._s[3276]! } public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3276]!, self._r[3276]!, [_0]) + return formatWithArgumentRanges(self._s[3277]!, self._r[3277]!, [_0]) } public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3277]!, self._r[3277]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3278]!, self._r[3278]!, [_1, _2]) } - public var NewContact_Title: String { return self._s[3278]! } + public var NewContact_Title: String { return self._s[3279]! } public func AutoDownloadSettings_UpToForAll(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3279]!, self._r[3279]!, [_0]) + return formatWithArgumentRanges(self._s[3280]!, self._r[3280]!, [_0]) } - public var Conversation_ViewContactDetails: String { return self._s[3280]! } + public var Conversation_ViewContactDetails: String { return self._s[3281]! } public func PUSH_CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3282]!, self._r[3282]!, [_1]) + return formatWithArgumentRanges(self._s[3283]!, self._r[3283]!, [_1]) } - public var Checkout_NewCard_CardholderNameTitle: String { return self._s[3283]! } - public var Passport_Identity_ExpiryDateNone: String { return self._s[3284]! } - public var PrivacySettings_Title: String { return self._s[3285]! } - public var Conversation_SilentBroadcastTooltipOff: String { return self._s[3288]! } - public var GroupRemoved_UsersSectionTitle: String { return self._s[3289]! } - public var VoiceOver_Chat_ContactEmail: String { return self._s[3290]! } - public var Contacts_PhoneNumber: String { return self._s[3291]! } - public var PeerInfo_ButtonMute: String { return self._s[3292]! } - public var TwoFactorSetup_Password_PlaceholderConfirmPassword: String { return self._s[3294]! } - public var Map_ShowPlaces: String { return self._s[3295]! } - public var ChatAdmins_Title: String { return self._s[3296]! } - public var InstantPage_Reference: String { return self._s[3298]! } - public var Wallet_Info_Updating: String { return self._s[3299]! } - public var ReportGroupLocation_Text: String { return self._s[3300]! } + public var Checkout_NewCard_CardholderNameTitle: String { return self._s[3284]! } + public var Passport_Identity_ExpiryDateNone: String { return self._s[3285]! } + public var PrivacySettings_Title: String { return self._s[3286]! } + public var Conversation_SilentBroadcastTooltipOff: String { return self._s[3289]! } + public var GroupRemoved_UsersSectionTitle: String { return self._s[3290]! } + public var VoiceOver_Chat_ContactEmail: String { return self._s[3291]! } + public var Contacts_PhoneNumber: String { return self._s[3292]! } + public var PeerInfo_ButtonMute: String { return self._s[3293]! } + public var TwoFactorSetup_Password_PlaceholderConfirmPassword: String { return self._s[3295]! } + public var Map_ShowPlaces: String { return self._s[3296]! } + public var ChatAdmins_Title: String { return self._s[3297]! } + public var InstantPage_Reference: String { return self._s[3299]! } + public var Wallet_Info_Updating: String { return self._s[3300]! } + public var ReportGroupLocation_Text: String { return self._s[3301]! } public func PUSH_CHAT_MESSAGE_FWD(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3301]!, self._r[3301]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3302]!, self._r[3302]!, [_1, _2]) } - public var Camera_FlashOff: String { return self._s[3302]! } - public var Watch_UserInfo_Block: String { return self._s[3303]! } - public var ChatSettings_Stickers: String { return self._s[3304]! } - public var ChatSettings_DownloadInBackground: String { return self._s[3305]! } - public var Appearance_ThemeCarouselTintedNight: String { return self._s[3306]! } + public var Camera_FlashOff: String { return self._s[3303]! } + public var Watch_UserInfo_Block: String { return self._s[3304]! } + public var ChatSettings_Stickers: String { return self._s[3305]! } + public var ChatSettings_DownloadInBackground: String { return self._s[3306]! } + public var Appearance_ThemeCarouselTintedNight: String { return self._s[3307]! } public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3307]!, self._r[3307]!, [_0]) + return formatWithArgumentRanges(self._s[3308]!, self._r[3308]!, [_0]) } - public var Settings_ViewPhoto: String { return self._s[3308]! } - public var Login_CheckOtherSessionMessages: String { return self._s[3309]! } - public var AutoDownloadSettings_Cellular: String { return self._s[3310]! } - public var Wallet_Created_ExportErrorTitle: String { return self._s[3311]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[3312]! } - public var VoiceOver_MessageContextShare: String { return self._s[3313]! } + public var Settings_ViewPhoto: String { return self._s[3309]! } + public var Login_CheckOtherSessionMessages: String { return self._s[3310]! } + public var AutoDownloadSettings_Cellular: String { return self._s[3311]! } + public var Wallet_Created_ExportErrorTitle: String { return self._s[3312]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[3313]! } + public var VoiceOver_MessageContextShare: String { return self._s[3314]! } public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3315]!, self._r[3315]!, [_0]) + return formatWithArgumentRanges(self._s[3316]!, self._r[3316]!, [_0]) } - public var Privacy_DeleteDrafts: String { return self._s[3316]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[3317]! } + public var Privacy_DeleteDrafts: String { return self._s[3317]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[3318]! } public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3318]!, self._r[3318]!, [_0]) + return formatWithArgumentRanges(self._s[3319]!, self._r[3319]!, [_0]) } - public var DialogList_SavedMessagesHelp: String { return self._s[3319]! } - public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[3320]! } - public var DialogList_SavedMessages: String { return self._s[3321]! } - public var GroupInfo_UpgradeButton: String { return self._s[3322]! } - public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[3324]! } - public var DialogList_Pin: String { return self._s[3325]! } + public var DialogList_SavedMessagesHelp: String { return self._s[3320]! } + public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[3321]! } + public var DialogList_SavedMessages: String { return self._s[3322]! } + public var GroupInfo_UpgradeButton: String { return self._s[3323]! } + public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[3325]! } + public var DialogList_Pin: String { return self._s[3326]! } public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3326]!, self._r[3326]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3327]!, self._r[3327]!, [_0, _1]) } public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3327]!, self._r[3327]!, [_0]) + return formatWithArgumentRanges(self._s[3328]!, self._r[3328]!, [_0]) } - public var Notification_Exceptions_AlwaysOn: String { return self._s[3328]! } - public var UserInfo_NotificationsDisable: String { return self._s[3329]! } - public var Conversation_ContextMenuCancelEditing: String { return self._s[3330]! } - public var Paint_Outlined: String { return self._s[3331]! } - public var Activity_PlayingGame: String { return self._s[3332]! } - public var SearchImages_NoImagesFound: String { return self._s[3333]! } - public var SocksProxySetup_ProxyType: String { return self._s[3334]! } - public var AppleWatch_ReplyPresetsHelp: String { return self._s[3336]! } - public var Conversation_ContextMenuCancelSending: String { return self._s[3337]! } - public var Settings_AppLanguage: String { return self._s[3338]! } - public var TwoStepAuth_ResetAccountHelp: String { return self._s[3339]! } - public var Common_ChoosePhoto: String { return self._s[3340]! } - public var AuthSessions_AddDevice_InvalidQRCode: String { return self._s[3341]! } - public var CallFeedback_ReasonEcho: String { return self._s[3342]! } + public var Notification_Exceptions_AlwaysOn: String { return self._s[3329]! } + public var UserInfo_NotificationsDisable: String { return self._s[3330]! } + public var Conversation_ContextMenuCancelEditing: String { return self._s[3331]! } + public var Paint_Outlined: String { return self._s[3332]! } + public var Activity_PlayingGame: String { return self._s[3333]! } + public var SearchImages_NoImagesFound: String { return self._s[3334]! } + public var SocksProxySetup_ProxyType: String { return self._s[3335]! } + public var AppleWatch_ReplyPresetsHelp: String { return self._s[3337]! } + public var Conversation_ContextMenuCancelSending: String { return self._s[3338]! } + public var Settings_AppLanguage: String { return self._s[3339]! } + public var TwoStepAuth_ResetAccountHelp: String { return self._s[3340]! } + public var Common_ChoosePhoto: String { return self._s[3341]! } + public var AuthSessions_AddDevice_InvalidQRCode: String { return self._s[3342]! } + public var CallFeedback_ReasonEcho: String { return self._s[3343]! } public func PUSH_PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3343]!, self._r[3343]!, [_1]) + return formatWithArgumentRanges(self._s[3344]!, self._r[3344]!, [_1]) } - public var Privacy_Calls_AlwaysAllow: String { return self._s[3344]! } - public var PollResults_Collapse: String { return self._s[3345]! } - public var Activity_UploadingVideo: String { return self._s[3346]! } - public var Conversation_WalletRequiredNotNow: String { return self._s[3347]! } - public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[3348]! } - public var NetworkUsageSettings_Wifi: String { return self._s[3349]! } - public var VoiceOver_Editing_ClearText: String { return self._s[3350]! } - public var PUSH_SENDER_YOU: String { return self._s[3351]! } - public var Channel_BanUser_PermissionReadMessages: String { return self._s[3352]! } - public var Checkout_PayWithTouchId: String { return self._s[3353]! } - public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[3354]! } + public var Privacy_Calls_AlwaysAllow: String { return self._s[3345]! } + public var PollResults_Collapse: String { return self._s[3346]! } + public var Activity_UploadingVideo: String { return self._s[3347]! } + public var Conversation_WalletRequiredNotNow: String { return self._s[3348]! } + public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[3349]! } + public var NetworkUsageSettings_Wifi: String { return self._s[3350]! } + public var VoiceOver_Editing_ClearText: String { return self._s[3351]! } + public var PUSH_SENDER_YOU: String { return self._s[3352]! } + public var Channel_BanUser_PermissionReadMessages: String { return self._s[3353]! } + public var Checkout_PayWithTouchId: String { return self._s[3354]! } + public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[3355]! } public func PUSH_LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3356]!, self._r[3356]!, [_1]) + return formatWithArgumentRanges(self._s[3357]!, self._r[3357]!, [_1]) } - public var Notifications_ExceptionsNone: String { return self._s[3357]! } + public var Notifications_ExceptionsNone: String { return self._s[3358]! } public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3358]!, self._r[3358]!, [_0]) + return formatWithArgumentRanges(self._s[3359]!, self._r[3359]!, [_0]) } public func PUSH_PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3359]!, self._r[3359]!, [_1]) + return formatWithArgumentRanges(self._s[3360]!, self._r[3360]!, [_1]) } - public var AuthSessions_IncompleteAttempts: String { return self._s[3361]! } - public var Passport_Address_Region: String { return self._s[3364]! } - public var ChatList_DeleteChat: String { return self._s[3365]! } - public var LogoutOptions_ClearCacheTitle: String { return self._s[3366]! } - public var PhotoEditor_TiltShift: String { return self._s[3367]! } - public var Settings_FAQ_URL: String { return self._s[3368]! } - public var TwoFactorSetup_EmailVerification_ChangeAction: String { return self._s[3369]! } - public var Passport_Language_sl: String { return self._s[3371]! } - public var Settings_PrivacySettings: String { return self._s[3373]! } - public var SharedMedia_TitleLink: String { return self._s[3374]! } - public var Passport_Identity_TypePassportUploadScan: String { return self._s[3375]! } - public var Settings_SetProfilePhoto: String { return self._s[3376]! } - public var Channel_About_Help: String { return self._s[3377]! } - public var Contacts_PermissionsEnable: String { return self._s[3378]! } - public var Wallet_Sending_Title: String { return self._s[3379]! } - public var PeerInfo_PaneMedia: String { return self._s[3380]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[3381]! } - public var AttachmentMenu_SendAsFiles: String { return self._s[3382]! } - public var CallFeedback_ReasonInterruption: String { return self._s[3384]! } - public var Passport_Address_AddTemporaryRegistration: String { return self._s[3385]! } - public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[3386]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3387]! } - public var OldChannels_Title: String { return self._s[3388]! } - public var PrivacySettings_DeleteAccountTitle: String { return self._s[3389]! } - public var AccessDenied_VideoMessageCamera: String { return self._s[3391]! } - public var Map_OpenInYandexMaps: String { return self._s[3393]! } - public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3394]! } - public var VoiceOver_MessageContextReply: String { return self._s[3395]! } - public var ChatListFolder_DiscardConfirmation: String { return self._s[3397]! } - public var PhotoEditor_SaturationTool: String { return self._s[3398]! } + public var AuthSessions_IncompleteAttempts: String { return self._s[3362]! } + public var Passport_Address_Region: String { return self._s[3365]! } + public var ChatList_DeleteChat: String { return self._s[3366]! } + public var LogoutOptions_ClearCacheTitle: String { return self._s[3367]! } + public var PhotoEditor_TiltShift: String { return self._s[3368]! } + public var Settings_FAQ_URL: String { return self._s[3369]! } + public var TwoFactorSetup_EmailVerification_ChangeAction: String { return self._s[3370]! } + public var Passport_Language_sl: String { return self._s[3372]! } + public var Settings_PrivacySettings: String { return self._s[3374]! } + public var SharedMedia_TitleLink: String { return self._s[3375]! } + public var Passport_Identity_TypePassportUploadScan: String { return self._s[3376]! } + public var Settings_SetProfilePhoto: String { return self._s[3377]! } + public var Channel_About_Help: String { return self._s[3378]! } + public var Contacts_PermissionsEnable: String { return self._s[3379]! } + public var Wallet_Sending_Title: String { return self._s[3380]! } + public var PeerInfo_PaneMedia: String { return self._s[3381]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[3382]! } + public var AttachmentMenu_SendAsFiles: String { return self._s[3383]! } + public var CallFeedback_ReasonInterruption: String { return self._s[3385]! } + public var Passport_Address_AddTemporaryRegistration: String { return self._s[3386]! } + public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[3387]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3388]! } + public var OldChannels_Title: String { return self._s[3389]! } + public var PrivacySettings_DeleteAccountTitle: String { return self._s[3390]! } + public var AccessDenied_VideoMessageCamera: String { return self._s[3392]! } + public var Map_OpenInYandexMaps: String { return self._s[3394]! } + public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3395]! } + public var VoiceOver_MessageContextReply: String { return self._s[3396]! } + public var ChatListFolder_DiscardConfirmation: String { return self._s[3398]! } + public var PhotoEditor_SaturationTool: String { return self._s[3399]! } public func PUSH_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3399]!, self._r[3399]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3400]!, self._r[3400]!, [_1, _2]) } - public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3400]! } - public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3401]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3402]! } + public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3401]! } + public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3402]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3403]! } public func LOCAL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3403]!, self._r[3403]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3404]!, self._r[3404]!, [_1, "\(_2)"]) } - public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3404]! } - public var Channel_Username_InvalidTooShort: String { return self._s[3406]! } - public var SettingsSearch_Synonyms_Wallet: String { return self._s[3407]! } + public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3405]! } + public var Channel_Username_InvalidTooShort: String { return self._s[3407]! } + public var SettingsSearch_Synonyms_Wallet: String { return self._s[3408]! } public func Group_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3408]!, self._r[3408]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3409]!, self._r[3409]!, [_1, _2]) } - public var Forward_ErrorPublicPollDisabledInChannels: String { return self._s[3409]! } + public var Forward_ErrorPublicPollDisabledInChannels: String { return self._s[3410]! } public func PUSH_CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3410]!, self._r[3410]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3411]!, self._r[3411]!, [_1, _2, _3]) } - public var WallpaperPreview_PatternTitle: String { return self._s[3411]! } - public var GroupInfo_PublicLinkAdd: String { return self._s[3412]! } - public var Passport_PassportInformation: String { return self._s[3415]! } - public var Theme_Unsupported: String { return self._s[3416]! } - public var WatchRemote_AlertTitle: String { return self._s[3417]! } - public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3418]! } - public var ConvertToSupergroup_HelpText: String { return self._s[3420]! } + public var WallpaperPreview_PatternTitle: String { return self._s[3412]! } + public var GroupInfo_PublicLinkAdd: String { return self._s[3413]! } + public var Passport_PassportInformation: String { return self._s[3416]! } + public var Theme_Unsupported: String { return self._s[3417]! } + public var WatchRemote_AlertTitle: String { return self._s[3418]! } + public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3419]! } + public var ConvertToSupergroup_HelpText: String { return self._s[3421]! } public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3421]!, self._r[3421]!, [_0]) + return formatWithArgumentRanges(self._s[3422]!, self._r[3422]!, [_0]) } public func PUSH_PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3422]!, self._r[3422]!, [_1]) + return formatWithArgumentRanges(self._s[3423]!, self._r[3423]!, [_1]) } - public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3423]! } - public var Wallet_Navigation_Done: String { return self._s[3425]! } - public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3426]! } - public var AccessDenied_CameraDisabled: String { return self._s[3427]! } + public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3424]! } + public var Wallet_Navigation_Done: String { return self._s[3426]! } + public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3427]! } + public var AccessDenied_CameraDisabled: String { return self._s[3428]! } public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3428]!, self._r[3428]!, [_0]) + return formatWithArgumentRanges(self._s[3429]!, self._r[3429]!, [_0]) } - public var ClearCache_Forever: String { return self._s[3429]! } - public var AuthSessions_AddDeviceIntro_Title: String { return self._s[3430]! } - public var CreatePoll_Quiz: String { return self._s[3431]! } - public var PhotoEditor_ContrastTool: String { return self._s[3434]! } + public var ClearCache_Forever: String { return self._s[3430]! } + public var AuthSessions_AddDeviceIntro_Title: String { return self._s[3431]! } + public var CreatePoll_Quiz: String { return self._s[3432]! } + public var PhotoEditor_ContrastTool: String { return self._s[3435]! } public func PUSH_PINNED_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3435]!, self._r[3435]!, [_1]) + return formatWithArgumentRanges(self._s[3436]!, self._r[3436]!, [_1]) } - public var DialogList_Draft: String { return self._s[3436]! } - public var Wallet_Configuration_BlockchainIdInfo: String { return self._s[3437]! } + public var DialogList_Draft: String { return self._s[3437]! } + public var Wallet_Configuration_BlockchainIdInfo: String { return self._s[3438]! } public func PeopleNearby_VisibleUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3438]!, self._r[3438]!, [_0]) + return formatWithArgumentRanges(self._s[3439]!, self._r[3439]!, [_0]) } - public var Privacy_TopPeersDelete: String { return self._s[3440]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[3441]! } - public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3442]! } - public var WebSearch_RecentSectionClear: String { return self._s[3443]! } - public var EditTheme_ErrorInvalidCharacters: String { return self._s[3444]! } - public var Watch_ChatList_NoConversationsTitle: String { return self._s[3446]! } - public var PeerInfo_ButtonMore: String { return self._s[3448]! } - public var Common_Done: String { return self._s[3449]! } - public var Shortcut_SwitchAccount: String { return self._s[3450]! } - public var AuthSessions_EmptyText: String { return self._s[3451]! } - public var Wallet_Configuration_BlockchainNameChangedTitle: String { return self._s[3452]! } - public var Conversation_ShareBotContactConfirmation: String { return self._s[3453]! } - public var Tour_Title5: String { return self._s[3454]! } - public var Wallet_Settings_Title: String { return self._s[3455]! } + public var Privacy_TopPeersDelete: String { return self._s[3441]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[3442]! } + public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3443]! } + public var WebSearch_RecentSectionClear: String { return self._s[3444]! } + public var EditTheme_ErrorInvalidCharacters: String { return self._s[3445]! } + public var Watch_ChatList_NoConversationsTitle: String { return self._s[3447]! } + public var PeerInfo_ButtonMore: String { return self._s[3449]! } + public var Common_Done: String { return self._s[3450]! } + public var Shortcut_SwitchAccount: String { return self._s[3451]! } + public var AuthSessions_EmptyText: String { return self._s[3452]! } + public var Wallet_Configuration_BlockchainNameChangedTitle: String { return self._s[3453]! } + public var Conversation_ShareBotContactConfirmation: String { return self._s[3454]! } + public var Tour_Title5: String { return self._s[3455]! } + public var Wallet_Settings_Title: String { return self._s[3456]! } public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3456]!, self._r[3456]!, [_0]) + return formatWithArgumentRanges(self._s[3457]!, self._r[3457]!, [_0]) } - public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3457]! } - public var Conversation_LinkDialogSave: String { return self._s[3458]! } - public var GroupInfo_ActionRestrict: String { return self._s[3459]! } - public var Checkout_Title: String { return self._s[3460]! } - public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3462]! } - public var Channel_AdminLog_CanChangeInfo: String { return self._s[3464]! } - public var Notification_RenamedGroup: String { return self._s[3465]! } - public var PeopleNearby_Groups: String { return self._s[3466]! } - public var Checkout_PayWithFaceId: String { return self._s[3467]! } - public var Channel_BanList_BlockedTitle: String { return self._s[3468]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3470]! } - public var Checkout_WebConfirmation_Title: String { return self._s[3471]! } - public var Notifications_MessageNotificationsAlert: String { return self._s[3472]! } + public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3458]! } + public var Conversation_LinkDialogSave: String { return self._s[3459]! } + public var GroupInfo_ActionRestrict: String { return self._s[3460]! } + public var Checkout_Title: String { return self._s[3461]! } + public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3463]! } + public var Channel_AdminLog_CanChangeInfo: String { return self._s[3465]! } + public var Notification_RenamedGroup: String { return self._s[3466]! } + public var PeopleNearby_Groups: String { return self._s[3467]! } + public var Checkout_PayWithFaceId: String { return self._s[3468]! } + public var Channel_BanList_BlockedTitle: String { return self._s[3469]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3471]! } + public var Checkout_WebConfirmation_Title: String { return self._s[3472]! } + public var Notifications_MessageNotificationsAlert: String { return self._s[3473]! } public func Activity_RemindAboutGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3473]!, self._r[3473]!, [_0]) + return formatWithArgumentRanges(self._s[3474]!, self._r[3474]!, [_0]) } - public var Profile_AddToExisting: String { return self._s[3475]! } + public var Profile_AddToExisting: String { return self._s[3476]! } public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3476]!, self._r[3476]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3477]!, self._r[3477]!, [_0, _1]) } - public var Cache_Files: String { return self._s[3478]! } - public var Permissions_PrivacyPolicy: String { return self._s[3479]! } - public var SocksProxySetup_ConnectAndSave: String { return self._s[3480]! } - public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3481]! } - public var AutoDownloadSettings_TypeContacts: String { return self._s[3483]! } - public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3485]! } - public var Calls_NoCallsPlaceholder: String { return self._s[3486]! } + public var Cache_Files: String { return self._s[3479]! } + public var Permissions_PrivacyPolicy: String { return self._s[3480]! } + public var SocksProxySetup_ConnectAndSave: String { return self._s[3481]! } + public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3482]! } + public var AutoDownloadSettings_TypeContacts: String { return self._s[3484]! } + public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3486]! } + public var Calls_NoCallsPlaceholder: String { return self._s[3487]! } public func Wallet_Receive_ShareInvoiceUrlInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3487]!, self._r[3487]!, [_0]) + return formatWithArgumentRanges(self._s[3488]!, self._r[3488]!, [_0]) } - public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3488]! } - public var VoiceOver_AttachMedia: String { return self._s[3491]! } - public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3492]! } + public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3489]! } + public var VoiceOver_AttachMedia: String { return self._s[3492]! } + public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3493]! } public func PUSH_CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3493]!, self._r[3493]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3494]!, self._r[3494]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3494]! } - public var Conversation_SetReminder_Title: String { return self._s[3495]! } - public var Passport_FieldAddressHelp: String { return self._s[3496]! } - public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3497]! } - public var PUSH_REMINDER_TITLE: String { return self._s[3498]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3495]! } + public var Conversation_SetReminder_Title: String { return self._s[3496]! } + public var Passport_FieldAddressHelp: String { return self._s[3497]! } + public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3498]! } + public var PUSH_REMINDER_TITLE: String { return self._s[3499]! } public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3499]!, self._r[3499]!, [_0]) + return formatWithArgumentRanges(self._s[3500]!, self._r[3500]!, [_0]) } - public var Channel_AdminLog_EmptyTitle: String { return self._s[3500]! } - public var Privacy_Calls_NeverAllow_Title: String { return self._s[3501]! } - public var Login_UnknownError: String { return self._s[3502]! } - public var Group_UpgradeNoticeText2: String { return self._s[3505]! } - public var Watch_Compose_AddContact: String { return self._s[3506]! } - public var ClearCache_StorageServiceFiles: String { return self._s[3507]! } - public var Web_Error: String { return self._s[3508]! } - public var Gif_Search: String { return self._s[3509]! } - public var Profile_MessageLifetime1h: String { return self._s[3510]! } - public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3511]! } - public var Channel_Username_CheckingUsername: String { return self._s[3512]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[3513]! } - public var AutoDownloadSettings_TypeChannels: String { return self._s[3514]! } - public var Channel_AboutItem: String { return self._s[3515]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3517]! } - public var VoiceOver_Chat_VoiceMessage: String { return self._s[3518]! } - public var GroupInfo_SharedMedia: String { return self._s[3519]! } + public var Channel_AdminLog_EmptyTitle: String { return self._s[3501]! } + public var Privacy_Calls_NeverAllow_Title: String { return self._s[3502]! } + public var Login_UnknownError: String { return self._s[3503]! } + public var Group_UpgradeNoticeText2: String { return self._s[3506]! } + public var Watch_Compose_AddContact: String { return self._s[3507]! } + public var ClearCache_StorageServiceFiles: String { return self._s[3508]! } + public var Web_Error: String { return self._s[3509]! } + public var Gif_Search: String { return self._s[3510]! } + public var Profile_MessageLifetime1h: String { return self._s[3511]! } + public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3512]! } + public var Channel_Username_CheckingUsername: String { return self._s[3513]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[3514]! } + public var AutoDownloadSettings_TypeChannels: String { return self._s[3515]! } + public var Channel_AboutItem: String { return self._s[3516]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3518]! } + public var VoiceOver_Chat_VoiceMessage: String { return self._s[3519]! } + public var GroupInfo_SharedMedia: String { return self._s[3520]! } public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3520]!, self._r[3520]!, [_1]) + return formatWithArgumentRanges(self._s[3521]!, self._r[3521]!, [_1]) } - public var Call_PhoneCallInProgressMessage: String { return self._s[3521]! } + public var Call_PhoneCallInProgressMessage: String { return self._s[3522]! } public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3522]!, self._r[3522]!, [_1]) + return formatWithArgumentRanges(self._s[3523]!, self._r[3523]!, [_1]) } - public var ChatList_UndoArchiveRevealedText: String { return self._s[3523]! } - public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3524]! } - public var Conversation_SearchByName_Placeholder: String { return self._s[3525]! } - public var CreatePoll_AddOption: String { return self._s[3526]! } - public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3527]! } - public var Group_UpgradeNoticeHeader: String { return self._s[3528]! } - public var Channel_Management_AddModerator: String { return self._s[3529]! } - public var AutoDownloadSettings_MaxFileSize: String { return self._s[3530]! } - public var StickerPacksSettings_ShowStickersButton: String { return self._s[3531]! } - public var Wallet_Info_RefreshErrorNetworkText: String { return self._s[3532]! } - public var Theme_Colors_Background: String { return self._s[3533]! } - public var NotificationsSound_Hello: String { return self._s[3536]! } - public var SocksProxySetup_SavedProxies: String { return self._s[3538]! } - public var Channel_Stickers_Placeholder: String { return self._s[3540]! } + public var ChatList_UndoArchiveRevealedText: String { return self._s[3524]! } + public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3525]! } + public var Conversation_SearchByName_Placeholder: String { return self._s[3526]! } + public var CreatePoll_AddOption: String { return self._s[3527]! } + public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3528]! } + public var Group_UpgradeNoticeHeader: String { return self._s[3529]! } + public var Channel_Management_AddModerator: String { return self._s[3530]! } + public var AutoDownloadSettings_MaxFileSize: String { return self._s[3531]! } + public var StickerPacksSettings_ShowStickersButton: String { return self._s[3532]! } + public var Wallet_Info_RefreshErrorNetworkText: String { return self._s[3533]! } + public var Theme_Colors_Background: String { return self._s[3534]! } + public var NotificationsSound_Hello: String { return self._s[3537]! } + public var SocksProxySetup_SavedProxies: String { return self._s[3539]! } + public var Channel_Stickers_Placeholder: String { return self._s[3541]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3541]!, self._r[3541]!, [_0]) + return formatWithArgumentRanges(self._s[3542]!, self._r[3542]!, [_0]) } - public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3542]! } - public var Channel_Management_AddModeratorHelp: String { return self._s[3543]! } - public var ContactInfo_BirthdayLabel: String { return self._s[3544]! } - public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3545]! } - public var AutoDownloadSettings_Channels: String { return self._s[3546]! } - public var Passport_Language_mn: String { return self._s[3547]! } - public var Settings_ChatFolders: String { return self._s[3548]! } - public var Notifications_ResetAllNotificationsHelp: String { return self._s[3551]! } - public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3552]! } - public var Passport_Language_ja: String { return self._s[3554]! } - public var Settings_About_Title: String { return self._s[3555]! } - public var Settings_NotificationsAndSounds: String { return self._s[3556]! } - public var ChannelInfo_DeleteGroup: String { return self._s[3557]! } - public var Settings_BlockedUsers: String { return self._s[3558]! } + public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3543]! } + public var Channel_Management_AddModeratorHelp: String { return self._s[3544]! } + public var ContactInfo_BirthdayLabel: String { return self._s[3545]! } + public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3546]! } + public var AutoDownloadSettings_Channels: String { return self._s[3547]! } + public var Passport_Language_mn: String { return self._s[3548]! } + public var Settings_ChatFolders: String { return self._s[3549]! } + public var Notifications_ResetAllNotificationsHelp: String { return self._s[3552]! } + public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3553]! } + public var Passport_Language_ja: String { return self._s[3555]! } + public var Settings_About_Title: String { return self._s[3556]! } + public var Settings_NotificationsAndSounds: String { return self._s[3557]! } + public var ChannelInfo_DeleteGroup: String { return self._s[3558]! } + public var Settings_BlockedUsers: String { return self._s[3559]! } public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3559]!, self._r[3559]!, [_0]) + return formatWithArgumentRanges(self._s[3560]!, self._r[3560]!, [_0]) } - public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3560]! } - public var Wallet_Weekday_Today: String { return self._s[3561]! } - public var ChatListFolderSettings_AddRecommended: String { return self._s[3562]! } - public var AutoDownloadSettings_PreloadVideo: String { return self._s[3563]! } - public var Widget_ApplicationLocked: String { return self._s[3564]! } - public var Passport_Address_AddResidentialAddress: String { return self._s[3565]! } - public var Channel_Username_Title: String { return self._s[3566]! } + public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3561]! } + public var Wallet_Weekday_Today: String { return self._s[3562]! } + public var ChatListFolderSettings_AddRecommended: String { return self._s[3563]! } + public var AutoDownloadSettings_PreloadVideo: String { return self._s[3564]! } + public var Widget_ApplicationLocked: String { return self._s[3565]! } + public var Passport_Address_AddResidentialAddress: String { return self._s[3566]! } + public var Channel_Username_Title: String { return self._s[3567]! } public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3567]!, self._r[3567]!, [_0]) + return formatWithArgumentRanges(self._s[3568]!, self._r[3568]!, [_0]) } - public var AttachmentMenu_File: String { return self._s[3569]! } - public var AppleWatch_Title: String { return self._s[3570]! } - public var Activity_RecordingVideoMessage: String { return self._s[3571]! } + public var AttachmentMenu_File: String { return self._s[3570]! } + public var AppleWatch_Title: String { return self._s[3571]! } + public var Activity_RecordingVideoMessage: String { return self._s[3572]! } public func Channel_DiscussionGroup_PublicChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3572]!, self._r[3572]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3573]!, self._r[3573]!, [_1, _2]) } - public var Theme_Colors_Messages: String { return self._s[3573]! } - public var Weekday_Saturday: String { return self._s[3574]! } - public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3575]! } - public var Profile_CreateEncryptedChatError: String { return self._s[3576]! } - public var Common_Next: String { return self._s[3578]! } - public var Channel_Stickers_YourStickers: String { return self._s[3580]! } - public var Message_Theme: String { return self._s[3581]! } - public var Call_AudioRouteHeadphones: String { return self._s[3582]! } - public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3584]! } - public var Watch_Contacts_NoResults: String { return self._s[3586]! } - public var PhotoEditor_TintTool: String { return self._s[3589]! } - public var LoginPassword_ResetAccount: String { return self._s[3591]! } - public var Settings_SavedMessages: String { return self._s[3592]! } - public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3593]! } - public var Bot_GenericSupportStatus: String { return self._s[3594]! } - public var StickerPack_Add: String { return self._s[3595]! } - public var Checkout_TotalAmount: String { return self._s[3596]! } - public var Your_cards_number_is_invalid: String { return self._s[3597]! } - public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3598]! } - public var VoiceOver_Chat_VideoMessage: String { return self._s[3599]! } + public var Theme_Colors_Messages: String { return self._s[3574]! } + public var Weekday_Saturday: String { return self._s[3575]! } + public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3576]! } + public var Profile_CreateEncryptedChatError: String { return self._s[3577]! } + public var Common_Next: String { return self._s[3579]! } + public var Channel_Stickers_YourStickers: String { return self._s[3581]! } + public var Message_Theme: String { return self._s[3582]! } + public var Call_AudioRouteHeadphones: String { return self._s[3583]! } + public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3585]! } + public var Watch_Contacts_NoResults: String { return self._s[3587]! } + public var PhotoEditor_TintTool: String { return self._s[3590]! } + public var LoginPassword_ResetAccount: String { return self._s[3592]! } + public var Settings_SavedMessages: String { return self._s[3593]! } + public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3594]! } + public var Bot_GenericSupportStatus: String { return self._s[3595]! } + public var StickerPack_Add: String { return self._s[3596]! } + public var Checkout_TotalAmount: String { return self._s[3597]! } + public var Your_cards_number_is_invalid: String { return self._s[3598]! } + public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3599]! } + public var VoiceOver_Chat_VideoMessage: String { return self._s[3600]! } public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3600]!, self._r[3600]!, [_0]) + return formatWithArgumentRanges(self._s[3601]!, self._r[3601]!, [_0]) } public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3601]!, self._r[3601]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3602]!, self._r[3602]!, [_1, _2]) } - public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3602]! } + public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3603]! } public func PUSH_CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3604]!, self._r[3604]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3605]!, self._r[3605]!, [_1, _2]) } public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3605]!, self._r[3605]!, [_0]) + return formatWithArgumentRanges(self._s[3606]!, self._r[3606]!, [_0]) } - public var GroupInfo_InviteLink_ShareLink: String { return self._s[3606]! } - public var StickerPack_Share: String { return self._s[3607]! } - public var Passport_DeleteAddress: String { return self._s[3608]! } - public var Settings_Passport: String { return self._s[3609]! } - public var SharedMedia_EmptyFilesText: String { return self._s[3610]! } - public var Conversation_DeleteMessagesForMe: String { return self._s[3611]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3612]! } - public var Contacts_PermissionsText: String { return self._s[3613]! } - public var Group_Setup_HistoryVisible: String { return self._s[3614]! } - public var Wallet_Month_ShortDecember: String { return self._s[3616]! } - public var Channel_EditAdmin_PermissionEnabledByDefault: String { return self._s[3617]! } - public var Passport_Address_AddRentalAgreement: String { return self._s[3618]! } - public var SocksProxySetup_Title: String { return self._s[3619]! } - public var Notification_Mute1h: String { return self._s[3620]! } + public var GroupInfo_InviteLink_ShareLink: String { return self._s[3607]! } + public var StickerPack_Share: String { return self._s[3608]! } + public var Passport_DeleteAddress: String { return self._s[3609]! } + public var Settings_Passport: String { return self._s[3610]! } + public var SharedMedia_EmptyFilesText: String { return self._s[3611]! } + public var Conversation_DeleteMessagesForMe: String { return self._s[3612]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3613]! } + public var Contacts_PermissionsText: String { return self._s[3614]! } + public var Group_Setup_HistoryVisible: String { return self._s[3615]! } + public var Wallet_Month_ShortDecember: String { return self._s[3617]! } + public var Channel_EditAdmin_PermissionEnabledByDefault: String { return self._s[3618]! } + public var Passport_Address_AddRentalAgreement: String { return self._s[3619]! } + public var SocksProxySetup_Title: String { return self._s[3620]! } + public var Notification_Mute1h: String { return self._s[3621]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3621]!, self._r[3621]!, [_0]) + return formatWithArgumentRanges(self._s[3622]!, self._r[3622]!, [_0]) } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3622]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3623]! } public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3623]!, self._r[3623]!, [_1]) + return formatWithArgumentRanges(self._s[3624]!, self._r[3624]!, [_1]) } - public var FastTwoStepSetup_PasswordSection: String { return self._s[3624]! } - public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3627]! } - public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3629]! } - public var DialogList_NoMessagesText: String { return self._s[3630]! } - public var Privacy_ContactsResetConfirmation: String { return self._s[3631]! } - public var Privacy_Calls_P2PHelp: String { return self._s[3632]! } - public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3634]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[3635]! } - public var Common_TakePhotoOrVideo: String { return self._s[3636]! } - public var Wallet_Words_Text: String { return self._s[3637]! } - public var Call_StatusBusy: String { return self._s[3638]! } - public var Conversation_PinnedMessage: String { return self._s[3639]! } - public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3640]! } - public var ChatList_EmptyChatListNewMessage: String { return self._s[3641]! } - public var Wallet_Configuration_BlockchainNameChangedProceed: String { return self._s[3642]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3643]! } - public var Undo_ChatCleared: String { return self._s[3644]! } - public var AppleWatch_ReplyPresets: String { return self._s[3645]! } - public var Passport_DiscardMessageDescription: String { return self._s[3647]! } - public var Login_NetworkError: String { return self._s[3648]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[3625]! } + public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3628]! } + public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3630]! } + public var DialogList_NoMessagesText: String { return self._s[3631]! } + public var Privacy_ContactsResetConfirmation: String { return self._s[3632]! } + public var Privacy_Calls_P2PHelp: String { return self._s[3633]! } + public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3635]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[3636]! } + public var Common_TakePhotoOrVideo: String { return self._s[3637]! } + public var Wallet_Words_Text: String { return self._s[3638]! } + public var Call_StatusBusy: String { return self._s[3639]! } + public var Conversation_PinnedMessage: String { return self._s[3640]! } + public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3641]! } + public var ChatList_EmptyChatListNewMessage: String { return self._s[3642]! } + public var Wallet_Configuration_BlockchainNameChangedProceed: String { return self._s[3643]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3644]! } + public var Undo_ChatCleared: String { return self._s[3645]! } + public var AppleWatch_ReplyPresets: String { return self._s[3646]! } + public var Passport_DiscardMessageDescription: String { return self._s[3648]! } + public var Login_NetworkError: String { return self._s[3649]! } public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3649]!, self._r[3649]!, [_0]) - } - public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3650]!, self._r[3650]!, [_0]) } - public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3651]! } - public var Wallet_WordCheck_ViewWords: String { return self._s[3653]! } - public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3654]! } + public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3651]!, self._r[3651]!, [_0]) + } + public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3652]! } + public var Wallet_WordCheck_ViewWords: String { return self._s[3654]! } + public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3655]! } public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3656]!, self._r[3656]!, [_0]) + return formatWithArgumentRanges(self._s[3657]!, self._r[3657]!, [_0]) } - public var Call_ConnectionErrorMessage: String { return self._s[3657]! } - public var VoiceOver_Chat_Music: String { return self._s[3658]! } - public var ChatListFolder_CategoryContacts: String { return self._s[3659]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3660]! } - public var Compose_GroupTokenListPlaceholder: String { return self._s[3662]! } - public var ConversationMedia_Title: String { return self._s[3663]! } - public var EncryptionKey_Title: String { return self._s[3665]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3666]! } - public var Notification_Exceptions_AddException: String { return self._s[3667]! } - public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3668]! } - public var Profile_MessageLifetime1m: String { return self._s[3669]! } + public var Call_ConnectionErrorMessage: String { return self._s[3658]! } + public var VoiceOver_Chat_Music: String { return self._s[3659]! } + public var ChatListFolder_CategoryContacts: String { return self._s[3660]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3661]! } + public var Compose_GroupTokenListPlaceholder: String { return self._s[3663]! } + public var ConversationMedia_Title: String { return self._s[3664]! } + public var EncryptionKey_Title: String { return self._s[3666]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3667]! } + public var Notification_Exceptions_AddException: String { return self._s[3668]! } + public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3669]! } + public var Profile_MessageLifetime1m: String { return self._s[3670]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3670]!, self._r[3670]!, [_1]) + return formatWithArgumentRanges(self._s[3671]!, self._r[3671]!, [_1]) } - public var Month_GenMay: String { return self._s[3671]! } + public var Month_GenMay: String { return self._s[3672]! } public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3672]!, self._r[3672]!, [_0]) + return formatWithArgumentRanges(self._s[3673]!, self._r[3673]!, [_0]) } - public var PeopleNearby_Users: String { return self._s[3673]! } - public var Wallet_Send_AddressInfo: String { return self._s[3674]! } - public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3675]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[3676]! } + public var PeopleNearby_Users: String { return self._s[3674]! } + public var Wallet_Send_AddressInfo: String { return self._s[3675]! } + public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3676]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[3677]! } public func Wallet_Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3678]!, self._r[3678]!, [_0]) + return formatWithArgumentRanges(self._s[3679]!, self._r[3679]!, [_0]) } - public var Stats_LoadingTitle: String { return self._s[3679]! } - public var Conversation_EmptyPlaceholder: String { return self._s[3680]! } - public var Passport_Address_AddPassportRegistration: String { return self._s[3681]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[3682]! } - public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3683]! } - public var Camera_TapAndHoldForVideo: String { return self._s[3684]! } - public var Channel_JoinChannel: String { return self._s[3686]! } - public var Appearance_Animations: String { return self._s[3689]! } + public var Stats_LoadingTitle: String { return self._s[3680]! } + public var Conversation_EmptyPlaceholder: String { return self._s[3681]! } + public var Passport_Address_AddPassportRegistration: String { return self._s[3682]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[3683]! } + public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3684]! } + public var Camera_TapAndHoldForVideo: String { return self._s[3685]! } + public var Channel_JoinChannel: String { return self._s[3687]! } + public var Appearance_Animations: String { return self._s[3690]! } public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3690]!, self._r[3690]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3691]!, self._r[3691]!, [_1, _2]) } - public var Stickers_GroupStickers: String { return self._s[3692]! } - public var Appearance_ShareTheme: String { return self._s[3693]! } - public var TwoFactorSetup_Hint_Placeholder: String { return self._s[3694]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[3696]! } - public var StickerPackActionInfo_RemovedTitle: String { return self._s[3697]! } - public var Passport_Address_Street: String { return self._s[3698]! } - public var Conversation_AddContact: String { return self._s[3699]! } - public var Login_PhonePlaceholder: String { return self._s[3700]! } - public var Channel_Members_InviteLink: String { return self._s[3702]! } - public var Bot_Stop: String { return self._s[3703]! } - public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3705]! } - public var Notification_PassportValueAddress: String { return self._s[3706]! } - public var Month_ShortJuly: String { return self._s[3707]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3708]! } - public var Channel_AdminLog_BanSendMedia: String { return self._s[3709]! } - public var Passport_Identity_ReverseSide: String { return self._s[3710]! } - public var Watch_Stickers_Recents: String { return self._s[3713]! } - public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3715]! } - public var Map_SendThisLocation: String { return self._s[3716]! } + public var Stickers_GroupStickers: String { return self._s[3693]! } + public var Appearance_ShareTheme: String { return self._s[3694]! } + public var TwoFactorSetup_Hint_Placeholder: String { return self._s[3695]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[3697]! } + public var StickerPackActionInfo_RemovedTitle: String { return self._s[3698]! } + public var Passport_Address_Street: String { return self._s[3699]! } + public var Conversation_AddContact: String { return self._s[3700]! } + public var Login_PhonePlaceholder: String { return self._s[3701]! } + public var Channel_Members_InviteLink: String { return self._s[3703]! } + public var Bot_Stop: String { return self._s[3704]! } + public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3706]! } + public var Notification_PassportValueAddress: String { return self._s[3707]! } + public var Month_ShortJuly: String { return self._s[3708]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3709]! } + public var Channel_AdminLog_BanSendMedia: String { return self._s[3710]! } + public var Passport_Identity_ReverseSide: String { return self._s[3711]! } + public var Watch_Stickers_Recents: String { return self._s[3714]! } + public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3716]! } + public var Map_SendThisLocation: String { return self._s[3717]! } public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3717]!, self._r[3717]!, [_0]) - } - public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3718]!, self._r[3718]!, [_0]) } - public var ConvertToSupergroup_Note: String { return self._s[3719]! } - public var Wallet_Intro_NotNow: String { return self._s[3720]! } + public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3719]!, self._r[3719]!, [_0]) + } + public var ConvertToSupergroup_Note: String { return self._s[3720]! } + public var Wallet_Intro_NotNow: String { return self._s[3721]! } public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3721]!, self._r[3721]!, [_0]) + return formatWithArgumentRanges(self._s[3722]!, self._r[3722]!, [_0]) } - public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3722]! } + public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3723]! } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3723]!, self._r[3723]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3724]!, self._r[3724]!, [_0, _1]) } - public var Login_CallRequestState3: String { return self._s[3725]! } - public var Wallpaper_SearchShort: String { return self._s[3726]! } - public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3728]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3729]! } - public var Channel_BotDoesntSupportGroups: String { return self._s[3730]! } + public var Login_CallRequestState3: String { return self._s[3726]! } + public var Wallpaper_SearchShort: String { return self._s[3727]! } + public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3729]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3730]! } + public var Channel_BotDoesntSupportGroups: String { return self._s[3731]! } public func PUSH_CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3731]!, self._r[3731]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3732]!, self._r[3732]!, [_1, _2]) } - public var Channel_AdminLogFilter_Title: String { return self._s[3732]! } - public var Appearance_ThemePreview_Chat_4_Text: String { return self._s[3734]! } - public var Notifications_GroupNotificationsExceptions: String { return self._s[3737]! } + public var Channel_AdminLogFilter_Title: String { return self._s[3733]! } + public var Appearance_ThemePreview_Chat_4_Text: String { return self._s[3735]! } + public var Notifications_GroupNotificationsExceptions: String { return self._s[3738]! } public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3738]!, self._r[3738]!, [_0]) + return formatWithArgumentRanges(self._s[3739]!, self._r[3739]!, [_0]) } - public var Passport_CorrectErrors: String { return self._s[3739]! } - public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3740]! } + public var Passport_CorrectErrors: String { return self._s[3740]! } + public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3741]! } public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3741]!, self._r[3741]!, [_0]) + return formatWithArgumentRanges(self._s[3742]!, self._r[3742]!, [_0]) } - public var Map_SendMyCurrentLocation: String { return self._s[3742]! } - public var Channel_DiscussionGroup: String { return self._s[3743]! } - public var TwoFactorSetup_Email_SkipConfirmationSkip: String { return self._s[3744]! } + public var Map_SendMyCurrentLocation: String { return self._s[3743]! } + public var Channel_DiscussionGroup: String { return self._s[3744]! } + public var TwoFactorSetup_Email_SkipConfirmationSkip: String { return self._s[3745]! } public func PUSH_PINNED_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3745]!, self._r[3745]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3746]!, self._r[3746]!, [_1, _2]) } - public var SharedMedia_SearchNoResults: String { return self._s[3746]! } - public var Permissions_NotificationsText_v0: String { return self._s[3747]! } - public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3748]! } - public var Appearance_AppIcon: String { return self._s[3749]! } - public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3750]! } - public var LoginPassword_FloodError: String { return self._s[3751]! } - public var Wallet_Send_OwnAddressAlertProceed: String { return self._s[3753]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[3754]! } + public var SharedMedia_SearchNoResults: String { return self._s[3747]! } + public var Permissions_NotificationsText_v0: String { return self._s[3748]! } + public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3749]! } + public var Appearance_AppIcon: String { return self._s[3750]! } + public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3751]! } + public var LoginPassword_FloodError: String { return self._s[3752]! } + public var Wallet_Send_OwnAddressAlertProceed: String { return self._s[3754]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[3755]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3755]!, self._r[3755]!, [_0]) + return formatWithArgumentRanges(self._s[3756]!, self._r[3756]!, [_0]) } - public var Passport_Language_bn: String { return self._s[3756]! } + public var Passport_Language_bn: String { return self._s[3757]! } public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3757]!, self._r[3757]!, [_0]) + return formatWithArgumentRanges(self._s[3758]!, self._r[3758]!, [_0]) } - public var ChatList_Context_Pin: String { return self._s[3758]! } + public var ChatList_Context_Pin: String { return self._s[3759]! } public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3759]!, self._r[3759]!, [_0]) - } - public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3760]!, self._r[3760]!, [_0]) } - public var Wallet_Navigation_Close: String { return self._s[3761]! } - public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3765]! } - public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3767]! } - public var Wallet_Month_GenDecember: String { return self._s[3768]! } - public var Contacts_PermissionsAllow: String { return self._s[3769]! } - public var ReportPeer_ReasonCopyright: String { return self._s[3770]! } - public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3771]! } - public var WallpaperPreview_Pattern: String { return self._s[3772]! } - public var Paint_Duplicate: String { return self._s[3773]! } - public var Passport_Address_Country: String { return self._s[3774]! } - public var Notification_RenamedChannel: String { return self._s[3776]! } - public var DialogList_UnknownPinLimitError: String { return self._s[3777]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3778]! } - public var ChatList_Context_Unmute: String { return self._s[3779]! } - public var Group_MessagePhotoUpdated: String { return self._s[3780]! } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[3781]! } - public var Conversation_ContextMenuBan: String { return self._s[3782]! } - public var TwoStepAuth_EmailSent: String { return self._s[3783]! } - public var MessagePoll_NoVotes: String { return self._s[3784]! } - public var Wallet_Send_ErrorNotEnoughFundsTitle: String { return self._s[3785]! } - public var Passport_Language_is: String { return self._s[3787]! } - public var PeopleNearby_UsersEmpty: String { return self._s[3789]! } - public var Tour_Text5: String { return self._s[3790]! } + public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3761]!, self._r[3761]!, [_0]) + } + public var Wallet_Navigation_Close: String { return self._s[3762]! } + public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3766]! } + public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3768]! } + public var Wallet_Month_GenDecember: String { return self._s[3769]! } + public var Contacts_PermissionsAllow: String { return self._s[3770]! } + public var ReportPeer_ReasonCopyright: String { return self._s[3771]! } + public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3772]! } + public var WallpaperPreview_Pattern: String { return self._s[3773]! } + public var Paint_Duplicate: String { return self._s[3774]! } + public var Passport_Address_Country: String { return self._s[3775]! } + public var Notification_RenamedChannel: String { return self._s[3777]! } + public var DialogList_UnknownPinLimitError: String { return self._s[3778]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3779]! } + public var ChatList_Context_Unmute: String { return self._s[3780]! } + public var Group_MessagePhotoUpdated: String { return self._s[3781]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[3782]! } + public var Conversation_ContextMenuBan: String { return self._s[3783]! } + public var TwoStepAuth_EmailSent: String { return self._s[3784]! } + public var MessagePoll_NoVotes: String { return self._s[3785]! } + public var Wallet_Send_ErrorNotEnoughFundsTitle: String { return self._s[3786]! } + public var Passport_Language_is: String { return self._s[3788]! } + public var PeopleNearby_UsersEmpty: String { return self._s[3790]! } + public var Tour_Text5: String { return self._s[3791]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3793]!, self._r[3793]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3794]!, self._r[3794]!, [_1, _2]) } - public var Undo_SecretChatDeleted: String { return self._s[3794]! } - public var SocksProxySetup_ShareQRCode: String { return self._s[3795]! } + public var Undo_SecretChatDeleted: String { return self._s[3795]! } + public var SocksProxySetup_ShareQRCode: String { return self._s[3796]! } public func VoiceOver_Chat_Size(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3796]!, self._r[3796]!, [_0]) + return formatWithArgumentRanges(self._s[3797]!, self._r[3797]!, [_0]) } - public var Forward_ErrorDisabledForChat: String { return self._s[3797]! } - public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3798]! } - public var Paint_Edit: String { return self._s[3800]! } - public var ScheduledMessages_ReminderNotification: String { return self._s[3802]! } - public var Undo_DeletedGroup: String { return self._s[3804]! } - public var LoginPassword_ForgotPassword: String { return self._s[3805]! } - public var Wallet_WordImport_IncorrectTitle: String { return self._s[3806]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[3807]! } + public var Forward_ErrorDisabledForChat: String { return self._s[3798]! } + public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3799]! } + public var Paint_Edit: String { return self._s[3801]! } + public var ScheduledMessages_ReminderNotification: String { return self._s[3803]! } + public var Undo_DeletedGroup: String { return self._s[3805]! } + public var LoginPassword_ForgotPassword: String { return self._s[3806]! } + public var Wallet_WordImport_IncorrectTitle: String { return self._s[3807]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[3808]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3808]!, self._r[3808]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3809]!, self._r[3809]!, [_0, _1]) } - public var AppWallet_TransactionInfo_FeeInfoURL: String { return self._s[3809]! } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3810]! } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3811]! } - public var Passport_Language_uz: String { return self._s[3812]! } + public var AppWallet_TransactionInfo_FeeInfoURL: String { return self._s[3810]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3811]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3812]! } public var Conversation_PinMessageAlertGroup: String { return self._s[3813]! } - public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3814]! } - public var Map_StopLiveLocation: String { return self._s[3816]! } - public var VoiceOver_MessageContextSend: String { return self._s[3818]! } - public var PasscodeSettings_Help: String { return self._s[3819]! } - public var NotificationsSound_Input: String { return self._s[3820]! } - public var Share_Title: String { return self._s[3823]! } - public var LogoutOptions_Title: String { return self._s[3824]! } - public var Wallet_Send_AddressText: String { return self._s[3825]! } - public var Login_TermsOfServiceAgree: String { return self._s[3826]! } - public var Compose_NewEncryptedChatTitle: String { return self._s[3827]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3828]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3829]! } - public var EnterPasscode_EnterTitle: String { return self._s[3830]! } + public var Passport_Language_uz: String { return self._s[3814]! } + public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3815]! } + public var Map_StopLiveLocation: String { return self._s[3817]! } + public var VoiceOver_MessageContextSend: String { return self._s[3819]! } + public var PasscodeSettings_Help: String { return self._s[3820]! } + public var NotificationsSound_Input: String { return self._s[3821]! } + public var Share_Title: String { return self._s[3824]! } + public var LogoutOptions_Title: String { return self._s[3825]! } + public var Wallet_Send_AddressText: String { return self._s[3826]! } + public var Login_TermsOfServiceAgree: String { return self._s[3827]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[3828]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3829]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3830]! } + public var EnterPasscode_EnterTitle: String { return self._s[3831]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3831]!, self._r[3831]!, [_0]) + return formatWithArgumentRanges(self._s[3832]!, self._r[3832]!, [_0]) } - public var Settings_CopyPhoneNumber: String { return self._s[3832]! } - public var Conversation_AddToContacts: String { return self._s[3833]! } + public var Settings_CopyPhoneNumber: String { return self._s[3833]! } + public var Conversation_AddToContacts: String { return self._s[3834]! } public func VoiceOver_Chat_ReplyFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3834]!, self._r[3834]!, [_0]) + return formatWithArgumentRanges(self._s[3835]!, self._r[3835]!, [_0]) } - public var NotificationsSound_Keys: String { return self._s[3835]! } + public var NotificationsSound_Keys: String { return self._s[3836]! } public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3836]!, self._r[3836]!, [_0]) + return formatWithArgumentRanges(self._s[3837]!, self._r[3837]!, [_0]) } - public var Notification_MessageLifetime1w: String { return self._s[3837]! } - public var Message_Video: String { return self._s[3838]! } - public var AutoDownloadSettings_CellularTitle: String { return self._s[3839]! } + public var Notification_MessageLifetime1w: String { return self._s[3838]! } + public var Message_Video: String { return self._s[3839]! } + public var AutoDownloadSettings_CellularTitle: String { return self._s[3840]! } public func PUSH_CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3840]!, self._r[3840]!, [_1]) + return formatWithArgumentRanges(self._s[3841]!, self._r[3841]!, [_1]) } - public var Wallet_Receive_AmountInfo: String { return self._s[3843]! } - public var Stats_Overview: String { return self._s[3844]! } + public var Wallet_Receive_AmountInfo: String { return self._s[3844]! } + public var Stats_Overview: String { return self._s[3845]! } public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3845]!, self._r[3845]!, [_0]) - } - public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3846]!, self._r[3846]!, [_0]) } - public var ChatListFolder_ExcludeChatsTitle: String { return self._s[3847]! } - public var Passport_Language_mk: String { return self._s[3848]! } - public var ChatListFolder_CategoryNonContacts: String { return self._s[3849]! } - public func Wallet_Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3850]!, self._r[3850]!, [_1, _2, _3]) + public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3847]!, self._r[3847]!, [_0]) } - public var CreatePoll_CancelConfirmation: String { return self._s[3851]! } - public var MessagePoll_LabelAnonymousQuiz: String { return self._s[3852]! } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3854]! } - public var PrivacyPolicy_Decline: String { return self._s[3855]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[3856]! } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3857]! } - public var AuthSessions_AddDeviceIntro_Action: String { return self._s[3858]! } - public var Permissions_SiriAllow_v0: String { return self._s[3860]! } - public var Wallet_Month_ShortAugust: String { return self._s[3861]! } - public var Appearance_ThemeCarouselNight: String { return self._s[3862]! } + public var ChatListFolder_ExcludeChatsTitle: String { return self._s[3848]! } + public var Passport_Language_mk: String { return self._s[3849]! } + public var ChatListFolder_CategoryNonContacts: String { return self._s[3850]! } + public func Wallet_Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3851]!, self._r[3851]!, [_1, _2, _3]) + } + public var CreatePoll_CancelConfirmation: String { return self._s[3852]! } + public var MessagePoll_LabelAnonymousQuiz: String { return self._s[3853]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3855]! } + public var PrivacyPolicy_Decline: String { return self._s[3856]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[3857]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3858]! } + public var AuthSessions_AddDeviceIntro_Action: String { return self._s[3859]! } + public var Permissions_SiriAllow_v0: String { return self._s[3861]! } + public var Wallet_Month_ShortAugust: String { return self._s[3862]! } + public var Appearance_ThemeCarouselNight: String { return self._s[3863]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3863]!, self._r[3863]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3864]!, self._r[3864]!, [_1, "\(_2)"]) } public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3864]!, self._r[3864]!, [_0]) + return formatWithArgumentRanges(self._s[3865]!, self._r[3865]!, [_0]) } - public var Paint_Regular: String { return self._s[3865]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[3866]! } - public var SocksProxySetup_ShareLink: String { return self._s[3867]! } - public var Wallet_Qr_Title: String { return self._s[3868]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[3869]! } - public var Conversation_Dice: String { return self._s[3870]! } - public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3872]! } - public var Wallet_Settings_Configuration: String { return self._s[3873]! } - public var GroupInfo_InviteByLink: String { return self._s[3874]! } - public var MessageTimer_Custom: String { return self._s[3875]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3876]! } - public var Conversation_StopQuizConfirmationTitle: String { return self._s[3877]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3879]! } - public var Conversation_SendMessage_SetReminder: String { return self._s[3880]! } - public var VoiceOver_Chat_Selected: String { return self._s[3881]! } - public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3882]! } - public var Channel_Username_InvalidTaken: String { return self._s[3883]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[3884]! } - public var Wallet_WordCheck_TryAgain: String { return self._s[3885]! } - public var Wallet_Info_TransactionPendingHeader: String { return self._s[3886]! } - public var Settings_ChatBackground: String { return self._s[3887]! } - public var Channel_Subscribers_Title: String { return self._s[3888]! } - public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3889]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3890]! } - public var Watch_ConnectionDescription: String { return self._s[3891]! } - public var OldChannels_NoticeText: String { return self._s[3894]! } - public var Wallet_Configuration_ApplyErrorTitle: String { return self._s[3895]! } - public var IntentsSettings_SuggestBy: String { return self._s[3897]! } - public var Theme_ThemeChangedText: String { return self._s[3898]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[3899]! } - public var Wallpaper_ResetWallpapers: String { return self._s[3900]! } - public var Wallet_Send_TransactionInProgress: String { return self._s[3901]! } - public var EditProfile_Title: String { return self._s[3902]! } - public var NotificationsSound_Bamboo: String { return self._s[3904]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3906]! } - public var Login_SmsRequestState2: String { return self._s[3907]! } - public var Passport_Language_ar: String { return self._s[3908]! } + public var Paint_Regular: String { return self._s[3866]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[3867]! } + public var SocksProxySetup_ShareLink: String { return self._s[3868]! } + public var Wallet_Qr_Title: String { return self._s[3869]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[3870]! } + public var Conversation_Dice: String { return self._s[3871]! } + public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3873]! } + public var Wallet_Settings_Configuration: String { return self._s[3874]! } + public var GroupInfo_InviteByLink: String { return self._s[3875]! } + public var MessageTimer_Custom: String { return self._s[3876]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3877]! } + public var Conversation_StopQuizConfirmationTitle: String { return self._s[3878]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3880]! } + public var Conversation_SendMessage_SetReminder: String { return self._s[3881]! } + public var VoiceOver_Chat_Selected: String { return self._s[3882]! } + public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3883]! } + public var Channel_Username_InvalidTaken: String { return self._s[3884]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[3885]! } + public var Wallet_WordCheck_TryAgain: String { return self._s[3886]! } + public var Wallet_Info_TransactionPendingHeader: String { return self._s[3887]! } + public var Settings_ChatBackground: String { return self._s[3888]! } + public var Channel_Subscribers_Title: String { return self._s[3889]! } + public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3890]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3891]! } + public var Watch_ConnectionDescription: String { return self._s[3892]! } + public var OldChannels_NoticeText: String { return self._s[3895]! } + public var Wallet_Configuration_ApplyErrorTitle: String { return self._s[3896]! } + public var IntentsSettings_SuggestBy: String { return self._s[3898]! } + public var Theme_ThemeChangedText: String { return self._s[3899]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[3900]! } + public var Wallpaper_ResetWallpapers: String { return self._s[3901]! } + public var Wallet_Send_TransactionInProgress: String { return self._s[3902]! } + public var EditProfile_Title: String { return self._s[3903]! } + public var NotificationsSound_Bamboo: String { return self._s[3905]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3907]! } + public var Login_SmsRequestState2: String { return self._s[3908]! } + public var Passport_Language_ar: String { return self._s[3909]! } public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3909]!, self._r[3909]!, [_0]) + return formatWithArgumentRanges(self._s[3910]!, self._r[3910]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3910]! } - public var Wallet_Created_Text: String { return self._s[3911]! } - public var Conversation_MessageDialogEdit: String { return self._s[3913]! } - public var Wallet_Created_Proceed: String { return self._s[3914]! } - public var Wallet_Words_Done: String { return self._s[3915]! } - public var VoiceOver_Media_PlaybackPause: String { return self._s[3916]! } - public var ChatListFolder_NameChannels: String { return self._s[3917]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3911]! } + public var Wallet_Created_Text: String { return self._s[3912]! } + public var Conversation_MessageDialogEdit: String { return self._s[3914]! } + public var Wallet_Created_Proceed: String { return self._s[3915]! } + public var Wallet_Words_Done: String { return self._s[3916]! } + public var VoiceOver_Media_PlaybackPause: String { return self._s[3917]! } + public var ChatListFolder_NameChannels: String { return self._s[3918]! } public func PUSH_AUTH_UNKNOWN(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3918]!, self._r[3918]!, [_1]) + return formatWithArgumentRanges(self._s[3919]!, self._r[3919]!, [_1]) } - public var Common_Close: String { return self._s[3919]! } - public var GroupInfo_PublicLink: String { return self._s[3920]! } - public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3921]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3922]! } + public var Common_Close: String { return self._s[3920]! } + public var GroupInfo_PublicLink: String { return self._s[3921]! } + public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3922]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3923]! } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3926]!, self._r[3926]!, [_0]) + return formatWithArgumentRanges(self._s[3927]!, self._r[3927]!, [_0]) } - public var UserInfo_About_Placeholder: String { return self._s[3927]! } + public var UserInfo_About_Placeholder: String { return self._s[3928]! } public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3928]!, self._r[3928]!, [_0]) + return formatWithArgumentRanges(self._s[3929]!, self._r[3929]!, [_0]) } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[3929]! } - public var Channel_Info_Banned: String { return self._s[3931]! } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[3930]! } + public var Channel_Info_Banned: String { return self._s[3932]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3932]!, self._r[3932]!, [_0]) + return formatWithArgumentRanges(self._s[3933]!, self._r[3933]!, [_0]) } - public var Appearance_Other: String { return self._s[3933]! } - public var Passport_Language_my: String { return self._s[3934]! } - public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3935]! } + public var Appearance_Other: String { return self._s[3934]! } + public var Passport_Language_my: String { return self._s[3935]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3936]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3936]!, self._r[3936]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3937]!, self._r[3937]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3937]! } - public var IntentsSettings_SuggestedAndSpotlightChatsInfo: String { return self._s[3938]! } - public var Preview_CopyAddress: String { return self._s[3939]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3938]! } + public var IntentsSettings_SuggestedAndSpotlightChatsInfo: String { return self._s[3939]! } + public var Preview_CopyAddress: String { return self._s[3940]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3940]!, self._r[3940]!, [_0]) + return formatWithArgumentRanges(self._s[3941]!, self._r[3941]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[3941]! } - public var UserInfo_BotSettings: String { return self._s[3942]! } - public var LiveLocation_MenuStopAll: String { return self._s[3944]! } - public var Passport_PasswordCreate: String { return self._s[3945]! } - public var StickerSettings_MaskContextInfo: String { return self._s[3946]! } - public var Message_PinnedLocationMessage: String { return self._s[3947]! } - public var Map_Satellite: String { return self._s[3948]! } - public var Watch_Message_Unsupported: String { return self._s[3949]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[3950]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3951]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[3942]! } + public var UserInfo_BotSettings: String { return self._s[3943]! } + public var LiveLocation_MenuStopAll: String { return self._s[3945]! } + public var Passport_PasswordCreate: String { return self._s[3946]! } + public var StickerSettings_MaskContextInfo: String { return self._s[3947]! } + public var Message_PinnedLocationMessage: String { return self._s[3948]! } + public var Map_Satellite: String { return self._s[3949]! } + public var Watch_Message_Unsupported: String { return self._s[3950]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[3951]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3952]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3952]!, self._r[3952]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3953]!, self._r[3953]!, [_0, _1]) } public func Conversation_OpenBotLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3953]!, self._r[3953]!, [_0]) + return formatWithArgumentRanges(self._s[3954]!, self._r[3954]!, [_0]) } - public var Wallet_WordImport_Continue: String { return self._s[3954]! } + public var Wallet_WordImport_Continue: String { return self._s[3955]! } public func TwoFactorSetup_EmailVerification_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3955]!, self._r[3955]!, [_0]) + return formatWithArgumentRanges(self._s[3956]!, self._r[3956]!, [_0]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[3956]! } - public var Privacy_Calls_P2PContacts: String { return self._s[3957]! } - public var NotificationsSound_None: String { return self._s[3958]! } - public var Wallet_TransactionInfo_StorageFeeHeader: String { return self._s[3959]! } - public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3961]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[3962]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[3957]! } + public var Privacy_Calls_P2PContacts: String { return self._s[3958]! } + public var NotificationsSound_None: String { return self._s[3959]! } + public var Wallet_TransactionInfo_StorageFeeHeader: String { return self._s[3960]! } + public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3962]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[3963]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3963]!, self._r[3963]!, [_1]) + return formatWithArgumentRanges(self._s[3964]!, self._r[3964]!, [_1]) } - public var Cache_Indexing: String { return self._s[3964]! } - public var DialogList_RecentTitlePeople: String { return self._s[3966]! } - public var DialogList_EncryptionRejected: String { return self._s[3967]! } - public var GroupInfo_Administrators: String { return self._s[3968]! } - public var Passport_ScanPassportHelp: String { return self._s[3969]! } - public var Application_Name: String { return self._s[3970]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3971]! } - public var ChatList_PeerTypeGroup: String { return self._s[3972]! } - public var PeopleNearby_MakeVisible: String { return self._s[3974]! } - public var Appearance_ThemeCarouselDay: String { return self._s[3975]! } - public var Stats_GrowthTitle: String { return self._s[3976]! } - public var Passport_Identity_TranslationHelp: String { return self._s[3977]! } + public var Cache_Indexing: String { return self._s[3965]! } + public var DialogList_RecentTitlePeople: String { return self._s[3967]! } + public var DialogList_EncryptionRejected: String { return self._s[3968]! } + public var GroupInfo_Administrators: String { return self._s[3969]! } + public var Passport_ScanPassportHelp: String { return self._s[3970]! } + public var Application_Name: String { return self._s[3971]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3972]! } + public var ChatList_PeerTypeGroup: String { return self._s[3973]! } + public var PeopleNearby_MakeVisible: String { return self._s[3975]! } + public var Appearance_ThemeCarouselDay: String { return self._s[3976]! } + public var Stats_GrowthTitle: String { return self._s[3977]! } + public var Passport_Identity_TranslationHelp: String { return self._s[3978]! } public func VoiceOver_Chat_VideoMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3978]!, self._r[3978]!, [_0]) - } - public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3979]!, self._r[3979]!, [_0]) } - public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { + public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3980]!, self._r[3980]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3981]! } - public var Privacy_ChatsTitle: String { return self._s[3982]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[3983]! } - public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3984]! } - public var Watch_Suggestion_HoldOn: String { return self._s[3985]! } - public var Group_EditAdmin_TransferOwnership: String { return self._s[3986]! } - public var WebBrowser_Title: String { return self._s[3987]! } - public var Group_LinkedChannel: String { return self._s[3988]! } - public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3989]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[3990]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3991]! } - public var Appearance_TextSize_UseSystem: String { return self._s[3992]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[3993]! } - public var ScheduledMessages_RemindersTitle: String { return self._s[3995]! } - public var Channel_Setup_TypePublic: String { return self._s[3997]! } + public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3981]!, self._r[3981]!, [_0]) + } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3982]! } + public var Privacy_ChatsTitle: String { return self._s[3983]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[3984]! } + public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3985]! } + public var Watch_Suggestion_HoldOn: String { return self._s[3986]! } + public var Group_EditAdmin_TransferOwnership: String { return self._s[3987]! } + public var WebBrowser_Title: String { return self._s[3988]! } + public var Group_LinkedChannel: String { return self._s[3989]! } + public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3990]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[3991]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3992]! } + public var Appearance_TextSize_UseSystem: String { return self._s[3993]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[3994]! } + public var ScheduledMessages_RemindersTitle: String { return self._s[3996]! } + public var Channel_Setup_TypePublic: String { return self._s[3998]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3998]!, self._r[3998]!, [_0]) + return formatWithArgumentRanges(self._s[3999]!, self._r[3999]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[4000]! } - public var MessagePoll_ViewResults: String { return self._s[4001]! } - public var Map_OpenInMaps: String { return self._s[4003]! } + public var Channel_TypeSetup_Title: String { return self._s[4001]! } + public var MessagePoll_ViewResults: String { return self._s[4002]! } + public var Map_OpenInMaps: String { return self._s[4004]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4004]!, self._r[4004]!, [_1]) + return formatWithArgumentRanges(self._s[4005]!, self._r[4005]!, [_1]) } - public var NotificationsSound_Tremolo: String { return self._s[4006]! } + public var NotificationsSound_Tremolo: String { return self._s[4007]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4007]!, self._r[4007]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4008]!, self._r[4008]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[4008]! } - public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[4009]! } - public var Passport_PasswordHelp: String { return self._s[4011]! } - public var Login_CodeExpiredError: String { return self._s[4012]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[4013]! } - public var Conversation_TitleUnmute: String { return self._s[4014]! } - public var Passport_Identity_ScansHelp: String { return self._s[4015]! } - public var Passport_Language_lo: String { return self._s[4016]! } - public var Camera_FlashAuto: String { return self._s[4017]! } - public var Conversation_OpenBotLinkOpen: String { return self._s[4018]! } - public var Common_Cancel: String { return self._s[4019]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[4020]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[4021]! } - public var Appearance_TintAllColors: String { return self._s[4022]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[4009]! } + public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[4010]! } + public var Passport_PasswordHelp: String { return self._s[4012]! } + public var Login_CodeExpiredError: String { return self._s[4013]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[4014]! } + public var Conversation_TitleUnmute: String { return self._s[4015]! } + public var Passport_Identity_ScansHelp: String { return self._s[4016]! } + public var Passport_Language_lo: String { return self._s[4017]! } + public var Camera_FlashAuto: String { return self._s[4018]! } + public var Conversation_OpenBotLinkOpen: String { return self._s[4019]! } + public var Common_Cancel: String { return self._s[4020]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[4021]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[4022]! } + public var Appearance_TintAllColors: String { return self._s[4023]! } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4023]!, self._r[4023]!, [_1]) + return formatWithArgumentRanges(self._s[4024]!, self._r[4024]!, [_1]) } - public var Conversation_ReportSpamConfirmation: String { return self._s[4024]! } - public var ChatSettings_Title: String { return self._s[4026]! } - public var Passport_PasswordReset: String { return self._s[4027]! } - public var SocksProxySetup_TypeNone: String { return self._s[4028]! } - public var EditTheme_Title: String { return self._s[4031]! } - public var PhoneNumberHelp_Help: String { return self._s[4032]! } - public var Checkout_EnterPassword: String { return self._s[4033]! } - public var Activity_UploadingDocument: String { return self._s[4035]! } - public var Share_AuthTitle: String { return self._s[4036]! } - public var State_Connecting: String { return self._s[4037]! } - public var Profile_MessageLifetime1w: String { return self._s[4038]! } - public var Conversation_ContextMenuReport: String { return self._s[4039]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[4040]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[4041]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[4025]! } + public var ChatSettings_Title: String { return self._s[4027]! } + public var Passport_PasswordReset: String { return self._s[4028]! } + public var SocksProxySetup_TypeNone: String { return self._s[4029]! } + public var EditTheme_Title: String { return self._s[4032]! } + public var PhoneNumberHelp_Help: String { return self._s[4033]! } + public var Checkout_EnterPassword: String { return self._s[4034]! } + public var Activity_UploadingDocument: String { return self._s[4036]! } + public var Share_AuthTitle: String { return self._s[4037]! } + public var State_Connecting: String { return self._s[4038]! } + public var Profile_MessageLifetime1w: String { return self._s[4039]! } + public var Conversation_ContextMenuReport: String { return self._s[4040]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[4041]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[4042]! } public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4042]!, self._r[4042]!, [_0]) + return formatWithArgumentRanges(self._s[4043]!, self._r[4043]!, [_0]) } - public var AuthSessions_Terminate: String { return self._s[4043]! } - public var Wallet_WordImport_CanNotRemember: String { return self._s[4044]! } - public var PeerInfo_PaneAudio: String { return self._s[4045]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[4047]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[4048]! } - public var PhotoEditor_Set: String { return self._s[4049]! } - public var EmptyGroupInfo_Title: String { return self._s[4050]! } - public var Login_PadPhoneHelp: String { return self._s[4052]! } - public var AutoDownloadSettings_TypeGroupChats: String { return self._s[4054]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[4056]! } - public var NotificationsSound_Complete: String { return self._s[4057]! } - public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[4058]! } - public var Group_Info_AdminLog: String { return self._s[4059]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[4060]! } + public var AuthSessions_Terminate: String { return self._s[4044]! } + public var Wallet_WordImport_CanNotRemember: String { return self._s[4045]! } + public var PeerInfo_PaneAudio: String { return self._s[4046]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[4048]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[4049]! } + public var PhotoEditor_Set: String { return self._s[4050]! } + public var EmptyGroupInfo_Title: String { return self._s[4051]! } + public var Login_PadPhoneHelp: String { return self._s[4053]! } + public var AutoDownloadSettings_TypeGroupChats: String { return self._s[4055]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[4057]! } + public var NotificationsSound_Complete: String { return self._s[4058]! } + public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[4059]! } + public var Group_Info_AdminLog: String { return self._s[4060]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[4061]! } public func Wallet_Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4061]!, self._r[4061]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4062]!, self._r[4062]!, [_1, _2, _3]) } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[4062]! } - public var Group_Location_CreateInThisPlace: String { return self._s[4064]! } - public var Conversation_Admin: String { return self._s[4065]! } - public var Conversation_GifTooltip: String { return self._s[4066]! } - public var Passport_NotLoggedInMessage: String { return self._s[4067]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[4063]! } + public var Group_Location_CreateInThisPlace: String { return self._s[4065]! } + public var Conversation_Admin: String { return self._s[4066]! } + public var Conversation_GifTooltip: String { return self._s[4067]! } + public var Passport_NotLoggedInMessage: String { return self._s[4068]! } public func AutoDownloadSettings_OnFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4069]!, self._r[4069]!, [_0]) + return formatWithArgumentRanges(self._s[4070]!, self._r[4070]!, [_0]) } - public var Profile_MessageLifetimeForever: String { return self._s[4070]! } - public var SharedMedia_EmptyTitle: String { return self._s[4072]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[4074]! } - public var Username_Help: String { return self._s[4075]! } - public var DialogList_LanguageTooltip: String { return self._s[4077]! } - public var Map_LoadError: String { return self._s[4078]! } - public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[4079]! } - public var Channel_AdminLog_AddMembers: String { return self._s[4080]! } - public var ArchivedChats_IntroTitle2: String { return self._s[4081]! } - public var Notification_Exceptions_NewException: String { return self._s[4082]! } - public var TwoStepAuth_EmailTitle: String { return self._s[4083]! } - public var WatchRemote_AlertText: String { return self._s[4084]! } + public var Profile_MessageLifetimeForever: String { return self._s[4071]! } + public var SharedMedia_EmptyTitle: String { return self._s[4073]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[4075]! } + public var Username_Help: String { return self._s[4076]! } + public var DialogList_LanguageTooltip: String { return self._s[4078]! } + public var Map_LoadError: String { return self._s[4079]! } + public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[4080]! } + public var Channel_AdminLog_AddMembers: String { return self._s[4081]! } + public var ArchivedChats_IntroTitle2: String { return self._s[4082]! } + public var Notification_Exceptions_NewException: String { return self._s[4083]! } + public var TwoStepAuth_EmailTitle: String { return self._s[4084]! } + public var WatchRemote_AlertText: String { return self._s[4085]! } public func Wallet_Send_ConfirmationText(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4085]!, self._r[4085]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4086]!, self._r[4086]!, [_1, _2, _3]) } - public var ChatSettings_ConnectionType_Title: String { return self._s[4089]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[4090]! } public func PUSH_PINNED_QUIZ(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4090]!, self._r[4090]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4091]!, self._r[4091]!, [_1, _2]) } public func Settings_CheckPhoneNumberTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4091]!, self._r[4091]!, [_0]) + return formatWithArgumentRanges(self._s[4092]!, self._r[4092]!, [_0]) } - public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[4092]! } - public var WebBrowser_DefaultBrowser: String { return self._s[4093]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[4094]! } + public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[4093]! } + public var WebBrowser_DefaultBrowser: String { return self._s[4094]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[4095]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4095]!, self._r[4095]!, [_0]) + return formatWithArgumentRanges(self._s[4096]!, self._r[4096]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4096]!, self._r[4096]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4097]!, self._r[4097]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[4097]! } - public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[4098]! } - public var Conversation_PrivateChannelTooltip: String { return self._s[4100]! } - public var Wallet_Created_ExportErrorText: String { return self._s[4101]! } - public var ChatList_UndoArchiveText1: String { return self._s[4102]! } - public var ChatListFolder_IncludedSectionHeader: String { return self._s[4103]! } - public var AccessDenied_VideoMicrophone: String { return self._s[4104]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4105]! } - public var Cache_ClearNone: String { return self._s[4106]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[4107]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[4108]! } + public var Group_AdminLog_EmptyText: String { return self._s[4098]! } + public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[4099]! } + public var Conversation_PrivateChannelTooltip: String { return self._s[4101]! } + public var Wallet_Created_ExportErrorText: String { return self._s[4102]! } + public var ChatList_UndoArchiveText1: String { return self._s[4103]! } + public var ChatListFolder_IncludedSectionHeader: String { return self._s[4104]! } + public var AccessDenied_VideoMicrophone: String { return self._s[4105]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4106]! } + public var Cache_ClearNone: String { return self._s[4107]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[4108]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[4109]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4109]!, self._r[4109]!, [_0]) + return formatWithArgumentRanges(self._s[4110]!, self._r[4110]!, [_0]) } - public var Passport_Identity_Country: String { return self._s[4110]! } + public var Passport_Identity_Country: String { return self._s[4111]! } public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4111]!, self._r[4111]!, [_0]) - } - public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4112]!, self._r[4112]!, [_0]) } - public var Exceptions_AddToExceptions: String { return self._s[4113]! } - public var AccessDenied_Settings: String { return self._s[4114]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[4115]! } - public var Month_ShortMay: String { return self._s[4117]! } - public var Compose_NewGroup: String { return self._s[4119]! } - public var Group_Setup_TypePrivate: String { return self._s[4121]! } - public var Login_PadPhoneHelpTitle: String { return self._s[4123]! } - public var Appearance_ThemeDayClassic: String { return self._s[4124]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[4125]! } - public var AutoDownloadSettings_OffForAll: String { return self._s[4126]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[4127]! } - public var Conversation_typing: String { return self._s[4129]! } - public var Undo_ScheduledMessagesCleared: String { return self._s[4130]! } - public var Paint_Masks: String { return self._s[4131]! } - public var Contacts_DeselectAll: String { return self._s[4132]! } - public func Wallet_Updated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4133]!, self._r[4133]!, [_0]) + public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4113]!, self._r[4113]!, [_0]) } - public var CreatePoll_MultipleChoiceQuizAlert: String { return self._s[4134]! } - public var Username_InvalidTaken: String { return self._s[4135]! } - public var Call_StatusNoAnswer: String { return self._s[4136]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[4137]! } - public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[4138]! } - public var Passport_Identity_Selfie: String { return self._s[4139]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[4140]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[4141]! } - public var Conversation_ClearSecretHistory: String { return self._s[4142]! } - public var PeopleNearby_Description: String { return self._s[4144]! } - public var NetworkUsageSettings_Title: String { return self._s[4145]! } - public var Your_cards_security_code_is_invalid: String { return self._s[4147]! } - public var Stats_EnabledNotifications: String { return self._s[4148]! } + public var Exceptions_AddToExceptions: String { return self._s[4114]! } + public var AccessDenied_Settings: String { return self._s[4115]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[4116]! } + public var Month_ShortMay: String { return self._s[4118]! } + public var Compose_NewGroup: String { return self._s[4120]! } + public var Group_Setup_TypePrivate: String { return self._s[4122]! } + public var Login_PadPhoneHelpTitle: String { return self._s[4124]! } + public var Appearance_ThemeDayClassic: String { return self._s[4125]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[4126]! } + public var AutoDownloadSettings_OffForAll: String { return self._s[4127]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[4128]! } + public var Conversation_typing: String { return self._s[4130]! } + public var Undo_ScheduledMessagesCleared: String { return self._s[4131]! } + public var Paint_Masks: String { return self._s[4132]! } + public var Contacts_DeselectAll: String { return self._s[4133]! } + public func Wallet_Updated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4134]!, self._r[4134]!, [_0]) + } + public var CreatePoll_MultipleChoiceQuizAlert: String { return self._s[4135]! } + public var Username_InvalidTaken: String { return self._s[4136]! } + public var Call_StatusNoAnswer: String { return self._s[4137]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[4138]! } + public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[4139]! } + public var Passport_Identity_Selfie: String { return self._s[4140]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[4141]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[4142]! } + public var Conversation_ClearSecretHistory: String { return self._s[4143]! } + public var PeopleNearby_Description: String { return self._s[4145]! } + public var NetworkUsageSettings_Title: String { return self._s[4146]! } + public var Your_cards_security_code_is_invalid: String { return self._s[4148]! } + public var Stats_EnabledNotifications: String { return self._s[4149]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4150]!, self._r[4150]!, [_0]) + return formatWithArgumentRanges(self._s[4151]!, self._r[4151]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4151]!, self._r[4151]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4152]!, self._r[4152]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[4153]! } - public var VoiceOver_Navigation_Search: String { return self._s[4154]! } - public var Map_LiveLocationTitle: String { return self._s[4155]! } - public var Login_InfoAvatarAdd: String { return self._s[4156]! } - public var Passport_Identity_FilesView: String { return self._s[4157]! } - public var ChatListFolderSettings_Title: String { return self._s[4158]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[4159]! } - public var Privacy_Calls_NeverAllow: String { return self._s[4160]! } - public var VoiceOver_Chat_File: String { return self._s[4161]! } - public var Wallet_Settings_DeleteWalletInfo: String { return self._s[4162]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[4154]! } + public var VoiceOver_Navigation_Search: String { return self._s[4155]! } + public var Map_LiveLocationTitle: String { return self._s[4156]! } + public var Login_InfoAvatarAdd: String { return self._s[4157]! } + public var Passport_Identity_FilesView: String { return self._s[4158]! } + public var ChatListFolderSettings_Title: String { return self._s[4159]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[4160]! } + public var Privacy_Calls_NeverAllow: String { return self._s[4161]! } + public var VoiceOver_Chat_File: String { return self._s[4162]! } + public var Wallet_Settings_DeleteWalletInfo: String { return self._s[4163]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4163]!, self._r[4163]!, [_0]) + return formatWithArgumentRanges(self._s[4164]!, self._r[4164]!, [_0]) } - public var ChatList_EmptyChatList: String { return self._s[4164]! } - public var ContactInfo_PhoneNumberHidden: String { return self._s[4165]! } - public var TwoStepAuth_ConfirmationText: String { return self._s[4166]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[4167]! } + public var ChatList_EmptyChatList: String { return self._s[4165]! } + public var ContactInfo_PhoneNumberHidden: String { return self._s[4166]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[4167]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[4168]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4168]!, self._r[4168]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4169]!, self._r[4169]!, [_1, _2, _3]) } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[4169]! } - public var Wallet_Intro_CreateErrorText: String { return self._s[4170]! } - public var Tour_Title2: String { return self._s[4171]! } - public var Wallet_Sent_ViewWallet: String { return self._s[4172]! } - public var Conversation_FileOpenIn: String { return self._s[4173]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[4174]! } - public var Wallet_Send_ErrorInvalidAddress: String { return self._s[4175]! } - public var Wallpaper_Set: String { return self._s[4176]! } - public var Passport_Identity_Translations: String { return self._s[4178]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[4170]! } + public var Wallet_Intro_CreateErrorText: String { return self._s[4171]! } + public var Tour_Title2: String { return self._s[4172]! } + public var Wallet_Sent_ViewWallet: String { return self._s[4173]! } + public var Conversation_FileOpenIn: String { return self._s[4174]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[4175]! } + public var Wallet_Send_ErrorInvalidAddress: String { return self._s[4176]! } + public var Wallpaper_Set: String { return self._s[4177]! } + public var Passport_Identity_Translations: String { return self._s[4179]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4179]!, self._r[4179]!, [_0]) + return formatWithArgumentRanges(self._s[4180]!, self._r[4180]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[4180]! } + public var Channel_LeaveChannel: String { return self._s[4181]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4181]!, self._r[4181]!, [_1]) + return formatWithArgumentRanges(self._s[4182]!, self._r[4182]!, [_1]) } - public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[4183]! } - public var PhotoEditor_HighlightsTint: String { return self._s[4184]! } - public var MessagePoll_LabelPoll: String { return self._s[4185]! } - public var Passport_Email_Delete: String { return self._s[4186]! } - public var Conversation_Mute: String { return self._s[4188]! } - public var Channel_AddBotAsAdmin: String { return self._s[4189]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[4191]! } - public var Wallet_Configuration_BlockchainNameChangedText: String { return self._s[4192]! } - public var ChatSettings_IntentsSettings: String { return self._s[4194]! } - public var Channel_Management_LabelOwner: String { return self._s[4195]! } + public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[4184]! } + public var PhotoEditor_HighlightsTint: String { return self._s[4185]! } + public var MessagePoll_LabelPoll: String { return self._s[4186]! } + public var Passport_Email_Delete: String { return self._s[4187]! } + public var Conversation_Mute: String { return self._s[4189]! } + public var Channel_AddBotAsAdmin: String { return self._s[4190]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[4192]! } + public var Wallet_Configuration_BlockchainNameChangedText: String { return self._s[4193]! } + public var ChatSettings_IntentsSettings: String { return self._s[4195]! } + public var Channel_Management_LabelOwner: String { return self._s[4196]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4196]!, self._r[4196]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4197]!, self._r[4197]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[4197]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[4198]! } - public var Common_No: String { return self._s[4199]! } - public var Weekday_Sunday: String { return self._s[4200]! } - public var Notification_Reply: String { return self._s[4201]! } - public var Conversation_ViewMessage: String { return self._s[4202]! } + public var Calls_CallTabDescription: String { return self._s[4198]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[4199]! } + public var Common_No: String { return self._s[4200]! } + public var Weekday_Sunday: String { return self._s[4201]! } + public var Notification_Reply: String { return self._s[4202]! } + public var Conversation_ViewMessage: String { return self._s[4203]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4203]!, self._r[4203]!, [_0]) - } - public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4204]!, self._r[4204]!, [_0]) } + public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4205]!, self._r[4205]!, [_0]) + } public func Wallet_Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4205]!, self._r[4205]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4206]!, self._r[4206]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4206]! } - public var Wallet_Send_Title: String { return self._s[4207]! } - public var Message_PinnedDocumentMessage: String { return self._s[4208]! } - public var Wallet_Info_RefreshErrorText: String { return self._s[4209]! } - public var DialogList_TabTitle: String { return self._s[4211]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[4212]! } - public var Passport_FieldEmail: String { return self._s[4213]! } - public var Conversation_UnpinMessageAlert: String { return self._s[4214]! } - public var Passport_Address_TypeBankStatement: String { return self._s[4215]! } - public var Wallet_SecureStorageReset_Title: String { return self._s[4216]! } - public var Passport_Identity_ExpiryDate: String { return self._s[4217]! } - public var Privacy_Calls_P2P: String { return self._s[4218]! } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4207]! } + public var Wallet_Send_Title: String { return self._s[4208]! } + public var Message_PinnedDocumentMessage: String { return self._s[4209]! } + public var Wallet_Info_RefreshErrorText: String { return self._s[4210]! } + public var DialogList_TabTitle: String { return self._s[4212]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[4213]! } + public var Passport_FieldEmail: String { return self._s[4214]! } + public var Conversation_UnpinMessageAlert: String { return self._s[4215]! } + public var Passport_Address_TypeBankStatement: String { return self._s[4216]! } + public var Wallet_SecureStorageReset_Title: String { return self._s[4217]! } + public var Passport_Identity_ExpiryDate: String { return self._s[4218]! } + public var Privacy_Calls_P2P: String { return self._s[4219]! } public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4220]!, self._r[4220]!, [_0]) + return formatWithArgumentRanges(self._s[4221]!, self._r[4221]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[4221]! } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[4222]! } public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4222]!, self._r[4222]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4223]!, self._r[4223]!, [_1, _2]) } - public var Stickers_ClearRecent: String { return self._s[4223]! } - public var EnterPasscode_ChangeTitle: String { return self._s[4224]! } - public var TwoFactorSetup_Email_Title: String { return self._s[4225]! } - public var Passport_InfoText: String { return self._s[4226]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[4227]! } + public var Stickers_ClearRecent: String { return self._s[4224]! } + public var EnterPasscode_ChangeTitle: String { return self._s[4225]! } + public var TwoFactorSetup_Email_Title: String { return self._s[4226]! } + public var Passport_InfoText: String { return self._s[4227]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[4228]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4228]!, self._r[4228]!, [_0]) + return formatWithArgumentRanges(self._s[4229]!, self._r[4229]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4229]!, self._r[4229]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4230]!, self._r[4230]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[4230]! } - public var ScheduledMessages_PollUnavailable: String { return self._s[4231]! } - public var VoiceOver_Navigation_Compose: String { return self._s[4232]! } - public var Passport_Identity_EditDriversLicense: String { return self._s[4233]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[4235]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4236]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[4231]! } + public var ScheduledMessages_PollUnavailable: String { return self._s[4232]! } + public var VoiceOver_Navigation_Compose: String { return self._s[4233]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[4234]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[4236]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4237]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4237]!, self._r[4237]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4238]!, self._r[4238]!, [_1, _2]) } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[4240]! } - public var ChatSettings_OpenLinksIn: String { return self._s[4241]! } - public var Map_HomeAndWorkTitle: String { return self._s[4242]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[4241]! } + public var ChatSettings_OpenLinksIn: String { return self._s[4242]! } + public var Map_HomeAndWorkTitle: String { return self._s[4243]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4244]!, self._r[4244]!, [_0]) + return formatWithArgumentRanges(self._s[4245]!, self._r[4245]!, [_0]) } - public var DialogList_Unread: String { return self._s[4245]! } + public var DialogList_Unread: String { return self._s[4246]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4246]!, self._r[4246]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4247]!, self._r[4247]!, [_1, _2]) } - public var User_DeletedAccount: String { return self._s[4247]! } - public var ChatList_TabIconFoldersTooltipEmptyFolders: String { return self._s[4248]! } - public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[4249]! } + public var User_DeletedAccount: String { return self._s[4248]! } + public var ChatList_TabIconFoldersTooltipEmptyFolders: String { return self._s[4249]! } + public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[4250]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4250]!, self._r[4250]!, [_0]) + return formatWithArgumentRanges(self._s[4251]!, self._r[4251]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[4251]! } - public var SharedMedia_CategoryMedia: String { return self._s[4252]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4253]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[4254]! } - public var Watch_ChatList_Compose: String { return self._s[4255]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[4256]! } - public var AutoDownloadSettings_Delimeter: String { return self._s[4257]! } - public var Watch_Microphone_Access: String { return self._s[4258]! } - public var Group_Setup_HistoryHeader: String { return self._s[4259]! } - public var Map_SetThisLocation: String { return self._s[4260]! } - public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[4261]! } - public var Activity_UploadingPhoto: String { return self._s[4262]! } - public var Conversation_Edit: String { return self._s[4264]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[4265]! } - public var Login_TermsOfServiceDecline: String { return self._s[4266]! } - public var Message_PinnedContactMessage: String { return self._s[4267]! } + public var UserInfo_NotificationsDefault: String { return self._s[4252]! } + public var SharedMedia_CategoryMedia: String { return self._s[4253]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4254]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[4255]! } + public var Watch_ChatList_Compose: String { return self._s[4256]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[4257]! } + public var AutoDownloadSettings_Delimeter: String { return self._s[4258]! } + public var Watch_Microphone_Access: String { return self._s[4259]! } + public var Group_Setup_HistoryHeader: String { return self._s[4260]! } + public var Map_SetThisLocation: String { return self._s[4261]! } + public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[4262]! } + public var Activity_UploadingPhoto: String { return self._s[4263]! } + public var Conversation_Edit: String { return self._s[4265]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[4266]! } + public var Login_TermsOfServiceDecline: String { return self._s[4267]! } + public var Message_PinnedContactMessage: String { return self._s[4268]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4268]!, self._r[4268]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4269]!, self._r[4269]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4269]!, self._r[4269]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[4270]!, self._r[4270]!, [_1, _2, _3, _4, _5]) } - public var Appearance_LargeEmoji: String { return self._s[4270]! } - public var TwoStepAuth_AdditionalPassword: String { return self._s[4272]! } - public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[4273]! } + public var Appearance_LargeEmoji: String { return self._s[4271]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[4273]! } + public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[4274]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4274]!, self._r[4274]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4275]!, self._r[4275]!, [_1, _2]) } - public var Passport_Phone_EnterOtherNumber: String { return self._s[4275]! } - public var Message_PinnedPhotoMessage: String { return self._s[4276]! } - public var Passport_FieldPhone: String { return self._s[4277]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[4278]! } - public var Stats_NotificationsTitle: String { return self._s[4279]! } - public var ChatSettings_AutoPlayGifs: String { return self._s[4280]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[4282]! } - public var Conversation_Call: String { return self._s[4283]! } - public var Common_TakePhoto: String { return self._s[4285]! } - public var Group_EditAdmin_RankTitle: String { return self._s[4286]! } - public var Wallet_Receive_CommentHeader: String { return self._s[4287]! } - public var Channel_NotificationLoading: String { return self._s[4288]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[4276]! } + public var Message_PinnedPhotoMessage: String { return self._s[4277]! } + public var Passport_FieldPhone: String { return self._s[4278]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[4279]! } + public var Stats_NotificationsTitle: String { return self._s[4280]! } + public var ChatSettings_AutoPlayGifs: String { return self._s[4281]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[4283]! } + public var Conversation_Call: String { return self._s[4284]! } + public var Common_TakePhoto: String { return self._s[4286]! } + public var Group_EditAdmin_RankTitle: String { return self._s[4287]! } + public var Wallet_Receive_CommentHeader: String { return self._s[4288]! } + public var Channel_NotificationLoading: String { return self._s[4289]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4289]!, self._r[4289]!, [_0]) - } - public func ScheduledMessages_ScheduledDate(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4290]!, self._r[4290]!, [_0]) } + public func ScheduledMessages_ScheduledDate(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4291]!, self._r[4291]!, [_0]) + } public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4291]!, self._r[4291]!, [_1]) + return formatWithArgumentRanges(self._s[4292]!, self._r[4292]!, [_1]) } - public var Permissions_SiriTitle_v0: String { return self._s[4292]! } + public var Permissions_SiriTitle_v0: String { return self._s[4293]! } public func VoiceOver_Chat_VoiceMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4293]!, self._r[4293]!, [_0]) - } - public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4294]!, self._r[4294]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[4295]! } - public var Wallet_Info_ReceiveGrams: String { return self._s[4296]! } - public var ClearCache_FreeSpace: String { return self._s[4297]! } - public var Appearance_BubbleCorners_Apply: String { return self._s[4298]! } - public var Common_edit: String { return self._s[4299]! } - public var PrivacySettings_AuthSessions: String { return self._s[4300]! } - public var Month_ShortJune: String { return self._s[4301]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[4302]! } - public var Call_ReportSend: String { return self._s[4303]! } - public var Watch_LastSeen_JustNow: String { return self._s[4304]! } - public var Notifications_MessageNotifications: String { return self._s[4305]! } - public var WallpaperSearch_ColorGreen: String { return self._s[4306]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[4308]! } - public var Group_Status: String { return self._s[4309]! } + public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4295]!, self._r[4295]!, [_0]) + } + public var Channel_MessagePhotoRemoved: String { return self._s[4296]! } + public var Wallet_Info_ReceiveGrams: String { return self._s[4297]! } + public var ClearCache_FreeSpace: String { return self._s[4298]! } + public var Appearance_BubbleCorners_Apply: String { return self._s[4299]! } + public var Common_edit: String { return self._s[4300]! } + public var PrivacySettings_AuthSessions: String { return self._s[4301]! } + public var Month_ShortJune: String { return self._s[4302]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[4303]! } + public var Call_ReportSend: String { return self._s[4304]! } + public var Watch_LastSeen_JustNow: String { return self._s[4305]! } + public var Notifications_MessageNotifications: String { return self._s[4306]! } + public var WallpaperSearch_ColorGreen: String { return self._s[4307]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[4309]! } + public var Group_Status: String { return self._s[4310]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4310]!, self._r[4310]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4311]!, self._r[4311]!, [_0, _1]) } - public var TextFormat_AddLinkTitle: String { return self._s[4311]! } - public var ShareMenu_ShareTo: String { return self._s[4312]! } - public var Conversation_Moderate_Ban: String { return self._s[4313]! } + public var TextFormat_AddLinkTitle: String { return self._s[4312]! } + public var ShareMenu_ShareTo: String { return self._s[4313]! } + public var Conversation_Moderate_Ban: String { return self._s[4314]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4314]!, self._r[4314]!, [_0]) + return formatWithArgumentRanges(self._s[4315]!, self._r[4315]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[4315]! } - public var Map_LiveLocationFor8Hours: String { return self._s[4316]! } + public var SharedMedia_ViewInChat: String { return self._s[4316]! } + public var Map_LiveLocationFor8Hours: String { return self._s[4317]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4317]!, self._r[4317]!, [_1]) + return formatWithArgumentRanges(self._s[4318]!, self._r[4318]!, [_1]) } public func PUSH_PINNED_POLL(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4318]!, self._r[4318]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4319]!, self._r[4319]!, [_1, _2]) } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4320]!, self._r[4320]!, [_0]) + return formatWithArgumentRanges(self._s[4321]!, self._r[4321]!, [_0]) } - public var Map_OpenInHereMaps: String { return self._s[4321]! } - public var Appearance_ReduceMotion: String { return self._s[4322]! } + public var Map_OpenInHereMaps: String { return self._s[4322]! } + public var Appearance_ReduceMotion: String { return self._s[4323]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4323]!, self._r[4323]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4324]!, self._r[4324]!, [_1, _2]) } - public var Channel_Setup_TypePublicHelp: String { return self._s[4324]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[4325]! } - public var PhotoEditor_Skip: String { return self._s[4326]! } - public func Call_Minutes(_ value: Int32) -> String { + public var Channel_Setup_TypePublicHelp: String { return self._s[4325]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[4326]! } + public var PhotoEditor_Skip: String { return self._s[4327]! } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func ForwardedStickers(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_SharePhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) - } - public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveYear(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortHours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPolls(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } public func InstantPage_Views(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + public func OldChannels_GroupFormat(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedStickers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Contacts_InviteContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_MessageViews(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Contacts_ImportersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = getPluralizationForm(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_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Media_ShareItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveMonth(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPhotos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } public func MessageTimer_Years(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_StatusMembers(_ value: Int32) -> String { + public func ForwardedLocations(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func MessageTimer_Months(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) } - public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + public func MessageTimer_Seconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, _1, _2) } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, _0, _1) } public func Stats_MessageForwards(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_ShortMinutes(_ value: Int32) -> String { + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) } - public func InviteText_ContactsCountText(_ value: Int32) -> String { + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedDices(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedGifs(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { + public func Notification_GameScoreExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, _1, _2) + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) } public func QuickSend_Photos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_SelectedMessages(_ value: Int32) -> String { + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func Call_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveWeek(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessagePoll_QuizCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendGif(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveMonth(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_MessageViews(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, _1, _2) } public func ForwardedFiles(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PollResults_ShowMore(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Call_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedDices(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) + } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_SelectedChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Theme_UsersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Passport_Scans(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_ShortMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Link(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + } + public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) } public func ForwardedVideoMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendItem(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) + } + public func UserCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) } - public func Passport_Scans(_ value: Int32) -> String { + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) @@ -5244,236 +5244,237 @@ public final class PresentationStrings: Equatable { let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Days(_ value: Int32) -> String { + public func InviteText_ContactsCountText(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Seconds(_ value: Int32) -> String { + public func StickerPack_AddMaskCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_File(_ value: Int32) -> String { + public func MuteExpires_Minutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, _1, _2) + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_SelectedChats(_ value: Int32) -> String { + public func Media_ShareItem(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_Seconds(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_ShareVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, _1, _2) } - public func MessagePoll_QuizCount(_ value: Int32) -> String { + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) } - public func OldChannels_InactiveWeek(_ value: Int32) -> String { + public func ForwardedMessages(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) } - public func Map_ETAHours(_ value: Int32) -> String { + public func SharedMedia_File(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) } - public func PollResults_ShowMore(_ value: Int32) -> String { + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, _1, _2) + public func ForwardedGifs(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteFor_Hours(_ value: Int32) -> String { + public func MessageTimer_ShortHours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedMessages(_ value: Int32) -> String { + public func Contacts_InviteContacts(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) } - public func OldChannels_GroupFormat(_ value: Int32) -> String { + public func Contacts_ImportersCount(_ value: Int32) -> String { let form = getPluralizationForm(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 { + public func MessageTimer_Weeks(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) } - public func UserCount(_ value: Int32) -> String { + public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Video(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) - } public func ChatList_DeletedChats(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_StickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Invitation_Members(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) } public func OldChannels_Leave(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveYear(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Conversation_SelectedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Invitation_Members(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusOnline(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteExpires_Hours(_ value: Int32) -> String { + public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Weeks(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notifications_Exceptions(_ value: Int32) -> String { + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) } - public func Theme_UsersCount(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[125 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + public func ForwardedPhotos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[126 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Months(_ value: Int32) -> String { + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[127 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[128 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { + public func ForwardedContacts(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[129 * 6 + Int(form.rawValue)]!, stringValue) } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func Media_ShareVideo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[130 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[131 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[131 * 6 + Int(form.rawValue)]!, _1, _2) } public init(primaryComponent: PresentationStringsComponent, secondaryComponent: PresentationStringsComponent?, groupingSeparator: String) { diff --git a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourceKey.swift b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourceKey.swift index 8aa80994d1..be94d91b1b 100644 --- a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourceKey.swift +++ b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourceKey.swift @@ -127,6 +127,7 @@ public enum PresentationResourceKey: Int32 { case chatInputMediaPanelTrendingIconImage case chatInputMediaPanelSettingsIconImage case chatInputMediaPanelAddPackButtonImage + case chatInputMediaPanelAddedPackButtonImage case chatInputMediaPanelGridSetupImage case chatInputMediaPanelGridDismissImage diff --git a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift index ad8cf91500..9a28980da1 100644 --- a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift +++ b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift @@ -254,6 +254,12 @@ public struct PresentationResourcesChat { }) } + public static func chatInputMediaPanelAddedPackButtonImage(_ theme: PresentationTheme) -> UIImage? { + return theme.image(PresentationResourceKey.chatInputMediaPanelAddedPackButtonImage.rawValue, { theme in + return generateStretchableFilledCircleImage(diameter: 28.0, color: theme.list.itemCheckColors.fillColor.withAlphaComponent(0.08), strokeColor: nil, strokeWidth: 1.0, backgroundColor: nil) + }) + } + public static func chatInputMediaPanelGridSetupImage(_ theme: PresentationTheme) -> UIImage? { return theme.image(PresentationResourceKey.chatInputMediaPanelGridSetupImage.rawValue, { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Media/GridSetupIcon"), color: theme.chat.inputMediaPanel.panelIconColor.withAlphaComponent(0.65)) diff --git a/submodules/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/Resources/PresentationStrings.mapping index d5c62e6d42..f0d8f23c54 100644 Binary files a/submodules/TelegramUI/Resources/PresentationStrings.mapping and b/submodules/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/submodules/TelegramUI/Sources/ChatMediaInputNode.swift b/submodules/TelegramUI/Sources/ChatMediaInputNode.swift index 4ceb7c00f9..763945a290 100644 --- a/submodules/TelegramUI/Sources/ChatMediaInputNode.swift +++ b/submodules/TelegramUI/Sources/ChatMediaInputNode.swift @@ -166,8 +166,8 @@ private func preparedChatMediaInputGridEntryTransition(account: Account, view: I private func chatMediaInputPanelEntries(view: ItemCollectionsView, savedStickers: OrderedItemListView?, recentStickers: OrderedItemListView?, peerSpecificPack: PeerSpecificPackData?, canInstallPeerSpecificPack: CanInstallPeerSpecificPack, hasUnreadTrending: Bool?, theme: PresentationTheme) -> [ChatMediaInputPanelEntry] { var entries: [ChatMediaInputPanelEntry] = [] entries.append(.recentGifs(theme)) - if let hasUnreadTrending = hasUnreadTrending, hasUnreadTrending { - entries.append(.trending(true, theme)) + if let hasUnreadTrending = hasUnreadTrending { + entries.append(.trending(hasUnreadTrending, theme)) } if let savedStickers = savedStickers, !savedStickers.items.isEmpty { entries.append(.savedStickers(theme)) @@ -211,9 +211,6 @@ private func chatMediaInputPanelEntries(view: ItemCollectionsView, savedStickers entries.append(.peerSpecific(theme: theme, peer: peer)) } - if let hasUnreadTrending = hasUnreadTrending, !hasUnreadTrending { - entries.append(.trending(false, theme)) - } entries.append(.settings(theme)) return entries } @@ -371,7 +368,7 @@ private func clipScrollPosition(_ position: StickerPacksCollectionPosition) -> S private enum ChatMediaInputPaneType { case gifs case stickers - case trending + //case trending } private struct ChatMediaInputPaneArrangement { @@ -421,7 +418,7 @@ final class ChatMediaInputNode: ChatInputNode { private var animatingStickerPaneOut = false private let gifPane: ChatMediaInputGifPane private var animatingGifPaneOut = false - private let trendingPane: ChatMediaInputTrendingPane + //private let trendingPane: ChatMediaInputTrendingPane private var animatingTrendingPaneOut = false private var panRecognizer: UIPanGestureRecognizer? @@ -494,11 +491,11 @@ final class ChatMediaInputNode: ChatInputNode { }) var getItemIsPreviewedImpl: ((StickerPackItem) -> Bool)? - self.trendingPane = ChatMediaInputTrendingPane(context: context, controllerInteraction: controllerInteraction, getItemIsPreviewed: { item in + /*self.trendingPane = ChatMediaInputTrendingPane(context: context, controllerInteraction: controllerInteraction, getItemIsPreviewed: { item in return getItemIsPreviewedImpl?(item) ?? false - }, isPane: true) + }, isPane: true)*/ - self.paneArrangement = ChatMediaInputPaneArrangement(panes: [.gifs, .stickers, .trending], currentIndex: 1, indexTransition: 0.0) + self.paneArrangement = ChatMediaInputPaneArrangement(panes: [.gifs, .stickers, /*.trending*/], currentIndex: 1, indexTransition: 0.0) super.init() @@ -508,7 +505,18 @@ final class ChatMediaInputNode: ChatInputNode { if collectionId.namespace == ChatMediaInputPanelAuxiliaryNamespace.recentGifs.rawValue { strongSelf.setCurrentPane(.gifs, transition: .animated(duration: 0.25, curve: .spring)) } else if collectionId.namespace == ChatMediaInputPanelAuxiliaryNamespace.trending.rawValue { - strongSelf.setCurrentPane(.trending, transition: .animated(duration: 0.25, curve: .spring)) + strongSelf.controllerInteraction.navigationController()?.pushViewController(FeaturedStickersScreen( + context: strongSelf.context, + sendSticker: { + fileReference, sourceNode, sourceRect in + if let strongSelf = self { + return strongSelf.controllerInteraction.sendSticker(fileReference, false, sourceNode, sourceRect) + } else { + return false + } + } + )) + //strongSelf.setCurrentPane(.trending, transition: .animated(duration: 0.25, curve: .spring)) } else if collectionId.namespace == ChatMediaInputPanelAuxiliaryNamespace.savedStickers.rawValue { strongSelf.setCurrentPane(.stickers, transition: .animated(duration: 0.25, curve: .spring), collectionIdHint: collectionId.namespace) strongSelf.currentStickerPacksCollectionPosition = .navigate(index: nil, collectionId: collectionId) @@ -823,7 +831,7 @@ final class ChatMediaInputNode: ChatInputNode { strongSelf.initializedArrangement = true var currentPane = strongSelf.paneArrangement.panes[strongSelf.paneArrangement.currentIndex] if view.entries.isEmpty { - currentPane = .trending + //currentPane = .trending } if currentPane != strongSelf.paneArrangement.panes[strongSelf.paneArrangement.currentIndex] { strongSelf.setCurrentPane(currentPane, transition: .immediate) @@ -878,7 +886,7 @@ final class ChatMediaInputNode: ChatInputNode { self.stickerPane.inputNodeInteraction = self.inputNodeInteraction self.gifPane.inputNodeInteraction = self.inputNodeInteraction - self.trendingPane.inputNodeInteraction = self.inputNodeInteraction + //self.trendingPane.inputNodeInteraction = self.inputNodeInteraction paneDidScrollImpl = { [weak self] pane, state, transition in self?.updatePaneDidScroll(pane: pane, state: state, transition: transition) @@ -943,7 +951,7 @@ final class ChatMediaInputNode: ChatInputNode { self.stickerPane.updateThemeAndStrings(theme: theme, strings: strings) self.gifPane.updateThemeAndStrings(theme: theme, strings: strings) - self.trendingPane.updateThemeAndStrings(theme: theme, strings: strings) + //self.trendingPane.updateThemeAndStrings(theme: theme, strings: strings) self.themeAndStringsPromise.set(.single((theme, strings))) } @@ -1038,7 +1046,7 @@ final class ChatMediaInputNode: ChatInputNode { } } } else { - panes = [strongSelf.gifPane, strongSelf.stickerPane, strongSelf.trendingPane] + panes = [strongSelf.gifPane, strongSelf.stickerPane/*, strongSelf.trendingPane*/] } let panelPoint = strongSelf.view.convert(point, to: strongSelf.collectionListPanel.view) if panelPoint.y < strongSelf.collectionListPanel.frame.maxY { @@ -1191,8 +1199,8 @@ final class ChatMediaInputNode: ChatInputNode { } else if let collectionIdHint = collectionIdHint { self.setHighlightedItemCollectionId(ItemCollectionId(namespace: collectionIdHint, id: 0)) } - case .trending: - self.setHighlightedItemCollectionId(ItemCollectionId(namespace: ChatMediaInputPanelAuxiliaryNamespace.trending.rawValue, id: 0)) + /*case .trending: + self.setHighlightedItemCollectionId(ItemCollectionId(namespace: ChatMediaInputPanelAuxiliaryNamespace.trending.rawValue, id: 0))*/ } /*if updatedTrendingPanelIsActive != previousTrendingPanelWasActive { self.controllerInteraction.updateInputMode { current in @@ -1221,9 +1229,9 @@ final class ChatMediaInputNode: ChatInputNode { self.inputNodeInteraction.highlightedItemCollectionId = collectionId } } else if collectionId.namespace == ChatMediaInputPanelAuxiliaryNamespace.trending.rawValue { - if self.paneArrangement.panes[self.paneArrangement.currentIndex] == .trending { + /*if self.paneArrangement.panes[self.paneArrangement.currentIndex] == .trending { self.inputNodeInteraction.highlightedItemCollectionId = collectionId - } + }*/ } else { self.inputNodeInteraction.highlightedStickerItemCollectionId = collectionId if self.paneArrangement.panes[self.paneArrangement.currentIndex] == .stickers { @@ -1286,8 +1294,8 @@ final class ChatMediaInputNode: ChatInputNode { return self.stickerPane.collectionListPanelOffset case .gifs: return self.gifPane.collectionListPanelOffset - case .trending: - return self.trendingPane.collectionListPanelOffset + /*case .trending: + return self.trendingPane.collectionListPanelOffset*/ } } @@ -1369,7 +1377,7 @@ final class ChatMediaInputNode: ChatInputNode { } self.stickerPane.collectionListPanelOffset = 0.0 self.gifPane.collectionListPanelOffset = 0.0 - self.trendingPane.collectionListPanelOffset = 0.0 + //self.trendingPane.collectionListPanelOffset = 0.0 self.updateAppearanceTransition(transition: transition) } else { panelHeight = standardInputHeight @@ -1398,11 +1406,12 @@ final class ChatMediaInputNode: ChatInputNode { } } case .trending: - self.trendingPane.gridNode.forEachItemNode { itemNode in + /*self.trendingPane.gridNode.forEachItemNode { itemNode in if let itemNode = itemNode as? PaneSearchBarPlaceholderNode { placeholderNode = itemNode } - } + }*/ + break } } @@ -1467,7 +1476,7 @@ final class ChatMediaInputNode: ChatInputNode { self.stickerPane.layer.removeAnimation(forKey: "position") transition.updateFrame(node: self.stickerPane, frame: paneFrame) } - case .trending: + /*case .trending: if self.trendingPane.supernode == nil { self.insertSubnode(self.trendingPane, belowSubnode: self.collectionListContainer) self.trendingPane.frame = CGRect(origin: CGPoint(x: width, y: 0.0), size: CGSize(width: width, height: panelHeight)) @@ -1475,13 +1484,13 @@ final class ChatMediaInputNode: ChatInputNode { if self.trendingPane.frame != paneFrame { self.trendingPane.layer.removeAnimation(forKey: "position") transition.updateFrame(node: self.trendingPane, frame: paneFrame) - } + }*/ } } self.gifPane.updateLayout(size: CGSize(width: width - leftInset - rightInset, height: panelHeight), topInset: 41.0, bottomInset: bottomInset, isExpanded: isExpanded, isVisible: isVisible, deviceMetrics: deviceMetrics, transition: transition) self.stickerPane.updateLayout(size: CGSize(width: width - leftInset - rightInset, height: panelHeight), topInset: 41.0, bottomInset: bottomInset, isExpanded: isExpanded, isVisible: isVisible && visiblePanes.contains(where: { $0.0 == .stickers }), deviceMetrics: deviceMetrics, transition: transition) - self.trendingPane.updateLayout(size: CGSize(width: width - leftInset - rightInset, height: panelHeight), topInset: 41.0, bottomInset: bottomInset, isExpanded: isExpanded, isVisible: isVisible, deviceMetrics: deviceMetrics, transition: transition) + //self.trendingPane.updateLayout(size: CGSize(width: width - leftInset - rightInset, height: panelHeight), topInset: 41.0, bottomInset: bottomInset, isExpanded: isExpanded, isVisible: isVisible, deviceMetrics: deviceMetrics, transition: transition) if self.gifPane.supernode != nil { if !visiblePanes.contains(where: { $0.0 == .gifs }) { @@ -1533,7 +1542,7 @@ final class ChatMediaInputNode: ChatInputNode { self.animatingStickerPaneOut = false } - if self.trendingPane.supernode != nil { + /*if self.trendingPane.supernode != nil { if !visiblePanes.contains(where: { $0.0 == .trending }) { if case .animated = transition { if !self.animatingTrendingPaneOut { @@ -1556,7 +1565,7 @@ final class ChatMediaInputNode: ChatInputNode { } } else { self.animatingTrendingPaneOut = false - } + }*/ if !displaySearch, let searchContainerNode = self.searchContainerNode { self.searchContainerNode = nil @@ -1576,12 +1585,13 @@ final class ChatMediaInputNode: ChatInputNode { } } case .trending: - self.trendingPane.gridNode.forEachItemNode { itemNode in + /*self.trendingPane.gridNode.forEachItemNode { itemNode in if let itemNode = itemNode as? PaneSearchBarPlaceholderNode { placeholderNode = itemNode } } - paneIsEmpty = true + paneIsEmpty = true*/ + break } } if let placeholderNode = placeholderNode { @@ -1644,7 +1654,7 @@ final class ChatMediaInputNode: ChatInputNode { } self.searchContainerNode?.contentNode.updatePreviewing(animated: animated) - self.trendingPane.updatePreviewing(animated: animated) + //self.trendingPane.updatePreviewing(animated: animated) } } @@ -1661,11 +1671,11 @@ final class ChatMediaInputNode: ChatInputNode { self.animatingStickerPaneOut = false self.stickerPane.removeFromSupernode() } - self.trendingPane.layer.removeAllAnimations() + /*self.trendingPane.layer.removeAllAnimations() if self.animatingTrendingPaneOut { self.animatingTrendingPaneOut = false self.trendingPane.removeFromSupernode() - } + }*/ case .changed: if let (width, leftInset, rightInset, bottomInset, standardInputHeight, inputHeight, maximumHeight, inputPanelHeight, interfaceState, deviceMetrics, isVisible) = self.validLayout { let translationX = -recognizer.translation(in: self.view).x diff --git a/submodules/TelegramUI/Sources/ChatRecentActionsSearchNavigationContentNode.swift b/submodules/TelegramUI/Sources/ChatRecentActionsSearchNavigationContentNode.swift index 7b7f7eef1a..e591d1c031 100644 --- a/submodules/TelegramUI/Sources/ChatRecentActionsSearchNavigationContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatRecentActionsSearchNavigationContentNode.swift @@ -39,7 +39,7 @@ final class ChatRecentActionsSearchNavigationContentNode: NavigationBarContentNo self?.cancel() } - self.searchBar.textUpdated = { [weak self] query in + self.searchBar.textUpdated = { [weak self] query, _ in self?.queryUpdated?(query) } } diff --git a/submodules/TelegramUI/Sources/ChatSearchNavigationContentNode.swift b/submodules/TelegramUI/Sources/ChatSearchNavigationContentNode.swift index 9a504c8862..420496db61 100644 --- a/submodules/TelegramUI/Sources/ChatSearchNavigationContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatSearchNavigationContentNode.swift @@ -47,7 +47,7 @@ final class ChatSearchNavigationContentNode: NavigationBarContentNode { self?.interaction.dismissMessageSearch() } - self.searchBar.textUpdated = { [weak self] query in + self.searchBar.textUpdated = { [weak self] query, _ in self?.interaction.updateMessageSearch(query) } diff --git a/submodules/TelegramUI/Sources/FeaturedStickersScreen.swift b/submodules/TelegramUI/Sources/FeaturedStickersScreen.swift new file mode 100644 index 0000000000..2588ebfd43 --- /dev/null +++ b/submodules/TelegramUI/Sources/FeaturedStickersScreen.swift @@ -0,0 +1,1416 @@ +import Foundation +import UIKit +import Display +import AsyncDisplayKit +import Postbox +import TelegramCore +import SyncCore +import SwiftSignalKit +import AccountContext +import TelegramPresentationData +import TelegramUIPreferences +import MergeLists +import StickerPackPreviewUI +import OverlayStatusController +import PresentationDataUtils +import SearchBarNode +import UndoUI + +private final class FeaturedInteraction { + let installPack: (ItemCollectionInfo, Bool) -> Void + let openPack: (ItemCollectionInfo) -> Void + let getItemIsPreviewed: (StickerPackItem) -> Bool + let openSearch: () -> Void + + init(installPack: @escaping (ItemCollectionInfo, Bool) -> Void, openPack: @escaping (ItemCollectionInfo) -> Void, getItemIsPreviewed: @escaping (StickerPackItem) -> Bool, openSearch: @escaping () -> Void) { + self.installPack = installPack + self.openPack = openPack + self.getItemIsPreviewed = getItemIsPreviewed + self.openSearch = openSearch + } +} + +private final class FeaturedPackEntry: Identifiable, Comparable { + let index: Int + let info: StickerPackCollectionInfo + let theme: PresentationTheme + let strings: PresentationStrings + let topItems: [StickerPackItem] + let installed: Bool + let unread: Bool + let topSeparator: Bool + + init(index: Int, info: StickerPackCollectionInfo, theme: PresentationTheme, strings: PresentationStrings, topItems: [StickerPackItem], installed: Bool, unread: Bool, topSeparator: Bool) { + self.index = index + self.info = info + self.theme = theme + self.strings = strings + self.topItems = topItems + self.installed = installed + self.unread = unread + self.topSeparator = topSeparator + } + + var stableId: ItemCollectionId { + return self.info.id + } + + static func ==(lhs: FeaturedPackEntry, rhs: FeaturedPackEntry) -> Bool { + if lhs.index != rhs.index { + return false + } + if lhs.info != rhs.info { + return false + } + if lhs.theme !== rhs.theme { + return false + } + if lhs.strings !== rhs.strings { + return false + } + if lhs.topItems != rhs.topItems { + return false + } + if lhs.installed != rhs.installed { + return false + } + if lhs.unread != rhs.unread { + return false + } + if lhs.topSeparator != rhs.topSeparator { + return false + } + return true + } + + static func <(lhs: FeaturedPackEntry, rhs: FeaturedPackEntry) -> Bool { + return lhs.index < rhs.index + } + + func item(account: Account, interaction: FeaturedInteraction, grid: Bool) -> GridItem { + let info = self.info + return StickerPaneSearchGlobalItem(account: account, theme: self.theme, strings: self.strings, info: self.info, topItems: self.topItems, grid: grid, topSeparator: self.topSeparator, installed: self.installed, unread: self.unread, open: { + interaction.openPack(info) + }, install: { + interaction.installPack(info, !self.installed) + }, getItemIsPreviewed: { item in + return interaction.getItemIsPreviewed(item) + }) + } +} + +private enum FeaturedEntryId: Hashable { + case search + case pack(ItemCollectionId) +} + +private enum FeaturedEntry: Identifiable, Comparable { + case search(theme: PresentationTheme, strings: PresentationStrings) + case pack(FeaturedPackEntry) + + var stableId: FeaturedEntryId { + switch self { + case .search: + return .search + case let .pack(pack): + return .pack(pack.stableId) + } + } + + static func ==(lhs: FeaturedEntry, rhs: FeaturedEntry) -> Bool { + switch lhs { + case let .search(lhsTheme, lhsStrings): + if case let .search(rhsTheme, rhsStrings) = rhs, lhsTheme === rhsTheme, lhsStrings === rhsStrings { + return true + } else { + return false + } + case let .pack(pack): + if case .pack(pack) = rhs { + return true + } else { + return false + } + } + } + + static func <(lhs: FeaturedEntry, rhs: FeaturedEntry) -> Bool { + switch lhs { + case .search: + return false + case let .pack(lhsPack): + switch rhs { + case .search: + return false + case let .pack(rhsPack): + return lhsPack < rhsPack + } + } + } + + func item(account: Account, interaction: FeaturedInteraction, grid: Bool) -> GridItem { + switch self { + case let .search(theme, strings): + return PaneSearchBarPlaceholderItem(theme: theme, strings: strings, type: .stickers, activate: { + interaction.openSearch() + }) + case let .pack(pack): + return pack.item(account: account, interaction: interaction, grid: grid) + } + } +} + +private struct FeaturedTransition { + let deletions: [Int] + let insertions: [GridNodeInsertItem] + let updates: [GridNodeUpdateItem] + let initial: Bool +} + +private func preparedTransition(from fromEntries: [FeaturedEntry], to toEntries: [FeaturedEntry], account: Account, interaction: FeaturedInteraction, initial: Bool) -> FeaturedTransition { + let (deleteIndices, indicesAndItems, updateIndices) = mergeListsStableWithUpdates(leftList: fromEntries, rightList: toEntries) + + let deletions = deleteIndices + let insertions = indicesAndItems.map { GridNodeInsertItem(index: $0.0, item: $0.1.item(account: account, interaction: interaction, grid: false), previousIndex: $0.2) } + let updates = updateIndices.map { GridNodeUpdateItem(index: $0.0, previousIndex: $0.2, item: $0.1.item(account: account, interaction: interaction, grid: false)) } + + return FeaturedTransition(deletions: deletions, insertions: insertions, updates: updates, initial: initial) +} + +private func featuredScreenEntries(featuredEntries: [FeaturedStickerPackItem], installedPacks: Set, theme: PresentationTheme, strings: PresentationStrings, fixedUnread: Set) -> [FeaturedEntry] { + var result: [FeaturedEntry] = [] + var index = 0 + for item in featuredEntries { + result.append(.pack(FeaturedPackEntry(index: index, info: item.info, theme: theme, strings: strings, topItems: item.topItems, installed: installedPacks.contains(item.info.id), unread: item.unread || fixedUnread.contains(item.info.id), topSeparator: index != 0))) + index += 1 + } + return result +} + +private final class FeaturedStickersScreenNode: ViewControllerTracingNode { + private let context: AccountContext + private var presentationData: PresentationData + private weak var controller: FeaturedStickersScreen? + private let sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)? + + let gridNode: GridNode + + private var enqueuedTransitions: [FeaturedTransition] = [] + + private var validLayout: ContainerViewLayout? + + private var disposable: Disposable? + private let installDisposable = MetaDisposable() + + private var searchNode: FeaturedPaneSearchContentNode? + + private let _ready = Promise() + var ready: Promise { + return self._ready + } + private var didSetReady: Bool = false + + init(context: AccountContext, controller: FeaturedStickersScreen, sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)?) { + self.context = context + self.presentationData = context.sharedContext.currentPresentationData.with { $0 } + self.controller = controller + self.sendSticker = sendSticker + + self.gridNode = GridNode() + + super.init() + + self.backgroundColor = self.presentationData.theme.list.plainBackgroundColor + + self.addSubnode(self.gridNode) + + self.gridNode.scrollingInitiated = { [weak self] in + self?.view.endEditing(true) + } + + var processedRead = Set() + + self.gridNode.visibleItemsUpdated = { [weak self] visibleItems in + guard let strongSelf = self else { + return + } + if let (topIndex, _) = visibleItems.topVisible, let (bottomIndex, _) = visibleItems.bottomVisible { + var addedRead: [ItemCollectionId] = [] + for i in topIndex ... bottomIndex { + if i >= 0 && i < strongSelf.gridNode.items.count { + let item = strongSelf.gridNode.items[i] + if let item = item as? StickerPaneSearchGlobalItem, item.unread { + let info = item.info + if !processedRead.contains(info.id) { + processedRead.insert(info.id) + addedRead.append(info.id) + } + } + } + } + if !addedRead.isEmpty { + let _ = markFeaturedStickerPacksAsSeenInteractively(postbox: strongSelf.context.account.postbox, ids: addedRead).start() + } + } + } + + let inputNodeInteraction = ChatMediaInputNodeInteraction( + navigateToCollectionId: { _ in + }, + openSettings: { + }, + toggleSearch: { _, _ in + }, + openPeerSpecificSettings: { + }, + dismissPeerSpecificSettings: { + }, + clearRecentlyUsedStickers: { + } + ) + + self.searchNode = FeaturedPaneSearchContentNode( + context: context, + theme: self.presentationData.theme, + strings: self.presentationData.strings, + inputNodeInteraction: inputNodeInteraction, + controller: controller, + sendSticker: sendSticker + ) + self.searchNode?.updateActivity = { [weak self] activity in + self?.controller?.searchNavigationNode?.setActivity(activity) + } + + let interaction = FeaturedInteraction( + installPack: { [weak self] info, install in + guard let strongSelf = self, let info = info as? StickerPackCollectionInfo else { + return + } + let account = strongSelf.context.account + if install { + var installSignal = loadedStickerPack(postbox: strongSelf.context.account.postbox, network: strongSelf.context.account.network, reference: .id(id: info.id.id, accessHash: info.accessHash), forceActualized: false) + |> mapToSignal { result -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem]), NoError> in + switch result { + case let .result(info, items, installed): + if installed { + return .complete() + } else { + return preloadedStickerPackThumbnail(account: account, info: info, items: items) + |> filter { $0 } + |> ignoreValues + |> then( + addStickerPackInteractively(postbox: strongSelf.context.account.postbox, info: info, items: items) + |> ignoreValues + ) + |> mapToSignal { _ -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem]), NoError> in + } + |> then(.single((info, items))) + } + case .fetching: + break + case .none: + break + } + return .complete() + } + |> deliverOnMainQueue + + let context = strongSelf.context + var cancelImpl: (() -> Void)? + let progressSignal = Signal { subscriber in + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: { + cancelImpl?() + })) + self?.controller?.present(controller, in: .window(.root)) + return ActionDisposable { [weak controller] in + Queue.mainQueue().async() { + controller?.dismiss() + } + } + } + |> runOn(Queue.mainQueue()) + |> delay(1.0, queue: Queue.mainQueue()) + let progressDisposable = progressSignal.start() + + installSignal = installSignal + |> afterDisposed { + Queue.mainQueue().async { + progressDisposable.dispose() + } + } + cancelImpl = { + self?.installDisposable.set(nil) + } + + strongSelf.installDisposable.set(installSignal.start(next: { info, items in + guard let strongSelf = self else { + return + } + + /*var animateInAsReplacement = false + if let navigationController = strongSelf.controllerInteraction.navigationController() { + for controller in navigationController.overlayControllers { + if let controller = controller as? UndoOverlayController { + controller.dismissWithCommitActionAndReplacementAnimation() + animateInAsReplacement = true + } + } + } + + let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 } + strongSelf.controllerInteraction.navigationController()?.presentOverlay(controller: UndoOverlayController(presentationData: presentationData, content: .stickersModified(title: presentationData.strings.StickerPackActionInfo_AddedTitle, text: presentationData.strings.StickerPackActionInfo_AddedText(info.title).0, undo: false, info: info, topItem: items.first, account: strongSelf.context.account), elevatedLayout: false, animateInAsReplacement: animateInAsReplacement, action: { _ in + return true + }))*/ + })) + } else { + let _ = (removeStickerPackInteractively(postbox: account.postbox, id: info.id, option: .delete) + |> deliverOnMainQueue).start(next: { _ in + }) + } + }, + openPack: { [weak self] info in + if let strongSelf = self, let info = info as? StickerPackCollectionInfo { + strongSelf.view.window?.endEditing(true) + let packReference: StickerPackReference = .id(id: info.id.id, accessHash: info.accessHash) + let controller = StickerPackScreen(context: strongSelf.context, mainStickerPack: packReference, stickerPacks: [packReference], parentNavigationController: strongSelf.controller?.navigationController as? NavigationController, sendSticker: { fileReference, sourceNode, sourceRect in + if let strongSelf = self { + return strongSelf.sendSticker?(fileReference, sourceNode, sourceRect) ?? false + } else { + return false + } + }) + strongSelf.controller?.present(controller, in: .window(.root)) + } + }, + getItemIsPreviewed: { item in + return false + }, + openSearch: { + } + ) + + let previousEntries = Atomic<[FeaturedEntry]?>(value: nil) + let context = self.context + + var fixedUnread = Set() + + let mappedFeatured = context.account.viewTracker.featuredStickerPacks() + |> map { items -> ([FeaturedStickerPackItem], Set) in + for item in items { + if item.unread { + fixedUnread.insert(item.info.id) + } + } + return (items, fixedUnread) + } + + self.disposable = (combineLatest(queue: .mainQueue(), mappedFeatured, context.account.postbox.combinedView(keys: [.itemCollectionInfos(namespaces: [Namespaces.ItemCollection.CloudStickerPacks])]), context.sharedContext.presentationData) + |> map { featuredEntries, view, presentationData -> FeaturedTransition in + var installedPacks = Set() + if let stickerPacksView = view.views[.itemCollectionInfos(namespaces: [Namespaces.ItemCollection.CloudStickerPacks])] as? ItemCollectionInfosView { + if let packsEntries = stickerPacksView.entriesByNamespace[Namespaces.ItemCollection.CloudStickerPacks] { + for entry in packsEntries { + installedPacks.insert(entry.id) + } + } + } + let entries = featuredScreenEntries(featuredEntries: featuredEntries.0, installedPacks: installedPacks, theme: presentationData.theme, strings: presentationData.strings, fixedUnread: featuredEntries.1) + let previous = previousEntries.swap(entries) + + return preparedTransition(from: previous ?? [], to: entries, account: context.account, interaction: interaction, initial: previous == nil) + } + |> deliverOnMainQueue).start(next: { [weak self] transition in + guard let strongSelf = self else { + return + } + strongSelf.enqueueTransition(transition) + if !strongSelf.didSetReady { + strongSelf.didSetReady = true + strongSelf._ready.set(.single(true)) + } + }) + + self.controller?.searchNavigationNode?.setQueryUpdated({ [weak self] query, languageCode in + guard let strongSelf = self else { + return + } + strongSelf.searchNode?.updateText(query, languageCode: languageCode) + }) + + if let searchNode = self.searchNode { + self.addSubnode(searchNode) + } + } + + deinit { + self.disposable?.dispose() + self.installDisposable.dispose() + } + + override func didLoad() { + super.didLoad() + + self.view.addGestureRecognizer(PeekControllerGestureRecognizer(contentAtPoint: { [weak self] point in + guard let strongSelf = self else { + return nil + } + if let searchNode = strongSelf.searchNode, searchNode.isActive { + if let (itemNode, item) = searchNode.itemAt(point: strongSelf.view.convert(point, to: searchNode.view)) { + if let item = item as? StickerPreviewPeekItem { + return strongSelf.context.account.postbox.transaction { transaction -> Bool in + return getIsStickerSaved(transaction: transaction, fileId: item.file.fileId) + } + |> deliverOnMainQueue + |> map { isStarred -> (ASDisplayNode, PeekControllerContent)? in + if let strongSelf = self { + var menuItems: [PeekControllerMenuItem] = [] + menuItems = [ + PeekControllerMenuItem(title: strongSelf.presentationData.strings.StickerPack_Send, color: .accent, font: .bold, action: { node, rect in + if let strongSelf = self { + return strongSelf.sendSticker?(.standalone(media: item.file), node, rect) ?? false + } else { + return false + } + }), + PeekControllerMenuItem(title: isStarred ? strongSelf.presentationData.strings.Stickers_RemoveFromFavorites : strongSelf.presentationData.strings.Stickers_AddToFavorites, color: isStarred ? .destructive : .accent, action: { _, _ in + if let strongSelf = self { + if isStarred { + let _ = removeSavedSticker(postbox: strongSelf.context.account.postbox, mediaId: item.file.fileId).start() + } else { + let _ = addSavedSticker(postbox: strongSelf.context.account.postbox, network: strongSelf.context.account.network, file: item.file).start() + } + } + return true + }), + PeekControllerMenuItem(title: strongSelf.presentationData.strings.StickerPack_ViewPack, color: .accent, action: { _, _ in + if let strongSelf = self { + loop: for attribute in item.file.attributes { + switch attribute { + case let .Sticker(_, packReference, _): + if let packReference = packReference { + let controller = StickerPackScreen(context: strongSelf.context, mainStickerPack: packReference, stickerPacks: [packReference], parentNavigationController: strongSelf.controller?.navigationController as? NavigationController, sendSticker: { file, sourceNode, sourceRect in + if let strongSelf = self { + return strongSelf.sendSticker?(file, sourceNode, sourceRect) ?? false + } else { + return false + } + }) + + strongSelf.controller?.view.endEditing(true) + strongSelf.controller?.present(controller, in: .window(.root)) + } + break loop + default: + break + } + } + } + return true + }), + PeekControllerMenuItem(title: strongSelf.presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { _, _ in return true }) + ] + return (itemNode, StickerPreviewPeekContent(account: strongSelf.context.account, item: item, menu: menuItems)) + } else { + return nil + } + } + } + } + return nil + } + + let itemNodeAndItem: (ASDisplayNode, StickerPackItem)? = strongSelf.itemAt(point: point) + if let (itemNode, item) = itemNodeAndItem { + return strongSelf.context.account.postbox.transaction { transaction -> Bool in + return getIsStickerSaved(transaction: transaction, fileId: item.file.fileId) + } + |> deliverOnMainQueue + |> map { isStarred -> (ASDisplayNode, PeekControllerContent)? in + if let strongSelf = self { + var menuItems: [PeekControllerMenuItem] = [] + menuItems = [ + PeekControllerMenuItem(title: strongSelf.presentationData.strings.StickerPack_Send, color: .accent, font: .bold, action: { node, rect in + if let strongSelf = self { + return strongSelf.sendSticker?(.standalone(media: item.file), node, rect) ?? false + } else { + return false + } + }), + PeekControllerMenuItem(title: isStarred ? strongSelf.presentationData.strings.Stickers_RemoveFromFavorites : strongSelf.presentationData.strings.Stickers_AddToFavorites, color: isStarred ? .destructive : .accent, action: { _, _ in + if let strongSelf = self { + if isStarred { + let _ = removeSavedSticker(postbox: strongSelf.context.account.postbox, mediaId: item.file.fileId).start() + } else { + let _ = addSavedSticker(postbox: strongSelf.context.account.postbox, network: strongSelf.context.account.network, file: item.file).start() + } + } + return true + }), + PeekControllerMenuItem(title: strongSelf.presentationData.strings.StickerPack_ViewPack, color: .accent, action: { _, _ in + if let strongSelf = self { + loop: for attribute in item.file.attributes { + switch attribute { + case let .Sticker(_, packReference, _): + if let packReference = packReference { + let controller = StickerPackScreen(context: strongSelf.context, mainStickerPack: packReference, stickerPacks: [packReference], parentNavigationController: strongSelf.controller?.navigationController as? NavigationController, sendSticker: { file, sourceNode, sourceRect in + if let strongSelf = self { + return strongSelf.sendSticker?(file, sourceNode, sourceRect) ?? false + } else { + return false + } + }) + + strongSelf.controller?.view.endEditing(true) + strongSelf.controller?.present(controller, in: .window(.root)) + } + break loop + default: + break + } + } + } + return true + }), + PeekControllerMenuItem(title: strongSelf.presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { _, _ in return true }) + ] + return (itemNode, StickerPreviewPeekContent(account: strongSelf.context.account, item: .pack(item), menu: menuItems)) + } else { + return nil + } + } + } + return nil + }, present: { [weak self] content, sourceNode in + if let strongSelf = self { + let controller = PeekController(theme: PeekControllerTheme(presentationTheme: strongSelf.presentationData.theme), content: content, sourceNode: { + return sourceNode + }) + strongSelf.controller?.presentInGlobalOverlay(controller) + return controller + } + return nil + }, updateContent: { [weak self] content in + if let strongSelf = self { + var item: StickerPreviewPeekItem? + if let content = content as? StickerPreviewPeekContent { + item = content.item + } + //strongSelf.updatePreviewingItem(item: item, animated: true) + } + })) + } + + func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationHeight: CGFloat, transition: ContainedViewLayoutTransition) { + let firstTime = self.validLayout == nil + + self.validLayout = layout + + var insets = layout.insets(options: [.statusBar]) + insets.top += navigationHeight + + if let searchNode = self.searchNode { + let searchNodeFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: layout.size.height - insets.top)) + transition.updateFrame(node: searchNode, frame: searchNodeFrame) + searchNode.updateLayout(size: searchNodeFrame.size, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, bottomInset: insets.bottom, inputHeight: layout.inputHeight ?? 0.0, deviceMetrics: layout.deviceMetrics, transition: transition) + } + + let itemSize: CGSize + if case .tablet = layout.deviceMetrics.type, layout.size.width > 480.0 { + itemSize = CGSize(width: floor(layout.size.width / 2.0), height: 128.0) + } else { + itemSize = CGSize(width: layout.size.width, height: 128.0) + } + + self.gridNode.transaction(GridNodeTransaction(deleteItems: [], insertItems: [], updateItems: [], scrollToItem: nil, updateLayout: GridNodeUpdateLayout(layout: GridNodeLayout(size: layout.size, insets: UIEdgeInsets(top: insets.top, left: layout.safeInsets.left, bottom: insets.bottom, right: layout.safeInsets.right), preloadSize: 300.0, type: .fixed(itemSize: itemSize, fillWidth: nil, lineSpacing: 0.0, itemSpacing: nil)), transition: transition), itemTransition: .immediate, stationaryItems: .none, updateFirstIndexInSectionOffset: nil), completion: { _ in }) + + transition.updateFrame(node: self.gridNode, frame: CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: layout.size.height))) + + if firstTime { + while !self.enqueuedTransitions.isEmpty { + self.dequeueTransition() + } + if !self.didSetReady { + self.didSetReady = true + self._ready.set(.single(true)) + } + } + } + + override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + if !self.bounds.contains(point) { + return nil + } + + return super.hitTest(point, with: event) + } + + private func enqueueTransition(_ transition: FeaturedTransition) { + self.enqueuedTransitions.append(transition) + + if self.validLayout != nil { + while !self.enqueuedTransitions.isEmpty { + self.dequeueTransition() + } + } + } + + private func dequeueTransition() { + if let transition = self.enqueuedTransitions.first { + self.enqueuedTransitions.remove(at: 0) + + let itemTransition: ContainedViewLayoutTransition = .immediate + self.gridNode.transaction(GridNodeTransaction(deleteItems: transition.deletions, insertItems: transition.insertions, updateItems: transition.updates, scrollToItem: nil, updateLayout: nil, itemTransition: itemTransition, stationaryItems: .none, updateFirstIndexInSectionOffset: nil, synchronousLoads: transition.initial), completion: { _ in }) + } + } + + func itemAt(point: CGPoint) -> (ASDisplayNode, StickerPackItem)? { + let localPoint = self.view.convert(point, to: self.gridNode.view) + var resultNode: StickerPaneSearchGlobalItemNode? + self.gridNode.forEachItemNode { itemNode in + if itemNode.frame.contains(localPoint), let itemNode = itemNode as? StickerPaneSearchGlobalItemNode { + resultNode = itemNode + } + } + if let resultNode = resultNode { + return resultNode.itemAt(point: self.gridNode.view.convert(localPoint, to: resultNode.view)) + } + return nil + } + + func updatePreviewing(animated: Bool) { + self.gridNode.forEachItemNode { itemNode in + if let itemNode = itemNode as? StickerPaneSearchGlobalItemNode { + itemNode.updatePreviewing(animated: animated) + } + } + } +} + +final class FeaturedStickersScreen: ViewController { + private let context: AccountContext + private let sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)? + + private var controllerNode: FeaturedStickersScreenNode { + return self.displayNode as! FeaturedStickersScreenNode + } + + private var presentationData: PresentationData + + private let _ready = Promise() + override public var ready: Promise { + return self._ready + } + + fileprivate var searchNavigationNode: SearchNavigationContentNode? + + public init(context: AccountContext, sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)? = nil) { + self.context = context + self.sendSticker = sendSticker + + self.presentationData = context.sharedContext.currentPresentationData.with { $0 } + + super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData)) + + self.navigationPresentation = .modal + + self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style + + let searchNavigationNode = SearchNavigationContentNode(theme: self.presentationData.theme, strings: self.presentationData.strings, cancel: { [weak self] in + self?.dismiss() + }) + self.searchNavigationNode = searchNavigationNode + + self.navigationBar?.setContentNode(searchNavigationNode, animated: false) + } + + required init(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override public func loadDisplayNode() { + self.displayNode = FeaturedStickersScreenNode( + context: self.context, + controller: self, + sendSticker: self.sendSticker.flatMap { [weak self] sendSticker in + return { file, sourceNode, sourceRect in + if sendSticker(file, sourceNode, sourceRect) { + self?.dismiss() + return true + } else { + return false + } + } + } + ) + + self._ready.set(self.controllerNode.ready.get()) + + super.displayNodeDidLoad() + } + + override public func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + } + + override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + super.containerLayoutUpdated(layout, transition: transition) + + self.controllerNode.containerLayoutUpdated(layout, navigationHeight: self.navigationHeight, transition: transition) + } +} + +private final class SearchNavigationContentNode: NavigationBarContentNode { + private let theme: PresentationTheme + private let strings: PresentationStrings + + private let cancel: () -> Void + + private let searchBar: SearchBarNode + + private var queryUpdated: ((String, String?) -> Void)? + + init(theme: PresentationTheme, strings: PresentationStrings, cancel: @escaping () -> Void) { + self.theme = theme + self.strings = strings + + self.cancel = cancel + + self.searchBar = SearchBarNode(theme: SearchBarNodeTheme(theme: theme), strings: strings, fieldStyle: .modern, cancelText: strings.Common_Done) + let placeholderText = strings.Common_Search + let searchBarFont = Font.regular(17.0) + + self.searchBar.placeholderString = NSAttributedString(string: placeholderText, font: searchBarFont, textColor: theme.rootController.navigationSearchBar.inputPlaceholderTextColor) + + super.init() + + self.addSubnode(self.searchBar) + + self.searchBar.cancel = { [weak self] in + //self?.searchBar.deactivate(clear: false) + self?.cancel() + } + + self.searchBar.textUpdated = { [weak self] query, languageCode in + self?.queryUpdated?(query, languageCode) + } + } + + func setQueryUpdated(_ f: @escaping (String, String?) -> Void) { + self.queryUpdated = f + } + + func setActivity(_ value: Bool) { + self.searchBar.activity = value + } + + override var nominalHeight: CGFloat { + return 54.0 + } + + override func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) { + let searchBarFrame = CGRect(origin: CGPoint(x: 0.0, y: size.height - self.nominalHeight), size: CGSize(width: size.width, height: 54.0)) + self.searchBar.frame = searchBarFrame + self.searchBar.updateLayout(boundingSize: searchBarFrame.size, leftInset: leftInset, rightInset: rightInset, transition: transition) + } + + func activate() { + self.searchBar.activate() + } + + func deactivate() { + self.searchBar.deactivate(clear: false) + } +} + +private enum FeaturedSearchEntryId: Equatable, Hashable { + case sticker(String?, Int64) + case global(ItemCollectionId) +} + +private enum FeaturedSearchEntry: Identifiable, Comparable { + case sticker(index: Int, code: String?, stickerItem: FoundStickerItem, theme: PresentationTheme) + case global(index: Int, info: StickerPackCollectionInfo, topItems: [StickerPackItem], installed: Bool, topSeparator: Bool) + + var stableId: FeaturedSearchEntryId { + switch self { + case let .sticker(_, code, stickerItem, _): + return .sticker(code, stickerItem.file.fileId.id) + case let .global(_, info, _, _, _): + return .global(info.id) + } + } + + static func ==(lhs: FeaturedSearchEntry, rhs: FeaturedSearchEntry) -> Bool { + switch lhs { + case let .sticker(lhsIndex, lhsCode, lhsStickerItem, lhsTheme): + if case let .sticker(rhsIndex, rhsCode, rhsStickerItem, rhsTheme) = rhs { + if lhsIndex != rhsIndex { + return false + } + if lhsCode != rhsCode { + return false + } + if lhsStickerItem != rhsStickerItem { + return false + } + if lhsTheme !== rhsTheme { + return false + } + return true + } else { + return false + } + case let .global(index, info, topItems, installed, topSeparator): + if case .global(index, info, topItems, installed, topSeparator) = rhs { + return true + } else { + return false + } + } + } + + static func <(lhs: FeaturedSearchEntry, rhs: FeaturedSearchEntry) -> Bool { + switch lhs { + case let .sticker(lhsIndex, _, _, _): + switch rhs { + case let .sticker(rhsIndex, _, _, _): + return lhsIndex < rhsIndex + default: + return true + } + case let .global(lhsIndex, _, _, _, _): + switch rhs { + case .sticker: + return false + case let .global(rhsIndex, _, _, _, _): + return lhsIndex < rhsIndex + } + } + } + + func item(account: Account, theme: PresentationTheme, strings: PresentationStrings, interaction: StickerPaneSearchInteraction, inputNodeInteraction: ChatMediaInputNodeInteraction) -> GridItem { + switch self { + case let .sticker(_, code, stickerItem, theme): + return StickerPaneSearchStickerItem(account: account, code: code, stickerItem: stickerItem, inputNodeInteraction: inputNodeInteraction, theme: theme, selected: { node, rect in + interaction.sendSticker(.standalone(media: stickerItem.file), node, rect) + }) + case let .global(_, info, topItems, installed, topSeparator): + return StickerPaneSearchGlobalItem(account: account, theme: theme, strings: strings, info: info, topItems: topItems, grid: false, topSeparator: topSeparator, installed: installed, unread: false, open: { + interaction.open(info) + }, install: { + interaction.install(info, topItems, !installed) + }, getItemIsPreviewed: { item in + return interaction.getItemIsPreviewed(item) + }) + } + } +} + +private struct FeaturedSearchGridTransition { + let deletions: [Int] + let insertions: [GridNodeInsertItem] + let updates: [GridNodeUpdateItem] + let updateFirstIndexInSectionOffset: Int? + let stationaryItems: GridNodeStationaryItems + let scrollToItem: GridNodeScrollToItem? + let animated: Bool +} + +private func preparedFeaturedSearchEntryTransition(account: Account, theme: PresentationTheme, strings: PresentationStrings, from fromEntries: [FeaturedSearchEntry], to toEntries: [FeaturedSearchEntry], interaction: StickerPaneSearchInteraction, inputNodeInteraction: ChatMediaInputNodeInteraction) -> FeaturedSearchGridTransition { + let stationaryItems: GridNodeStationaryItems = .none + let scrollToItem: GridNodeScrollToItem? = nil + var animated = false + animated = true + + let (deleteIndices, indicesAndItems, updateIndices) = mergeListsStableWithUpdates(leftList: fromEntries, rightList: toEntries) + + let deletions = deleteIndices + let insertions = indicesAndItems.map { GridNodeInsertItem(index: $0.0, item: $0.1.item(account: account, theme: theme, strings: strings, interaction: interaction, inputNodeInteraction: inputNodeInteraction), previousIndex: $0.2) } + let updates = updateIndices.map { GridNodeUpdateItem(index: $0.0, previousIndex: $0.2, item: $0.1.item(account: account, theme: theme, strings: strings, interaction: interaction, inputNodeInteraction: inputNodeInteraction)) } + + let firstIndexInSectionOffset = 0 + + return FeaturedSearchGridTransition(deletions: deletions, insertions: insertions, updates: updates, updateFirstIndexInSectionOffset: firstIndexInSectionOffset, stationaryItems: stationaryItems, scrollToItem: scrollToItem, animated: animated) +} + +private final class FeaturedPaneSearchContentNode: ASDisplayNode { + private let context: AccountContext + private let inputNodeInteraction: ChatMediaInputNodeInteraction + private var interaction: StickerPaneSearchInteraction? + private weak var controller: FeaturedStickersScreen? + private let sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)? + + private var theme: PresentationTheme + private var strings: PresentationStrings + + private let gridNode: GridNode + private let notFoundNode: ASImageNode + private let notFoundLabel: ImmediateTextNode + + private var validLayout: CGSize? + + private var enqueuedTransitions: [FeaturedSearchGridTransition] = [] + + private let searchDisposable = MetaDisposable() + + private let queue = Queue() + private let currentEntries = Atomic<[FeaturedSearchEntry]?>(value: nil) + private let currentRemotePacks = Atomic(value: nil) + + private let _ready = Promise() + var ready: Signal { + return self._ready.get() + } + + var deactivateSearchBar: (() -> Void)? + var updateActivity: ((Bool) -> Void)? + + private let installDisposable = MetaDisposable() + + var isActive: Bool { + return !self.gridNode.isHidden + } + + init(context: AccountContext, theme: PresentationTheme, strings: PresentationStrings, inputNodeInteraction: ChatMediaInputNodeInteraction, controller: FeaturedStickersScreen, sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)?) { + self.context = context + self.inputNodeInteraction = inputNodeInteraction + self.controller = controller + self.sendSticker = sendSticker + + self.theme = theme + self.strings = strings + + self.gridNode = GridNode() + self.gridNode.backgroundColor = theme.list.plainBackgroundColor + + self.notFoundNode = ASImageNode() + self.notFoundNode.displayWithoutProcessing = true + self.notFoundNode.displaysAsynchronously = false + self.notFoundNode.clipsToBounds = false + + self.notFoundLabel = ImmediateTextNode() + self.notFoundLabel.displaysAsynchronously = false + self.notFoundLabel.isUserInteractionEnabled = false + self.notFoundNode.addSubnode(self.notFoundLabel) + + self.gridNode.isHidden = true + self.notFoundNode.isHidden = true + + super.init() + + self.addSubnode(self.gridNode) + self.addSubnode(self.notFoundNode) + + self.gridNode.scrollView.alwaysBounceVertical = true + self.gridNode.scrollingInitiated = { [weak self] in + self?.deactivateSearchBar?() + } + + self.interaction = StickerPaneSearchInteraction(open: { [weak self] info in + if let strongSelf = self { + strongSelf.view.window?.endEditing(true) + let packReference: StickerPackReference = .id(id: info.id.id, accessHash: info.accessHash) + let controller = StickerPackScreen(context: strongSelf.context, mainStickerPack: packReference, stickerPacks: [packReference], parentNavigationController: strongSelf.controller?.navigationController as? NavigationController, sendSticker: { [weak self] fileReference, sourceNode, sourceRect in + if let strongSelf = self { + return strongSelf.sendSticker?(fileReference, sourceNode, sourceRect) ?? false + } else { + return false + } + }) + strongSelf.controller?.present(controller, in: .window(.root)) + } + }, install: { [weak self] info, items, install in + guard let strongSelf = self else { + return + } + let account = strongSelf.context.account + if install { + var installSignal = loadedStickerPack(postbox: strongSelf.context.account.postbox, network: strongSelf.context.account.network, reference: .id(id: info.id.id, accessHash: info.accessHash), forceActualized: false) + |> mapToSignal { result -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem]), NoError> in + switch result { + case let .result(info, items, installed): + if installed { + return .complete() + } else { + return preloadedStickerPackThumbnail(account: account, info: info, items: items) + |> filter { $0 } + |> ignoreValues + |> then( + addStickerPackInteractively(postbox: strongSelf.context.account.postbox, info: info, items: items) + |> ignoreValues + ) + |> mapToSignal { _ -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem]), NoError> in + return .complete() + } + |> then(.single((info, items))) + } + case .fetching: + break + case .none: + break + } + return .complete() + } + |> deliverOnMainQueue + + let context = strongSelf.context + var cancelImpl: (() -> Void)? + let progressSignal = Signal { subscriber in + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: { + cancelImpl?() + })) + self?.controller?.present(controller, in: .window(.root)) + return ActionDisposable { [weak controller] in + Queue.mainQueue().async() { + controller?.dismiss() + } + } + } + |> runOn(Queue.mainQueue()) + |> delay(0.12, queue: Queue.mainQueue()) + let progressDisposable = progressSignal.start() + + installSignal = installSignal + |> afterDisposed { + Queue.mainQueue().async { + progressDisposable.dispose() + } + } + cancelImpl = { + self?.installDisposable.set(nil) + } + + strongSelf.installDisposable.set(installSignal.start(next: { info, items in + guard let strongSelf = self else { + return + } + + var animateInAsReplacement = false + if let navigationController = strongSelf.controller?.navigationController as? NavigationController { + for controller in navigationController.overlayControllers { + if let controller = controller as? UndoOverlayController { + controller.dismissWithCommitActionAndReplacementAnimation() + animateInAsReplacement = true + } + } + } + + let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 } + /*strongSelf.controllerInteraction.navigationController()?.presentOverlay(controller: UndoOverlayController(presentationData: presentationData, content: .stickersModified(title: presentationData.strings.StickerPackActionInfo_AddedTitle, text: presentationData.strings.StickerPackActionInfo_AddedText(info.title).0, undo: false, info: info, topItem: items.first, account: strongSelf.context.account), elevatedLayout: false, animateInAsReplacement: animateInAsReplacement, action: { _ in + return true + }))*/ + })) + } else { + let _ = (removeStickerPackInteractively(postbox: account.postbox, id: info.id, option: .delete) + |> deliverOnMainQueue).start(next: { _ in + }) + } + }, sendSticker: { [weak self] file, sourceNode, sourceRect in + if let strongSelf = self { + let _ = strongSelf.sendSticker?(file, sourceNode, sourceRect) + } + }, getItemIsPreviewed: { item in + return inputNodeInteraction.previewedStickerPackItem == .pack(item) + }) + + self._ready.set(.single(Void())) + + self.updateThemeAndStrings(theme: theme, strings: strings) + } + + deinit { + self.searchDisposable.dispose() + self.installDisposable.dispose() + } + + func updateText(_ text: String, languageCode: String?) { + let signal: Signal<([(String?, FoundStickerItem)], FoundStickerSets, Bool, FoundStickerSets?)?, NoError> + if !text.isEmpty { + let account = self.context.account + let stickers: Signal<[(String?, FoundStickerItem)], NoError> = Signal { subscriber in + var signals: Signal<[Signal<(String?, [FoundStickerItem]), NoError>], NoError> = .single([]) + + let query = text.trimmingCharacters(in: .whitespacesAndNewlines) + if query.isSingleEmoji { + signals = .single([searchStickers(account: account, query: text.basicEmoji.0) + |> map { (nil, $0) }]) + } else if query.count > 1, let languageCode = languageCode, !languageCode.isEmpty && languageCode != "emoji" { + var signal = searchEmojiKeywords(postbox: account.postbox, inputLanguageCode: languageCode, query: query.lowercased(), completeMatch: query.count < 3) + if !languageCode.lowercased().hasPrefix("en") { + signal = signal + |> mapToSignal { keywords in + return .single(keywords) + |> then( + searchEmojiKeywords(postbox: account.postbox, inputLanguageCode: "en-US", query: query.lowercased(), completeMatch: query.count < 3) + |> map { englishKeywords in + return keywords + englishKeywords + } + ) + } + } + + signals = signal + |> map { keywords -> [Signal<(String?, [FoundStickerItem]), NoError>] in + var signals: [Signal<(String?, [FoundStickerItem]), NoError>] = [] + let emoticons = keywords.flatMap { $0.emoticons } + for emoji in emoticons { + signals.append(searchStickers(account: self.context.account, query: emoji.basicEmoji.0) + |> take(1) + |> map { (emoji, $0) }) + } + return signals + } + } + + return (signals + |> mapToSignal { signals in + return combineLatest(signals) + }).start(next: { results in + var result: [(String?, FoundStickerItem)] = [] + for (emoji, stickers) in results { + for sticker in stickers { + result.append((emoji, sticker)) + } + } + subscriber.putNext(result) + }, completed: { + subscriber.putCompletion() + }) + } + + let local = searchStickerSets(postbox: context.account.postbox, query: text) + let remote = searchStickerSetsRemotely(network: context.account.network, query: text) + |> delay(0.2, queue: Queue.mainQueue()) + let rawPacks = local + |> mapToSignal { result -> Signal<(FoundStickerSets, Bool, FoundStickerSets?), NoError> in + var localResult = result + if let currentRemote = self.currentRemotePacks.with ({ $0 }) { + localResult = localResult.merge(with: currentRemote) + } + return .single((localResult, false, nil)) + |> then( + remote + |> map { remote -> (FoundStickerSets, Bool, FoundStickerSets?) in + return (result.merge(with: remote), true, remote) + } + ) + } + + let installedPackIds = context.account.postbox.combinedView(keys: [.itemCollectionInfos(namespaces: [Namespaces.ItemCollection.CloudStickerPacks])]) + |> map { view -> Set in + var installedPacks = Set() + if let stickerPacksView = view.views[.itemCollectionInfos(namespaces: [Namespaces.ItemCollection.CloudStickerPacks])] as? ItemCollectionInfosView { + if let packsEntries = stickerPacksView.entriesByNamespace[Namespaces.ItemCollection.CloudStickerPacks] { + for entry in packsEntries { + installedPacks.insert(entry.id) + } + } + } + return installedPacks + } + |> distinctUntilChanged + let packs = combineLatest(rawPacks, installedPackIds) + |> map { packs, installedPackIds -> (FoundStickerSets, Bool, FoundStickerSets?) in + var (localPacks, completed, remotePacks) = packs + + for i in 0 ..< localPacks.infos.count { + let installed = installedPackIds.contains(localPacks.infos[i].0) + if installed != localPacks.infos[i].3 { + localPacks.infos[i].3 = installed + } + } + + if remotePacks != nil { + for i in 0 ..< remotePacks!.infos.count { + let installed = installedPackIds.contains(remotePacks!.infos[i].0) + if installed != remotePacks!.infos[i].3 { + remotePacks!.infos[i].3 = installed + } + } + } + + return (localPacks, completed, remotePacks) + } + + signal = combineLatest(stickers, packs) + |> map { stickers, packs -> ([(String?, FoundStickerItem)], FoundStickerSets, Bool, FoundStickerSets?)? in + return (stickers, packs.0, packs.1, packs.2) + } + self.updateActivity?(true) + } else { + signal = .single(nil) + self.updateActivity?(false) + } + + self.searchDisposable.set((signal + |> deliverOn(self.queue)).start(next: { [weak self] result in + Queue.mainQueue().async { + guard let strongSelf = self, let interaction = strongSelf.interaction else { + return + } + + var displayResults: Bool = false + + var entries: [FeaturedSearchEntry] = [] + if let (stickers, packs, final, remote) = result { + if let remote = remote { + let _ = strongSelf.currentRemotePacks.swap(remote) + } + + if final { + strongSelf.updateActivity?(false) + } + + var index = 0 + var existingStickerIds = Set() + var previousCode: String? + for (code, sticker) in stickers { + if let id = sticker.file.id, !existingStickerIds.contains(id) { + entries.append(.sticker(index: index, code: code != previousCode ? code : nil, stickerItem: sticker, theme: strongSelf.theme)) + index += 1 + + previousCode = code + existingStickerIds.insert(id) + } + } + var isFirstGlobal = true + for (collectionId, info, _, installed) in packs.infos { + if let info = info as? StickerPackCollectionInfo { + var topItems: [StickerPackItem] = [] + for e in packs.entries { + if let item = e.item as? StickerPackItem { + if e.index.collectionId == collectionId { + topItems.append(item) + } + } + } + entries.append(.global(index: index, info: info, topItems: topItems, installed: installed, topSeparator: !isFirstGlobal)) + isFirstGlobal = false + index += 1 + } + } + + if final || !entries.isEmpty { + strongSelf.notFoundNode.isHidden = !entries.isEmpty + } + + displayResults = true + } else { + let _ = strongSelf.currentRemotePacks.swap(nil) + strongSelf.updateActivity?(false) + } + + let previousEntries = strongSelf.currentEntries.swap(entries) + let transition = preparedFeaturedSearchEntryTransition(account: strongSelf.context.account, theme: strongSelf.theme, strings: strongSelf.strings, from: previousEntries ?? [], to: entries, interaction: interaction, inputNodeInteraction: strongSelf.inputNodeInteraction) + strongSelf.enqueueTransition(transition) + + if displayResults { + strongSelf.gridNode.isHidden = false + } else { + strongSelf.gridNode.isHidden = true + strongSelf.notFoundNode.isHidden = true + } + } + })) + } + + func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) { + self.notFoundNode.image = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Media/StickersNotFoundIcon"), color: theme.list.freeMonoIconColor) + self.notFoundLabel.attributedText = NSAttributedString(string: strings.Stickers_NoStickersFound, font: Font.medium(14.0), textColor: theme.list.freeTextColor) + } + + private func enqueueTransition(_ transition: FeaturedSearchGridTransition) { + self.enqueuedTransitions.append(transition) + + if self.validLayout != nil { + while !self.enqueuedTransitions.isEmpty { + self.dequeueTransition() + } + } + } + + private func dequeueTransition() { + if let transition = self.enqueuedTransitions.first { + self.enqueuedTransitions.remove(at: 0) + + let itemTransition: ContainedViewLayoutTransition = .immediate + self.gridNode.transaction(GridNodeTransaction(deleteItems: transition.deletions, insertItems: transition.insertions, updateItems: transition.updates, scrollToItem: transition.scrollToItem, updateLayout: nil, itemTransition: itemTransition, stationaryItems: .none, updateFirstIndexInSectionOffset: transition.updateFirstIndexInSectionOffset, synchronousLoads: true), completion: { _ in }) + self.gridNode.recursivelyEnsureDisplaySynchronously(true) + } + } + + func updatePreviewing(animated: Bool) { + self.gridNode.forEachItemNode { itemNode in + if let itemNode = itemNode as? StickerPaneSearchStickerItemNode { + itemNode.updatePreviewing(animated: animated) + } else if let itemNode = itemNode as? StickerPaneSearchGlobalItemNode { + itemNode.updatePreviewing(animated: animated) + } + } + } + + func itemAt(point: CGPoint) -> (ASDisplayNode, Any)? { + if let itemNode = self.gridNode.itemNodeAtPoint(self.view.convert(point, to: self.gridNode.view)) { + if let itemNode = itemNode as? StickerPaneSearchStickerItemNode, let stickerItem = itemNode.stickerItem { + return (itemNode, StickerPreviewPeekItem.found(stickerItem)) + } else if let itemNode = itemNode as? StickerPaneSearchGlobalItemNode { + if let (node, item) = itemNode.itemAt(point: self.view.convert(point, to: itemNode.view)) { + return (node, StickerPreviewPeekItem.pack(item)) + } + } + } + return nil + } + + func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, bottomInset: CGFloat, inputHeight: CGFloat, deviceMetrics: DeviceMetrics, transition: ContainedViewLayoutTransition) { + let firstLayout = self.validLayout == nil + + self.validLayout = size + + if let image = self.notFoundNode.image { + let areaHeight = size.height - inputHeight + + let labelSize = self.notFoundLabel.updateLayout(CGSize(width: size.width, height: CGFloat.greatestFiniteMagnitude)) + + transition.updateFrame(node: self.notFoundNode, frame: CGRect(origin: CGPoint(x: floor((size.width - image.size.width) / 2.0), y: floor((areaHeight - image.size.height - labelSize.height) / 2.0)), size: image.size)) + transition.updateFrame(node: self.notFoundLabel, frame: CGRect(origin: CGPoint(x: floor((image.size.width - labelSize.width) / 2.0), y: image.size.height + 8.0), size: labelSize)) + } + + let contentFrame = CGRect(origin: CGPoint(), size: size) + self.gridNode.transaction(GridNodeTransaction(deleteItems: [], insertItems: [], updateItems: [], scrollToItem: nil, updateLayout: GridNodeUpdateLayout(layout: GridNodeLayout(size: contentFrame.size, insets: UIEdgeInsets(top: 0.0, left: 0.0, bottom: 4.0 + bottomInset, right: 0.0), preloadSize: 300.0, type: .fixed(itemSize: CGSize(width: 75.0, height: 75.0), fillWidth: nil, lineSpacing: 0.0, itemSpacing: nil)), transition: transition), itemTransition: .immediate, stationaryItems: .none, updateFirstIndexInSectionOffset: nil), completion: { _ in }) + + transition.updateFrame(node: self.gridNode, frame: contentFrame) + if firstLayout { + while !self.enqueuedTransitions.isEmpty { + self.dequeueTransition() + } + } + } + + func animateIn(additivePosition: CGFloat, transition: ContainedViewLayoutTransition) { + self.gridNode.alpha = 0.0 + transition.updateAlpha(node: self.gridNode, alpha: 1.0, completion: { _ in + }) + } + + func animateOut(transition: ContainedViewLayoutTransition) { + transition.updateAlpha(node: self.gridNode, alpha: 0.0, completion: { _ in + }) + transition.updateAlpha(node: self.notFoundNode, alpha: 0.0, completion: { _ in + }) + } + + override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + if !self.bounds.contains(point) { + return nil + } + + if self.gridNode.isHidden { + return nil + } + + return super.hitTest(point, with: event) + } +} diff --git a/submodules/TelegramUI/Sources/MediaInputPaneTrendingItem.swift b/submodules/TelegramUI/Sources/MediaInputPaneTrendingItem.swift index ec22398029..052fb6eb3e 100644 --- a/submodules/TelegramUI/Sources/MediaInputPaneTrendingItem.swift +++ b/submodules/TelegramUI/Sources/MediaInputPaneTrendingItem.swift @@ -115,11 +115,12 @@ final class TrendingTopItemNode: ASDisplayNode { self.addSubnode(animationNode) self.animationNode = animationNode } + let dimensions = item.file.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)) + self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: account.postbox, file: item.file, small: false, size: fittedDimensions, synchronousLoad: synchronousLoads), attemptSynchronously: synchronousLoads) animationNode.started = { [weak self] in self?.imageNode.alpha = 0.0 } - let dimensions = item.file.dimensions ?? PixelDimensions(width: 512, height: 512) - let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)) animationNode.setup(source: AnimatedStickerResourceSource(account: account, resource: item.file.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .cached) self.loadDisposable.set(freeMediaFileResourceInteractiveFetched(account: account, fileReference: stickerPackFileReference(item.file), resource: item.file.resource).start()) } else { diff --git a/submodules/TelegramUI/Sources/StickerPaneSearchContentNode.swift b/submodules/TelegramUI/Sources/StickerPaneSearchContentNode.swift index 5f38d14eef..5d043d2bc7 100644 --- a/submodules/TelegramUI/Sources/StickerPaneSearchContentNode.swift +++ b/submodules/TelegramUI/Sources/StickerPaneSearchContentNode.swift @@ -19,11 +19,11 @@ import UndoUI final class StickerPaneSearchInteraction { let open: (StickerPackCollectionInfo) -> Void - let install: (StickerPackCollectionInfo, [ItemCollectionItem]) -> Void + let install: (StickerPackCollectionInfo, [ItemCollectionItem], Bool) -> Void let sendSticker: (FileMediaReference, ASDisplayNode, CGRect) -> Void let getItemIsPreviewed: (StickerPackItem) -> Bool - init(open: @escaping (StickerPackCollectionInfo) -> Void, install: @escaping (StickerPackCollectionInfo, [ItemCollectionItem]) -> Void, sendSticker: @escaping (FileMediaReference, ASDisplayNode, CGRect) -> Void, getItemIsPreviewed: @escaping (StickerPackItem) -> Bool) { + init(open: @escaping (StickerPackCollectionInfo) -> Void, install: @escaping (StickerPackCollectionInfo, [ItemCollectionItem], Bool) -> Void, sendSticker: @escaping (FileMediaReference, ASDisplayNode, CGRect) -> Void, getItemIsPreviewed: @escaping (StickerPackItem) -> Bool) { self.open = open self.install = install self.sendSticker = sendSticker @@ -107,7 +107,7 @@ private enum StickerSearchEntry: Identifiable, Comparable { return StickerPaneSearchGlobalItem(account: account, theme: theme, strings: strings, info: info, topItems: topItems, grid: false, topSeparator: topSeparator, installed: installed, unread: false, open: { interaction.open(info) }, install: { - interaction.install(info, topItems) + interaction.install(info, topItems, !installed) }, getItemIsPreviewed: { item in return interaction.getItemIsPreviewed(item) }) @@ -232,87 +232,93 @@ final class StickerPaneSearchContentNode: ASDisplayNode, PaneSearchContentNode { }) strongSelf.controllerInteraction.presentController(controller, nil) } - }, install: { [weak self] info, items in + }, install: { [weak self] info, items, install in guard let strongSelf = self else { return } let account = strongSelf.context.account - var installSignal = loadedStickerPack(postbox: strongSelf.context.account.postbox, network: strongSelf.context.account.network, reference: .id(id: info.id.id, accessHash: info.accessHash), forceActualized: false) - |> mapToSignal { result -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem]), NoError> in - switch result { - case let .result(info, items, installed): - if installed { - return .complete() - } else { - return preloadedStickerPackThumbnail(account: account, info: info, items: items) - |> filter { $0 } - |> ignoreValues - |> then( - addStickerPackInteractively(postbox: strongSelf.context.account.postbox, info: info, items: items) - |> ignoreValues - ) - |> mapToSignal { _ -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem]), NoError> in + if install { + var installSignal = loadedStickerPack(postbox: strongSelf.context.account.postbox, network: strongSelf.context.account.network, reference: .id(id: info.id.id, accessHash: info.accessHash), forceActualized: false) + |> mapToSignal { result -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem]), NoError> in + switch result { + case let .result(info, items, installed): + if installed { return .complete() + } else { + return preloadedStickerPackThumbnail(account: account, info: info, items: items) + |> filter { $0 } + |> ignoreValues + |> then( + addStickerPackInteractively(postbox: strongSelf.context.account.postbox, info: info, items: items) + |> ignoreValues + ) + |> mapToSignal { _ -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem]), NoError> in + return .complete() + } + |> then(.single((info, items))) } - |> then(.single((info, items))) + case .fetching: + break + case .none: + break } - case .fetching: - break - case .none: - break + return .complete() } - return .complete() - } - |> deliverOnMainQueue - - let context = strongSelf.context - var cancelImpl: (() -> Void)? - let progressSignal = Signal { subscriber in - let presentationData = context.sharedContext.currentPresentationData.with { $0 } - let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: { - cancelImpl?() - })) - self?.controllerInteraction.presentController(controller, nil) - return ActionDisposable { [weak controller] in - Queue.mainQueue().async() { - controller?.dismiss() - } - } - } - |> runOn(Queue.mainQueue()) - |> delay(0.12, queue: Queue.mainQueue()) - let progressDisposable = progressSignal.start() - - installSignal = installSignal - |> afterDisposed { - Queue.mainQueue().async { - progressDisposable.dispose() - } - } - cancelImpl = { - self?.installDisposable.set(nil) - } + |> deliverOnMainQueue - strongSelf.installDisposable.set(installSignal.start(next: { info, items in - guard let strongSelf = self else { - return - } - - var animateInAsReplacement = false - if let navigationController = strongSelf.controllerInteraction.navigationController() { - for controller in navigationController.overlayControllers { - if let controller = controller as? UndoOverlayController { - controller.dismissWithCommitActionAndReplacementAnimation() - animateInAsReplacement = true + let context = strongSelf.context + var cancelImpl: (() -> Void)? + let progressSignal = Signal { subscriber in + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: { + cancelImpl?() + })) + self?.controllerInteraction.presentController(controller, nil) + return ActionDisposable { [weak controller] in + Queue.mainQueue().async() { + controller?.dismiss() } } } + |> runOn(Queue.mainQueue()) + |> delay(0.12, queue: Queue.mainQueue()) + let progressDisposable = progressSignal.start() - let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 } - strongSelf.controllerInteraction.navigationController()?.presentOverlay(controller: UndoOverlayController(presentationData: presentationData, content: .stickersModified(title: presentationData.strings.StickerPackActionInfo_AddedTitle, text: presentationData.strings.StickerPackActionInfo_AddedText(info.title).0, undo: false, info: info, topItem: items.first, account: strongSelf.context.account), elevatedLayout: false, animateInAsReplacement: animateInAsReplacement, action: { _ in - return true + installSignal = installSignal + |> afterDisposed { + Queue.mainQueue().async { + progressDisposable.dispose() + } + } + cancelImpl = { + self?.installDisposable.set(nil) + } + + strongSelf.installDisposable.set(installSignal.start(next: { info, items in + guard let strongSelf = self else { + return + } + + var animateInAsReplacement = false + if let navigationController = strongSelf.controllerInteraction.navigationController() { + for controller in navigationController.overlayControllers { + if let controller = controller as? UndoOverlayController { + controller.dismissWithCommitActionAndReplacementAnimation() + animateInAsReplacement = true + } + } + } + + let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 } + strongSelf.controllerInteraction.navigationController()?.presentOverlay(controller: UndoOverlayController(presentationData: presentationData, content: .stickersModified(title: presentationData.strings.StickerPackActionInfo_AddedTitle, text: presentationData.strings.StickerPackActionInfo_AddedText(info.title).0, undo: false, info: info, topItem: items.first, account: strongSelf.context.account), elevatedLayout: false, animateInAsReplacement: animateInAsReplacement, action: { _ in + return true + })) })) - })) + } else { + let _ = (removeStickerPackInteractively(postbox: account.postbox, id: info.id, option: .delete) + |> deliverOnMainQueue).start(next: { _ in + }) + } }, sendSticker: { [weak self] file, sourceNode, sourceRect in if let strongSelf = self { let _ = strongSelf.controllerInteraction.sendSticker(file, false, sourceNode, sourceRect) diff --git a/submodules/TelegramUI/Sources/StickerPaneSearchGlobaltem.swift b/submodules/TelegramUI/Sources/StickerPaneSearchGlobaltem.swift index b6041c4349..d37c75ba0b 100644 --- a/submodules/TelegramUI/Sources/StickerPaneSearchGlobaltem.swift +++ b/submodules/TelegramUI/Sources/StickerPaneSearchGlobaltem.swift @@ -205,13 +205,12 @@ class StickerPaneSearchGlobalItemNode: GridItemNode { self.updatePreviewing(animated: false) } - override func layout() { - super.layout() + override func updateLayout(item: GridItem, size: CGSize, isVisible: Bool, synchronousLoads: Bool) { guard let item = self.item else { return } - let params = ListViewItemLayoutParams(width: self.bounds.size.width, leftInset: 0.0, rightInset: 0.0, availableHeight: self.bounds.height) + let params = ListViewItemLayoutParams(width: size.width, leftInset: 0.0, rightInset: 0.0, availableHeight: size.height) var topOffset: CGFloat = 12.0 if item.topSeparator { @@ -230,15 +229,19 @@ class StickerPaneSearchGlobalItemNode: GridItemNode { self.appliedItem = item var updateButtonBackgroundImage: UIImage? - if currentItem?.theme !== item.theme { - updateButtonBackgroundImage = PresentationResourcesChat.chatInputMediaPanelAddPackButtonImage(item.theme) + if currentItem?.theme !== item.theme || currentItem?.installed != item.installed { + if item.installed { + updateButtonBackgroundImage = PresentationResourcesChat.chatInputMediaPanelAddedPackButtonImage(item.theme) + } else { + updateButtonBackgroundImage = PresentationResourcesChat.chatInputMediaPanelAddPackButtonImage(item.theme) + } } let unreadImage = PresentationResourcesItemList.stickerUnreadDotImage(item.theme) let leftInset: CGFloat = 14.0 let rightInset: CGFloat = 16.0 - let (installLayout, installApply) = makeInstallLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.strings.Stickers_Install, font: buttonFont, textColor: item.theme.list.itemCheckColors.foregroundColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - params.leftInset - params.rightInset - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) + let (installLayout, installApply) = makeInstallLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.installed ? item.strings.Stickers_Installed : item.strings.Stickers_Install, font: buttonFont, textColor: item.installed ? item.theme.list.itemCheckColors.fillColor : item.theme.list.itemCheckColors.foregroundColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - params.leftInset - params.rightInset - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let (titleLayout, titleApply) = makeTitleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: item.info.title, font: titleFont, textColor: item.theme.list.itemPrimaryTextColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - params.leftInset - params.rightInset - leftInset - rightInset - 20.0 - installLayout.size.width, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) @@ -260,21 +263,15 @@ class StickerPaneSearchGlobalItemNode: GridItemNode { strongSelf.installTextNode.frame = CGRect(origin: CGPoint(x: buttonFrame.minX + floor((buttonFrame.width - installLayout.size.width) / 2.0), y: buttonFrame.minY + floor((buttonFrame.height - installLayout.size.height) / 2.0) + 1.0), size: installLayout.size) strongSelf.installButtonNode.frame = buttonFrame - if item.installed { - strongSelf.installButtonNode.isHidden = true - strongSelf.installBackgroundNode.isHidden = true - strongSelf.installTextNode.isHidden = true - } else { - strongSelf.installButtonNode.isHidden = false - strongSelf.installBackgroundNode.isHidden = false - strongSelf.installTextNode.isHidden = false - } + strongSelf.installButtonNode.isHidden = false + strongSelf.installBackgroundNode.isHidden = false + strongSelf.installTextNode.isHidden = false let titleFrame = CGRect(origin: CGPoint(x: params.leftInset + leftInset, y: 2.0 + topOffset), size: titleLayout.size) strongSelf.titleNode.frame = titleFrame strongSelf.descriptionNode.frame = CGRect(origin: CGPoint(x: params.leftInset + leftInset, y: 23.0 + topOffset), size: descriptionLayout.size) - if false && item.unread { + if item.unread { strongSelf.unreadNode.isHidden = false } else { strongSelf.unreadNode.isHidden = true @@ -309,7 +306,7 @@ class StickerPaneSearchGlobalItemNode: GridItemNode { strongSelf.addSubnode(node) } if file.fileId != node.file?.fileId { - node.setup(account: item.account, item: topItems[i], itemSize: itemSize, synchronousLoads: false) + node.setup(account: item.account, item: topItems[i], itemSize: itemSize, synchronousLoads: synchronousLoads) } if let dimensions = file.dimensions { let imageSize = dimensions.cgSize.aspectFitted(itemSize) diff --git a/submodules/WebSearchUI/Sources/WebSearchNavigationContentNode.swift b/submodules/WebSearchUI/Sources/WebSearchNavigationContentNode.swift index a50bd0b118..ef18cec92e 100644 --- a/submodules/WebSearchUI/Sources/WebSearchNavigationContentNode.swift +++ b/submodules/WebSearchUI/Sources/WebSearchNavigationContentNode.swift @@ -33,7 +33,7 @@ final class WebSearchNavigationContentNode: NavigationBarContentNode { self.searchBar.textReturned = { [weak self] query in self?.queryUpdated?(query) } - self.searchBar.textUpdated = { [weak self] query in + self.searchBar.textUpdated = { [weak self] query, _ in if query.isEmpty { self?.queryUpdated?(query) }