diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 6b88380a9d..337a3fdeb7 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -5813,3 +5813,5 @@ Any member of this group will be able to see messages in the channel."; "Channel.CommentsGroup.HeaderGroupSet" = "%@ is linking the group as it's discussion board."; "RepliesChat.DescriptionText" = "This chat helps you keep track of replies to your comments in Channels."; + +"Channel.DiscussionMessageUnavailable" = "Sorry, this post has been removed from the discussion group."; diff --git a/submodules/AnimatedCountLabelNode/Sources/AnimatedCountLabelNode.swift b/submodules/AnimatedCountLabelNode/Sources/AnimatedCountLabelNode.swift index 96862e70f1..ecd7fb8d6d 100644 --- a/submodules/AnimatedCountLabelNode/Sources/AnimatedCountLabelNode.swift +++ b/submodules/AnimatedCountLabelNode/Sources/AnimatedCountLabelNode.swift @@ -10,11 +10,6 @@ public class AnimatedCountLabelNode: ASDisplayNode { } public enum Segment: Equatable { - public enum Key: Hashable { - case number - case text(Int) - } - case number(Int, NSAttributedString) case text(Int, NSAttributedString) @@ -34,10 +29,37 @@ public class AnimatedCountLabelNode: ASDisplayNode { } } } + } + + fileprivate enum ResolvedSegment: Equatable { + public enum Key: Hashable { + case number(Int) + case text(Int) + } + + case number(id: Int, value: Int, string: NSAttributedString) + case text(id: Int, string: NSAttributedString) + + public static func ==(lhs: ResolvedSegment, rhs: ResolvedSegment) -> Bool { + switch lhs { + case let .number(id, number, text): + if case let .number(rhsId, rhsNumber, rhsText) = rhs, id == rhsId, number == rhsNumber, text.isEqual(to: rhsText) { + return true + } else { + return false + } + case let .text(index, text): + if case let .text(rhsIndex, rhsText) = rhs, index == rhsIndex, text.isEqual(to: rhsText) { + return true + } else { + return false + } + } + } public var attributedText: NSAttributedString { switch self { - case let .number(_, text): + case let .number(_, _, text): return text case let .text(_, text): return text @@ -46,28 +68,53 @@ public class AnimatedCountLabelNode: ASDisplayNode { var key: Key { switch self { - case .number: - return .number + case let .number(id, _, _): + return .number(id) case let .text(index, _): return .text(index) } } } - fileprivate var resolvedSegments: [Segment.Key: (Segment, TextNode)] = [:] + fileprivate var resolvedSegments: [ResolvedSegment.Key: (ResolvedSegment, TextNode)] = [:] override public init() { super.init() } public func asyncLayout() -> (CGSize, [Segment]) -> (Layout, (Bool) -> Void) { - var segmentLayouts: [Segment.Key: (TextNodeLayoutArguments) -> (TextNodeLayout, () -> TextNode)] = [:] + var segmentLayouts: [ResolvedSegment.Key: (TextNodeLayoutArguments) -> (TextNodeLayout, () -> TextNode)] = [:] let wasEmpty = self.resolvedSegments.isEmpty for (segmentKey, segmentAndTextNode) in self.resolvedSegments { segmentLayouts[segmentKey] = TextNode.asyncLayout(segmentAndTextNode.1) } - return { [weak self] size, segments in + return { [weak self] size, initialSegments in + var segments: [ResolvedSegment] = [] + loop: for segment in initialSegments { + switch segment { + case let .number(value, string): + if string.string.isEmpty { + continue loop + } + let attributes = string.attributes(at: 0, longestEffectiveRange: nil, in: NSRange(location: 0, length: 1)) + + var remainingValue = value + + while true { + let digitValue = remainingValue % 10 + + segments.insert(.number(id: 1000 - segments.count, value: value, string: NSAttributedString(string: "\(digitValue)", attributes: attributes)), at: 0) + remainingValue /= 10 + if remainingValue == 0 { + break + } + } + case let .text(id, string): + segments.append(.text(id: id, string: string)) + } + } + for segment in segments { if segmentLayouts[segment.key] == nil { segmentLayouts[segment.key] = TextNode.asyncLayout(nil) @@ -77,17 +124,17 @@ public class AnimatedCountLabelNode: ASDisplayNode { var contentSize = CGSize() var remainingSize = size - var calculatedSegments: [Segment.Key: (TextNodeLayout, CGFloat, () -> TextNode)] = [:] + var calculatedSegments: [ResolvedSegment.Key: (TextNodeLayout, CGFloat, () -> TextNode)] = [:] var isTruncated = false - var validKeys: [Segment.Key] = [] + var validKeys: [ResolvedSegment.Key] = [] for segment in segments { validKeys.append(segment.key) let (layout, apply) = segmentLayouts[segment.key]!(TextNodeLayoutArguments(attributedString: segment.attributedText, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: remainingSize, alignment: .left, lineSpacing: 0.0, cutout: nil, insets: UIEdgeInsets(), lineColor: nil, textShadowColor: nil, textStroke: nil)) var effectiveSegmentWidth = layout.size.width if case .number = segment { - effectiveSegmentWidth = ceil(effectiveSegmentWidth / 2.0) * 2.0 + //effectiveSegmentWidth = ceil(effectiveSegmentWidth / 2.0) * 2.0 } else if segment.attributedText.string == " " { effectiveSegmentWidth = max(effectiveSegmentWidth, 4.0) } @@ -115,7 +162,7 @@ public class AnimatedCountLabelNode: ASDisplayNode { for segment in segments { var animation: (CGFloat, Double)? if let (currentSegment, currentTextNode) = strongSelf.resolvedSegments[segment.key] { - if case let .number(currentValue, _) = currentSegment, case let .number(updatedValue, _) = segment, animated, !wasEmpty, currentValue != updatedValue, let snapshot = currentTextNode.layer.snapshotContentTree() { + if case let .number(_, currentValue, currentString) = currentSegment, case let .number(_, updatedValue, updatedString) = segment, animated, !wasEmpty, currentValue != updatedValue, currentString.string != updatedString.string, let snapshot = currentTextNode.layer.snapshotContentTree() { let offsetY: CGFloat if currentValue > updatedValue { offsetY = -floor(currentTextNode.bounds.height * 0.6) @@ -164,7 +211,7 @@ public class AnimatedCountLabelNode: ASDisplayNode { strongSelf.resolvedSegments[segment.key] = (segment, textNode) } - var removeKeys: [Segment.Key] = [] + var removeKeys: [ResolvedSegment.Key] = [] for key in strongSelf.resolvedSegments.keys { if !validKeys.contains(key) { removeKeys.append(key) diff --git a/submodules/AppLock/Sources/AppLock.swift b/submodules/AppLock/Sources/AppLock.swift index 112873aac4..b771fc82de 100644 --- a/submodules/AppLock/Sources/AppLock.swift +++ b/submodules/AppLock/Sources/AppLock.swift @@ -37,8 +37,6 @@ private func isLocked(passcodeSettings: PresentationPasscodeSettings, state: Loc } private func getCoveringViewSnaphot(window: Window1) -> UIImage? { - print("getCoveringViewSnaphot") - let scale: CGFloat = 0.5 let unscaledSize = window.hostView.containerView.frame.size return generateImage(CGSize(width: floor(unscaledSize.width * scale), height: floor(unscaledSize.height * scale)), rotatedContext: { size, context in diff --git a/submodules/MtProtoKit/Sources/MTContext.m b/submodules/MtProtoKit/Sources/MTContext.m index cbe6a136bd..e84716e92a 100644 --- a/submodules/MtProtoKit/Sources/MTContext.m +++ b/submodules/MtProtoKit/Sources/MTContext.m @@ -229,6 +229,7 @@ static int32_t fixedTimeDifferenceValue = 0; _useTempAuthKeys = useTempAuthKeys; #if DEBUG _tempKeyExpiration = 1 * 60 * 60; + _tempKeyExpiration = 5; #else _tempKeyExpiration = 24 * 60 * 60; #endif @@ -380,12 +381,12 @@ static int32_t fixedTimeDifferenceValue = 0; if (datacenterAuthInfoById != nil) { _datacenterAuthInfoById = [[NSMutableDictionary alloc] initWithDictionary:datacenterAuthInfoById]; #if DEBUG - /*NSArray *keys = [_datacenterAuthInfoById allKeys]; + NSArray *keys = [_datacenterAuthInfoById allKeys]; for (NSNumber *key in keys) { if (parseAuthInfoMapKeyInteger(key).selector != MTDatacenterAuthInfoSelectorPersistent) { [_datacenterAuthInfoById removeObjectForKey:key]; } - }*/ + } #endif } diff --git a/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m b/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m index e9d94c678b..22aaf5d07d 100644 --- a/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m +++ b/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m @@ -402,7 +402,13 @@ typedef enum { arc4random_buf(&random, 1); [dataWithHash appendBytes:&random length:1]; } + #if DEBUG + assert(dataWithHash.length == 255); + #endif NSData *encryptedData = MTRsaEncrypt(_encryptionProvider, [publicKey objectForKey:@"key"], dataWithHash); + if (MTLogEnabled()) { + MTLog(@"[MTDatacenterAuthMessageService#%p encryptedData.length = %d]", self, encryptedData.length); + } if (encryptedData.length < 256) { NSMutableData *newEncryptedData = [[NSMutableData alloc] init]; @@ -415,6 +421,9 @@ typedef enum { [newEncryptedData appendData:encryptedData]; encryptedData = newEncryptedData; } + #if DEBUG + assert(encryptedData.length == 256); + #endif _dhEncryptedData = encryptedData; } else { diff --git a/submodules/TelegramCore/Sources/ReplyThreadHistory.swift b/submodules/TelegramCore/Sources/ReplyThreadHistory.swift index 477b4d7652..d35538ba1f 100644 --- a/submodules/TelegramCore/Sources/ReplyThreadHistory.swift +++ b/submodules/TelegramCore/Sources/ReplyThreadHistory.swift @@ -6,6 +6,7 @@ import TelegramApi private struct DiscussionMessage { public var messageId: MessageId + public var channelMessageId: MessageId? public var isChannelPost: Bool public var maxMessage: MessageId? public var maxReadIncomingMessageId: MessageId? @@ -143,6 +144,14 @@ private class ReplyThreadHistoryContextImpl { return .fail(.generic) } + var channelMessageId: MessageId? + for attribute in topMessage.attributes { + if let attribute = attribute as? SourceReferenceMessageAttribute { + channelMessageId = attribute.messageId + break + } + } + var peers: [Peer] = [] var peerPresences: [PeerId: PeerPresence] = [:] @@ -188,6 +197,7 @@ private class ReplyThreadHistoryContextImpl { return .single(DiscussionMessage( messageId: parsedIndex.id, + channelMessageId: channelMessageId, isChannelPost: isChannelPost, maxMessage: resolvedMaxMessage, maxReadIncomingMessageId: readInboxMaxId.flatMap { readMaxId in @@ -388,6 +398,7 @@ public struct ChatReplyThreadMessage: Equatable { } public var messageId: MessageId + public var channelMessageId: MessageId? public var isChannelPost: Bool public var maxMessage: MessageId? public var maxReadIncomingMessageId: MessageId? @@ -396,8 +407,9 @@ public struct ChatReplyThreadMessage: Equatable { public var initialAnchor: Anchor public var isNotAvailable: Bool - fileprivate init(messageId: MessageId, isChannelPost: Bool, maxMessage: MessageId?, maxReadIncomingMessageId: MessageId?, maxReadOutgoingMessageId: MessageId?, initialFilledHoles: IndexSet, initialAnchor: Anchor, isNotAvailable: Bool) { + fileprivate init(messageId: MessageId, channelMessageId: MessageId?, isChannelPost: Bool, maxMessage: MessageId?, maxReadIncomingMessageId: MessageId?, maxReadOutgoingMessageId: MessageId?, initialFilledHoles: IndexSet, initialAnchor: Anchor, isNotAvailable: Bool) { self.messageId = messageId + self.channelMessageId = channelMessageId self.isChannelPost = isChannelPost self.maxMessage = maxMessage self.maxReadIncomingMessageId = maxReadIncomingMessageId @@ -445,6 +457,14 @@ public func fetchChannelReplyThreadMessage(account: Account, messageId: MessageI return nil } + var channelMessageId: MessageId? + for attribute in topMessage.attributes { + if let attribute = attribute as? SourceReferenceMessageAttribute { + channelMessageId = attribute.messageId + break + } + } + var peers: [Peer] = [] var peerPresences: [PeerId: PeerPresence] = [:] @@ -490,6 +510,7 @@ public func fetchChannelReplyThreadMessage(account: Account, messageId: MessageI return DiscussionMessage( messageId: parsedIndex.id, + channelMessageId: channelMessageId, isChannelPost: isChannelPost, maxMessage: resolvedMaxMessage, maxReadIncomingMessageId: readInboxMaxId.flatMap { readMaxId in @@ -530,6 +551,7 @@ public func fetchChannelReplyThreadMessage(account: Account, messageId: MessageI return DiscussionMessage( messageId: discussionMessageId, + channelMessageId: messageId, isChannelPost: true, maxMessage: replyInfo.maxMessageId, maxReadIncomingMessageId: replyInfo.maxReadIncomingMessageId, @@ -730,6 +752,7 @@ public func fetchChannelReplyThreadMessage(account: Account, messageId: MessageI return .single(ChatReplyThreadMessage( messageId: discussionMessage.messageId, + channelMessageId: discussionMessage.channelMessageId, isChannelPost: discussionMessage.isChannelPost, maxMessage: discussionMessage.maxMessage, maxReadIncomingMessageId: discussionMessage.maxReadIncomingMessageId, diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index 429101fc0a..c34a0efba7 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -4742,1040 +4742,1041 @@ public final class PresentationStrings: Equatable { public func Wallet_Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4280]!, self._r[4280]!, [_1, _2, _3]) } - public var GroupInfo_ActionPromote: String { return self._s[4281]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4282]! } + public var Channel_DiscussionMessageUnavailable: String { return self._s[4281]! } + public var GroupInfo_ActionPromote: String { return self._s[4282]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4283]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4283]!, self._r[4283]!, [_0]) + return formatWithArgumentRanges(self._s[4284]!, self._r[4284]!, [_0]) } - public var VoiceOver_Chat_Reply: String { return self._s[4284]! } - public var Month_GenMay: String { return self._s[4285]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4286]! } - public var Chat_PsaTooltip_covid: String { return self._s[4287]! } - public var Watch_Suggestion_CantTalk: String { return self._s[4288]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4289]! } - public var AppUpgrade_Running: String { return self._s[4290]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4293]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4294]! } - public var SharedMedia_EmptyText: String { return self._s[4295]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[4296]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4297]! } - public var Message_PinnedGame: String { return self._s[4298]! } - public var KeyCommand_SearchInChat: String { return self._s[4299]! } - public var Appearance_ThemeCarouselNewNight: String { return self._s[4300]! } - public var ChatList_Search_FilterMedia: String { return self._s[4301]! } - public var Message_PinnedAudioMessage: String { return self._s[4302]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[4303]! } + public var VoiceOver_Chat_Reply: String { return self._s[4285]! } + public var Month_GenMay: String { return self._s[4286]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4287]! } + public var Chat_PsaTooltip_covid: String { return self._s[4288]! } + public var Watch_Suggestion_CantTalk: String { return self._s[4289]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4290]! } + public var AppUpgrade_Running: String { return self._s[4291]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4294]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4295]! } + public var SharedMedia_EmptyText: String { return self._s[4296]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[4297]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4298]! } + public var Message_PinnedGame: String { return self._s[4299]! } + public var KeyCommand_SearchInChat: String { return self._s[4300]! } + public var Appearance_ThemeCarouselNewNight: String { return self._s[4301]! } + public var ChatList_Search_FilterMedia: String { return self._s[4302]! } + public var Message_PinnedAudioMessage: String { return self._s[4303]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[4304]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4304]!, self._r[4304]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4305]!, self._r[4305]!, [_1, _2]) } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4305]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4306]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4306]!, self._r[4306]!, [_0]) + return formatWithArgumentRanges(self._s[4307]!, self._r[4307]!, [_0]) } - public var Wallet_Receive_AddressCopied: String { return self._s[4307]! } + public var Wallet_Receive_AddressCopied: String { return self._s[4308]! } public func Message_PinnedTextMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4308]!, self._r[4308]!, [_0]) + return formatWithArgumentRanges(self._s[4309]!, self._r[4309]!, [_0]) } - public var Settings_AddAccount: String { return self._s[4309]! } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4310]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4311]! } - public var Channel_JoinChannel: String { return self._s[4312]! } - public var Watch_UserInfo_Unblock: String { return self._s[4313]! } - public var PhoneLabel_Title: String { return self._s[4314]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[4316]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4317]! } + public var Settings_AddAccount: String { return self._s[4310]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4311]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4312]! } + public var Channel_JoinChannel: String { return self._s[4313]! } + public var Watch_UserInfo_Unblock: String { return self._s[4314]! } + public var PhoneLabel_Title: String { return self._s[4315]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[4317]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4318]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4318]!, self._r[4318]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[4319]!, self._r[4319]!, [_1, _2, _3, _4, _5, _6]) } - public var Wallet_Month_GenOctober: String { return self._s[4319]! } - public var Channel_AddBotErrorHaveRights: String { return self._s[4320]! } - public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4321]! } - public var DialogList_EncryptionProcessing: String { return self._s[4322]! } - public var ChatList_Search_FilterChats: String { return self._s[4323]! } - public var WatchRemote_NotificationText: String { return self._s[4324]! } - public var EditTheme_ChangeColors: String { return self._s[4325]! } - public var GroupRemoved_ViewUserInfo: String { return self._s[4326]! } - public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[4327]! } - public var CallSettings_OnMobile: String { return self._s[4329]! } - public var Month_ShortFebruary: String { return self._s[4331]! } - public var VoiceOver_MessageContextReply: String { return self._s[4332]! } + public var Wallet_Month_GenOctober: String { return self._s[4320]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[4321]! } + public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4322]! } + public var DialogList_EncryptionProcessing: String { return self._s[4323]! } + public var ChatList_Search_FilterChats: String { return self._s[4324]! } + public var WatchRemote_NotificationText: String { return self._s[4325]! } + public var EditTheme_ChangeColors: String { return self._s[4326]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[4327]! } + public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[4328]! } + public var CallSettings_OnMobile: String { return self._s[4330]! } + public var Month_ShortFebruary: String { return self._s[4332]! } + public var VoiceOver_MessageContextReply: String { return self._s[4333]! } public func PUSH_VIDEO_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4333]!, self._r[4333]!, [_1]) + return formatWithArgumentRanges(self._s[4334]!, self._r[4334]!, [_1]) } - public var Group_Location_ChangeLocation: String { return self._s[4334]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4335]! } - public var Wallet_Send_EncryptComment: String { return self._s[4336]! } - public var VoiceOver_Media_PlaybackStop: String { return self._s[4337]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4338]! } + public var Group_Location_ChangeLocation: String { return self._s[4335]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4336]! } + public var Wallet_Send_EncryptComment: String { return self._s[4337]! } + public var VoiceOver_Media_PlaybackStop: String { return self._s[4338]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4339]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4340]!, self._r[4340]!, [_0]) + return formatWithArgumentRanges(self._s[4341]!, self._r[4341]!, [_0]) } - public var PhotoEditor_WarmthTool: String { return self._s[4341]! } - public var Login_InfoAvatarPhoto: String { return self._s[4342]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4343]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4344]! } - public var Map_PlacesInThisArea: String { return self._s[4345]! } - public var VoiceOver_Chat_ContactEmail: String { return self._s[4346]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[4347]! } + public var PhotoEditor_WarmthTool: String { return self._s[4342]! } + public var Login_InfoAvatarPhoto: String { return self._s[4343]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4344]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4345]! } + public var Map_PlacesInThisArea: String { return self._s[4346]! } + public var VoiceOver_Chat_ContactEmail: String { return self._s[4347]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[4348]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4348]!, self._r[4348]!, [_1]) + return formatWithArgumentRanges(self._s[4349]!, self._r[4349]!, [_1]) } - public var ShareMenu_Send: String { return self._s[4349]! } - public var Username_InvalidStartsWithNumber: String { return self._s[4350]! } - public var Appearance_AppIconClassicX: String { return self._s[4351]! } + public var ShareMenu_Send: String { return self._s[4350]! } + public var Username_InvalidStartsWithNumber: String { return self._s[4351]! } + public var Appearance_AppIconClassicX: String { return self._s[4352]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4352]!, self._r[4352]!, [_1]) + return formatWithArgumentRanges(self._s[4353]!, self._r[4353]!, [_1]) } - public var Conversation_StopPoll: String { return self._s[4353]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4355]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[4356]! } - public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4357]! } - public var Wallet_WordCheck_Title: String { return self._s[4358]! } - public var Conversation_Timer_Title: String { return self._s[4359]! } - public var Common_Next: String { return self._s[4360]! } - public var Notification_Exceptions_NewException: String { return self._s[4361]! } + public var Conversation_StopPoll: String { return self._s[4354]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4356]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[4357]! } + public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4358]! } + public var Wallet_WordCheck_Title: String { return self._s[4359]! } + public var Conversation_Timer_Title: String { return self._s[4360]! } + public var Common_Next: String { return self._s[4361]! } + public var Notification_Exceptions_NewException: String { return self._s[4362]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4362]!, self._r[4362]!, [_0]) + return formatWithArgumentRanges(self._s[4363]!, self._r[4363]!, [_0]) } - public var AccessDenied_CallMicrophone: String { return self._s[4363]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4364]! } - public var ChangePhoneNumberCode_Help: String { return self._s[4365]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4366]! } - public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4367]! } - public var BlockedUsers_LeavePrefix: String { return self._s[4368]! } + public var AccessDenied_CallMicrophone: String { return self._s[4364]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4365]! } + public var ChangePhoneNumberCode_Help: String { return self._s[4366]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4367]! } + public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4368]! } + public var BlockedUsers_LeavePrefix: String { return self._s[4369]! } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4369]!, self._r[4369]!, [_0]) + return formatWithArgumentRanges(self._s[4370]!, self._r[4370]!, [_0]) } - public var Group_About_Help: String { return self._s[4370]! } - public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4371]! } - public var Tour_Title3: String { return self._s[4372]! } - public var Watch_Conversation_Unblock: String { return self._s[4373]! } - public var Watch_UserInfo_Block: String { return self._s[4374]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[4375]! } - public var TwoFactorSetup_Hint_Action: String { return self._s[4376]! } - public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4377]! } - public var Wallet_Alert_Cancel: String { return self._s[4378]! } - public var TextFormat_AddLinkTitle: String { return self._s[4379]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4380]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4381]! } - public var FastTwoStepSetup_PasswordSection: String { return self._s[4382]! } - public var Compose_ChannelMembers: String { return self._s[4383]! } - public var Conversation_ForwardTitle: String { return self._s[4384]! } + public var Group_About_Help: String { return self._s[4371]! } + public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4372]! } + public var Tour_Title3: String { return self._s[4373]! } + public var Watch_Conversation_Unblock: String { return self._s[4374]! } + public var Watch_UserInfo_Block: String { return self._s[4375]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[4376]! } + public var TwoFactorSetup_Hint_Action: String { return self._s[4377]! } + public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4378]! } + public var Wallet_Alert_Cancel: String { return self._s[4379]! } + public var TextFormat_AddLinkTitle: String { return self._s[4380]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4381]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4382]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[4383]! } + public var Compose_ChannelMembers: String { return self._s[4384]! } + public var Conversation_ForwardTitle: String { return self._s[4385]! } public func Wallet_Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4385]!, self._r[4385]!, [_0]) + return formatWithArgumentRanges(self._s[4386]!, self._r[4386]!, [_0]) } - public var Conversation_PinnedPoll: String { return self._s[4387]! } + public var Conversation_PinnedPoll: String { return self._s[4388]! } public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4388]!, self._r[4388]!, [_0]) + return formatWithArgumentRanges(self._s[4389]!, self._r[4389]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4389]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4390]! } - public var Stats_Overview: String { return self._s[4391]! } - public var Map_HomeAndWorkTitle: String { return self._s[4392]! } - public var Wallet_Intro_Terms: String { return self._s[4393]! } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4390]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4391]! } + public var Stats_Overview: String { return self._s[4392]! } + public var Map_HomeAndWorkTitle: String { return self._s[4393]! } + public var Wallet_Intro_Terms: String { return self._s[4394]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4394]!, self._r[4394]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4395]!, self._r[4395]!, [_1, _2, _3]) } - public var Passport_Address_CityPlaceholder: String { return self._s[4395]! } - public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4396]! } - public var Privacy_PhoneNumber: String { return self._s[4397]! } - public var ChatList_Search_FilterFiles: String { return self._s[4398]! } - public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4399]! } - public var ChannelIntro_CreateChannel: String { return self._s[4400]! } - public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4401]! } + public var Passport_Address_CityPlaceholder: String { return self._s[4396]! } + public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4397]! } + public var Privacy_PhoneNumber: String { return self._s[4398]! } + public var ChatList_Search_FilterFiles: String { return self._s[4399]! } + public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4400]! } + public var ChannelIntro_CreateChannel: String { return self._s[4401]! } + public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4402]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4402]!, self._r[4402]!, [_0]) + return formatWithArgumentRanges(self._s[4403]!, self._r[4403]!, [_0]) } - public var Weekday_ShortMonday: String { return self._s[4403]! } - public var Passport_Language_ar: String { return self._s[4405]! } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4406]! } - public var TwoFactorSetup_Done_Title: String { return self._s[4407]! } - public var Calls_RatingFeedback: String { return self._s[4408]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4409]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[4412]! } - public var Watch_Compose_Send: String { return self._s[4413]! } - public var PasscodeSettings_ChangePasscode: String { return self._s[4414]! } - public var WebSearch_RecentSectionClear: String { return self._s[4415]! } + public var Weekday_ShortMonday: String { return self._s[4404]! } + public var Passport_Language_ar: String { return self._s[4406]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4407]! } + public var TwoFactorSetup_Done_Title: String { return self._s[4408]! } + public var Calls_RatingFeedback: String { return self._s[4409]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4410]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[4413]! } + public var Watch_Compose_Send: String { return self._s[4414]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[4415]! } + public var WebSearch_RecentSectionClear: String { return self._s[4416]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4416]!, self._r[4416]!, [_0]) + return formatWithArgumentRanges(self._s[4417]!, self._r[4417]!, [_0]) } - public var WallpaperSearch_ColorTeal: String { return self._s[4417]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4418]! } - public var Permissions_ContactsTitle_v0: String { return self._s[4419]! } - public var Checkout_PasswordEntry_Pay: String { return self._s[4421]! } - public var Settings_SavedMessages: String { return self._s[4422]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4423]! } - public var Month_ShortMarch: String { return self._s[4424]! } - public var Message_Location: String { return self._s[4425]! } + public var WallpaperSearch_ColorTeal: String { return self._s[4418]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4419]! } + public var Permissions_ContactsTitle_v0: String { return self._s[4420]! } + public var Checkout_PasswordEntry_Pay: String { return self._s[4422]! } + public var Settings_SavedMessages: String { return self._s[4423]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4424]! } + public var Month_ShortMarch: String { return self._s[4425]! } + public var Message_Location: String { return self._s[4426]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4426]!, self._r[4426]!, [_1]) + return formatWithArgumentRanges(self._s[4427]!, self._r[4427]!, [_1]) } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4427]!, self._r[4427]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4428]!, self._r[4428]!, [_1, _2]) } - public var VoiceOver_Chat_VoiceMessage: String { return self._s[4429]! } + public var VoiceOver_Chat_VoiceMessage: String { return self._s[4430]! } public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4430]!, self._r[4430]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4431]!, self._r[4431]!, [_1, _2]) } - public var GroupPermission_NoSendMedia: String { return self._s[4431]! } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[4432]! } - public var SharedMedia_CategoryDocs: String { return self._s[4433]! } - public var Appearance_RemoveThemeConfirmation: String { return self._s[4434]! } - public var Paint_Framed: String { return self._s[4435]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4436]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[4437]! } - public var Channel_SignMessages: String { return self._s[4438]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[4439]! } - public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4440]! } + public var GroupPermission_NoSendMedia: String { return self._s[4432]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[4433]! } + public var SharedMedia_CategoryDocs: String { return self._s[4434]! } + public var Appearance_RemoveThemeConfirmation: String { return self._s[4435]! } + public var Paint_Framed: String { return self._s[4436]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4437]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[4438]! } + public var Channel_SignMessages: String { return self._s[4439]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[4440]! } + public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4441]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4441]!, self._r[4441]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4442]!, self._r[4442]!, [_1, _2]) } - public var GroupInfo_UpgradeButton: String { return self._s[4442]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4443]! } - public var AutoDownloadSettings_Files: String { return self._s[4444]! } + public var GroupInfo_UpgradeButton: String { return self._s[4443]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4444]! } + public var AutoDownloadSettings_Files: String { return self._s[4445]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4445]!, self._r[4445]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4446]!, self._r[4446]!, [_0, _1]) } - public var Login_SendCodeViaSms: String { return self._s[4447]! } - public var Update_UpdateApp: String { return self._s[4448]! } - public var Channel_Setup_TypePublic: String { return self._s[4449]! } - public var Watch_Compose_CreateMessage: String { return self._s[4450]! } + public var Login_SendCodeViaSms: String { return self._s[4448]! } + public var Update_UpdateApp: String { return self._s[4449]! } + public var Channel_Setup_TypePublic: String { return self._s[4450]! } + public var Watch_Compose_CreateMessage: String { return self._s[4451]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4451]!, self._r[4451]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4452]!, self._r[4452]!, [_1, _2, _3]) } - public var StickerPacksSettings_ManagingHelp: String { return self._s[4452]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[4453]! } public func Wallet_Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4453]!, self._r[4453]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4454]!, self._r[4454]!, [_1, _2, _3]) } - public var VoiceOver_Chat_Video: String { return self._s[4454]! } - public var Forward_ChannelReadOnly: String { return self._s[4455]! } - public var StickerPack_HideStickers: String { return self._s[4456]! } - public var ChatListFolder_NameContacts: String { return self._s[4457]! } - public var Profile_BotInfo: String { return self._s[4458]! } - public var Document_TargetConfirmationFormat: String { return self._s[4459]! } - public var GroupInfo_InviteByLink: String { return self._s[4460]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4461]! } - public var Watch_Stickers_RecentPlaceholder: String { return self._s[4462]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[4463]! } - public var Passport_NotLoggedInMessage: String { return self._s[4464]! } - public var Conversation_StopQuizConfirmation: String { return self._s[4465]! } - public var Checkout_PaymentMethod: String { return self._s[4466]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[4470]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4471]! } - public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4472]! } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4473]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4474]! } - public var Camera_Title: String { return self._s[4475]! } - public var Map_Directions: String { return self._s[4476]! } - public var Wallet_Intro_ImportExisting: String { return self._s[4477]! } - public var Stats_MessagePublicForwardsTitle: String { return self._s[4478]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4480]! } - public var Profile_EncryptionKey: String { return self._s[4481]! } + public var VoiceOver_Chat_Video: String { return self._s[4455]! } + public var Forward_ChannelReadOnly: String { return self._s[4456]! } + public var StickerPack_HideStickers: String { return self._s[4457]! } + public var ChatListFolder_NameContacts: String { return self._s[4458]! } + public var Profile_BotInfo: String { return self._s[4459]! } + public var Document_TargetConfirmationFormat: String { return self._s[4460]! } + public var GroupInfo_InviteByLink: String { return self._s[4461]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4462]! } + public var Watch_Stickers_RecentPlaceholder: String { return self._s[4463]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[4464]! } + public var Passport_NotLoggedInMessage: String { return self._s[4465]! } + public var Conversation_StopQuizConfirmation: String { return self._s[4466]! } + public var Checkout_PaymentMethod: String { return self._s[4467]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[4471]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4472]! } + public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4473]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4474]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4475]! } + public var Camera_Title: String { return self._s[4476]! } + public var Map_Directions: String { return self._s[4477]! } + public var Wallet_Intro_ImportExisting: String { return self._s[4478]! } + public var Stats_MessagePublicForwardsTitle: String { return self._s[4479]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4481]! } + public var Profile_EncryptionKey: String { return self._s[4482]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4482]!, self._r[4482]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[4483]!, self._r[4483]!, [_1, "\(_2)"]) } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4483]!, self._r[4483]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4484]!, self._r[4484]!, [_0, _1]) } - public var Passport_Identity_TypePassport: String { return self._s[4484]! } - public var CreatePoll_QuizOptionsHeader: String { return self._s[4486]! } - public var Common_No: String { return self._s[4487]! } - public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4488]! } - public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4489]! } - public var Settings_AboutEmpty: String { return self._s[4490]! } - public var TwoStepAuth_FloodError: String { return self._s[4492]! } - public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4493]! } + public var Passport_Identity_TypePassport: String { return self._s[4485]! } + public var CreatePoll_QuizOptionsHeader: String { return self._s[4487]! } + public var Common_No: String { return self._s[4488]! } + public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4489]! } + public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4490]! } + public var Settings_AboutEmpty: String { return self._s[4491]! } + public var TwoStepAuth_FloodError: String { return self._s[4493]! } + public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4494]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4495]!, self._r[4495]!, [_1]) + return formatWithArgumentRanges(self._s[4496]!, self._r[4496]!, [_1]) } - public var Conversation_Edit: String { return self._s[4498]! } - public var CheckoutInfo_SaveInfo: String { return self._s[4499]! } - public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4500]! } - public var Call_CameraTooltip: String { return self._s[4502]! } - public var InstantPage_FeedbackButtonShort: String { return self._s[4503]! } - public var Contacts_InviteToTelegram: String { return self._s[4504]! } - public var Wallet_WordImport_CanNotRemember: String { return self._s[4505]! } - public var Notifications_ResetAllNotifications: String { return self._s[4506]! } - public var Calls_NewCall: String { return self._s[4507]! } - public var VoiceOver_Chat_Music: String { return self._s[4510]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4511]! } - public var Channel_Edit_AboutItem: String { return self._s[4512]! } - public var Message_VideoExpired: String { return self._s[4513]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4514]! } + public var Conversation_Edit: String { return self._s[4499]! } + public var CheckoutInfo_SaveInfo: String { return self._s[4500]! } + public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4501]! } + public var Call_CameraTooltip: String { return self._s[4503]! } + public var InstantPage_FeedbackButtonShort: String { return self._s[4504]! } + public var Contacts_InviteToTelegram: String { return self._s[4505]! } + public var Wallet_WordImport_CanNotRemember: String { return self._s[4506]! } + public var Notifications_ResetAllNotifications: String { return self._s[4507]! } + public var Calls_NewCall: String { return self._s[4508]! } + public var VoiceOver_Chat_Music: String { return self._s[4511]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4512]! } + public var Channel_Edit_AboutItem: String { return self._s[4513]! } + public var Message_VideoExpired: String { return self._s[4514]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4515]! } public func PUSH_CHAT_RETURNED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4515]!, self._r[4515]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4516]!, self._r[4516]!, [_1, _2]) } - public var NotificationsSound_Input: String { return self._s[4517]! } - public var Notifications_ClassicTones: String { return self._s[4518]! } - public var Conversation_StatusTyping: String { return self._s[4519]! } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4520]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4521]! } - public var Wallet_Month_ShortSeptember: String { return self._s[4522]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4523]! } - public var Conversation_MessageLeaveComment: String { return self._s[4524]! } - public var UserInfo_TapToCall: String { return self._s[4525]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4526]! } - public var Conversation_ClearAll: String { return self._s[4528]! } - public var UserInfo_NotificationsDefault: String { return self._s[4529]! } - public var Wallet_Send_OwnAddressAlertText: String { return self._s[4530]! } - public var Map_ChooseAPlace: String { return self._s[4531]! } + public var NotificationsSound_Input: String { return self._s[4518]! } + public var Notifications_ClassicTones: String { return self._s[4519]! } + public var Conversation_StatusTyping: String { return self._s[4520]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4521]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4522]! } + public var Wallet_Month_ShortSeptember: String { return self._s[4523]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4524]! } + public var Conversation_MessageLeaveComment: String { return self._s[4525]! } + public var UserInfo_TapToCall: String { return self._s[4526]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4527]! } + public var Conversation_ClearAll: String { return self._s[4529]! } + public var UserInfo_NotificationsDefault: String { return self._s[4530]! } + public var Wallet_Send_OwnAddressAlertText: String { return self._s[4531]! } + public var Map_ChooseAPlace: String { return self._s[4532]! } public func Wallet_Receive_ShareInvoiceUrlInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4532]!, self._r[4532]!, [_0]) + return formatWithArgumentRanges(self._s[4533]!, self._r[4533]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[4533]! } - public var ChatList_PeerTypeNonContact: String { return self._s[4534]! } - public var Conversation_SlideToCancel: String { return self._s[4535]! } - public var Month_ShortJuly: String { return self._s[4536]! } - public var SocksProxySetup_ProxyType: String { return self._s[4537]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[4534]! } + public var ChatList_PeerTypeNonContact: String { return self._s[4535]! } + public var Conversation_SlideToCancel: String { return self._s[4536]! } + public var Month_ShortJuly: String { return self._s[4537]! } + public var SocksProxySetup_ProxyType: String { return self._s[4538]! } public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4538]!, self._r[4538]!, [_0]) + return formatWithArgumentRanges(self._s[4539]!, self._r[4539]!, [_0]) } - public var ChatList_EditFolders: String { return self._s[4539]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[4540]! } - public var Wallet_Send_ConfirmationConfirm: String { return self._s[4542]! } - public var Wallet_Created_ExportErrorTitle: String { return self._s[4543]! } + public var ChatList_EditFolders: String { return self._s[4540]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[4541]! } + public var Wallet_Send_ConfirmationConfirm: String { return self._s[4543]! } + public var Wallet_Created_ExportErrorTitle: String { return self._s[4544]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4544]!, self._r[4544]!, [_0]) + return formatWithArgumentRanges(self._s[4545]!, self._r[4545]!, [_0]) } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4545]! } - public var ScheduledMessages_RemindersTitle: String { return self._s[4546]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[4547]! } - public var Wallet_Info_TransactionPendingHeader: String { return self._s[4549]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[4550]! } - public var Passport_DeleteAddress: String { return self._s[4552]! } - public var Passport_DeletePassportConfirmation: String { return self._s[4553]! } - public var Passport_Identity_ReverseSide: String { return self._s[4554]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4555]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[4556]! } - public var Passport_FieldAddress: String { return self._s[4557]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4558]! } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4560]! } - public var Map_Home: String { return self._s[4562]! } - public var PollResults_Title: String { return self._s[4563]! } - public var ArchivedChats_IntroText2: String { return self._s[4565]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4566]! } - public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4567]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[4569]! } - public var Passport_Identity_AddPersonalDetails: String { return self._s[4571]! } - public var Group_Info_AdminLog: String { return self._s[4573]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[4574]! } - public var Appearance_Animations: String { return self._s[4575]! } - public var Appearance_TextSizeSetting: String { return self._s[4576]! } - public func MessageTimer_Weeks(_ value: Int32) -> String { + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4546]! } + public var ScheduledMessages_RemindersTitle: String { return self._s[4547]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[4548]! } + public var Wallet_Info_TransactionPendingHeader: String { return self._s[4550]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[4551]! } + public var Passport_DeleteAddress: String { return self._s[4553]! } + public var Passport_DeletePassportConfirmation: String { return self._s[4554]! } + public var Passport_Identity_ReverseSide: String { return self._s[4555]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4556]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[4557]! } + public var Passport_FieldAddress: String { return self._s[4558]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4559]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4561]! } + public var Map_Home: String { return self._s[4563]! } + public var PollResults_Title: String { return self._s[4564]! } + public var ArchivedChats_IntroText2: String { return self._s[4566]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4567]! } + public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4568]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[4570]! } + public var Passport_Identity_AddPersonalDetails: String { return self._s[4572]! } + public var Group_Info_AdminLog: String { return self._s[4574]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[4575]! } + public var Appearance_Animations: String { return self._s[4576]! } + public var Appearance_TextSizeSetting: String { return self._s[4577]! } + public func ForwardedPhotos(_ 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 GroupInfo_ShowMoreMembers(_ 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[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + public func Stats_GroupTopAdminDeletions(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_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[3 * 6 + Int(form.rawValue)]!, stringValue) } - public func Contacts_InviteContacts(_ value: Int32) -> String { + public func Conversation_TitleReplies(_ 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 ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func Map_ETAMinutes(_ 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 StickerPack_AddStickerCount(_ value: Int32) -> String { + public func Conversation_StatusOnline(_ 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 Stats_GroupTopInviterInvites(_ value: Int32) -> String { + public func Call_ShortMinutes(_ 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 PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + public func Stats_GroupShowMoreTopPosters(_ 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 AttachmentMenu_SendVideo(_ value: Int32) -> String { + public func ChatList_MessageVideos(_ 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 ForwardedStickers(_ value: Int32) -> String { + public func Stats_GroupShowMoreTopAdmins(_ 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 SharedMedia_Generic(_ value: Int32) -> String { + public func OldChannels_InactiveYear(_ 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 Stats_GroupTopPosterMessages(_ value: Int32) -> String { + public func Map_ETAHours(_ 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 MessageTimer_Minutes(_ value: Int32) -> String { + public func Stats_MessageViews(_ 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 Notification_GameScoreSimple(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ 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 Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func Conversation_MessageViewComments(_ 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 VoiceOver_Chat_ContactPhoneNumberCount(_ 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[16 * 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[17 * 6 + Int(form.rawValue)]!, _1, _2) + public func OldChannels_GroupFormat(_ 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) } - public func ServiceMessage_GameScoreSelfExtended(_ 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[18 * 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[19 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func UserCount(_ 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[20 * 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[21 * 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[22 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedMessages(_ 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 PeopleNearby_ShowMorePeople(_ 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 Map_ETAMinutes(_ 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 ServiceMessage_GameScoreSelfSimple(_ 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 Stats_GroupShowMoreTopAdmins(_ 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 Call_Minutes(_ 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 QuickSend_Photos(_ 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 MessageTimer_Months(_ 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 MuteFor_Days(_ 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 ForwardedLocations(_ 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 Conversation_TitleComments(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_ContextViewReplies(_ 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_SelectedMessages(_ 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 Conversation_StatusMembers(_ 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_Search_Messages(_ 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 VoiceOver_Chat_PollOptionCount(_ 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 Forward_ConfirmMultipleFiles(_ 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 StickerPack_StickerCount(_ 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 PUSH_CHAT_MESSAGE_ROUNDS(_ 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 AttachmentMenu_SendGif(_ 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 Map_ETAHours(_ 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 Call_ShortSeconds(_ 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 OldChannels_InactiveWeek(_ 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 Watch_UserInfo_Mute(_ 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 SharedMedia_DeleteItemsConfirmation(_ 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 ForwardedContacts(_ 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 AttachmentMenu_SendPhoto(_ 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 Theme_UsersCount(_ 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 CreatePoll_AddMoreOptions(_ 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 Conversation_TitleReplies(_ 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 Notification_GameScoreSelfSimple(_ 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 ChatList_SelectedChats(_ 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 MessageTimer_Years(_ 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 SharedMedia_Link(_ 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 Stats_MessageForwards(_ 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 ChatList_MessagePhotos(_ 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 StickerPack_RemoveMaskCount(_ 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 ServiceMessage_GameScoreSimple(_ 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_PollVotes(_ 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 ForwardedPolls(_ 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 Wallpaper_DeleteConfirmation(_ 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 ForwardedPhotos(_ 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 PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Conversation_StatusOnline(_ 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 PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, _1, _2) - } - 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[70 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MuteExpires_Minutes(_ 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 Media_SharePhoto(_ 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 ChatList_MessageVideos(_ 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 PUSH_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 Notifications_Exceptions(_ 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 ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func Stats_MessageViews(_ 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 Stats_GroupTopPosterChars(_ 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 MessageTimer_ShortMinutes(_ 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 Media_ShareVideo(_ 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 VoiceOver_Chat_ContactEmailCount(_ 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 PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Stats_GroupShowMoreTopInviters(_ 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) - } - 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[84 * 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[85 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - 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[86 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_HoursAgo(_ 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 DialogList_LiveLocationChatsCount(_ 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 PollResults_ShowMore(_ 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 StickerPack_RemoveStickerCount(_ 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 SharedMedia_Photo(_ 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 PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MuteExpires_Hours(_ 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 ForwardedGifs(_ 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 MuteFor_Hours(_ 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 Invitation_Members(_ 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 Stats_GroupTopAdminDeletions(_ 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 MessageTimer_ShortHours(_ 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 Wallet_Updated_MinutesAgo(_ 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 Media_ShareItem(_ 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 PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MessageTimer_Seconds(_ 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 Call_Seconds(_ 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 SharedMedia_Video(_ 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 Notification_GameScoreExtended(_ 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 ForwardedVideos(_ 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 SharedMedia_File(_ 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 Stats_GroupShowMoreTopPosters(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[108 * 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[109 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortSeconds(_ 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 InstantPage_Views(_ 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 Stats_GroupTopAdminKicks(_ 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 PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Notification_GameScoreSelfExtended(_ 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 MuteExpires_Days(_ 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 OldChannels_GroupFormat(_ 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 Contacts_ImportersCount(_ 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 AttachmentMenu_SendItem(_ 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 LiveLocation_MenuChatsCount(_ 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 ForwardedVideoMessages(_ 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 MessagePoll_QuizCount(_ 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 Passport_Scans(_ 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 OldChannels_Leave(_ 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 Call_ShortMinutes(_ 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 PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[127 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func OldChannels_InactiveYear(_ 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 LastSeen_MinutesAgo(_ 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 Conversation_StatusSubscribers(_ 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 InviteText_ContactsCountText(_ 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 StickerPack_AddMaskCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[132 * 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[133 * 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[134 * 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[135 * 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[136 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[137 * 6 + Int(form.rawValue)]!, stringValue) - } - 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[138 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[19 * 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[139 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_DeletedChats(_ 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[140 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_MessageViewComments(_ value: Int32) -> String { + public func ForwardedGifs(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[141 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public func MessageTimer_Hours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[142 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreExtended(_ 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_MESSAGES(_ 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 SharedMedia_Link(_ 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 Stats_GroupTopPosterMessages(_ 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 ForwardedAudios(_ 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 GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[143 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) } - public func Stats_GroupTopAdminBans(_ value: Int32) -> String { + public func PUSH_MESSAGES(_ 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 ForwardedVideos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[144 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[31 * 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[32 * 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[33 * 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[34 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopAdminKicks(_ 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 Forward_ConfirmMultipleFiles(_ 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 StickerPack_AddStickerCount(_ 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 VoiceOver_Chat_ContactPhoneNumberCount(_ 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 PollResults_ShowMore(_ 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 MuteExpires_Minutes(_ 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 ServiceMessage_GameScoreSelfExtended(_ 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 SharedMedia_Photo(_ 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 Media_SharePhoto(_ 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 Stats_MessageForwards(_ 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 Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[145 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[45 * 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[46 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupShowMoreTopInviters(_ 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 Media_ShareItem(_ 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 ForwardedStickers(_ 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 ChatList_Search_Messages(_ 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 Watch_UserInfo_Mute(_ 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 Contacts_ImportersCount(_ 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 Conversation_SelectedMessages(_ 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 GroupInfo_ShowMoreMembers(_ 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 Notifications_Exceptions(_ 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 MessageTimer_Days(_ 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 AttachmentMenu_SendVideo(_ 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 MuteExpires_Days(_ 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 Conversation_LiveLocationMembersCount(_ 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 ChatList_MessagePhotos(_ 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 OldChannels_Leave(_ 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 SharedMedia_File(_ 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 Theme_UsersCount(_ 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 PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedVideoMessages(_ 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 PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, _1, _2) + } + 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[69 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedLocations(_ 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 MessageTimer_Seconds(_ 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 StickerPack_RemoveMaskCount(_ 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 PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Passport_Scans(_ 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 Wallpaper_DeleteConfirmation(_ 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 LiveLocationUpdated_MinutesAgo(_ 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 PUSH_CHAT_MESSAGE_PHOTOS(_ 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) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_ShortWeeks(_ 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 Call_Minutes(_ 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 Stats_GroupTopAdminBans(_ 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 ForwardedContacts(_ 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 MuteFor_Hours(_ 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) + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_TitleComments(_ 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 ChatList_SelectedChats(_ 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 PrivacyLastSeenSettings_AddUsers(_ 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 Notification_GameScoreSelfExtended(_ 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 SharedMedia_DeleteItemsConfirmation(_ 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 StickerPack_StickerCount(_ 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 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 SharedMedia_Generic(_ 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 Wallet_Updated_MinutesAgo(_ 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 PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, _1, _2) + } + 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[95 * 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[96 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func StickerPack_RemoveStickerCount(_ 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 MessageTimer_ShortMinutes(_ 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 Stats_GroupTopInviterInvites(_ 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 Conversation_StatusMembers(_ 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 StickerPack_AddMaskCount(_ 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 MuteFor_Days(_ 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 LastSeen_HoursAgo(_ 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 Notifications_ExceptionMuteExpires_Days(_ 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 MessagePoll_VotedCount(_ 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 MuteExpires_Hours(_ 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 ServiceMessage_GameScoreExtended(_ 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 Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[108 * 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[109 * 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[110 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Weeks(_ 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 ServiceMessage_GameScoreSimple(_ 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 AttachmentMenu_SendItem(_ 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 QuickSend_Photos(_ 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 ForwardedPolls(_ 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 Invitation_Members(_ 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 PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_Months(_ 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 PasscodeSettings_FailedAttempts(_ 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 Conversation_ContextViewReplies(_ 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 VoiceOver_Chat_PollOptionCount(_ 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 ChatListFilter_ShowMoreChats(_ 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 LastSeen_MinutesAgo(_ 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_ExceptionMuteExpires_Hours(_ 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 ChatList_DeletedChats(_ 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 PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[126 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_Minutes(_ 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 InstantPage_Views(_ 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 VoiceOver_Chat_ContactEmailCount(_ 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 PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[130 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func DialogList_LiveLocationChatsCount(_ 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 UserCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[132 * 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[133 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func OldChannels_InactiveWeek(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[134 * 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[135 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[136 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopPosterChars(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[137 * 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[138 * 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[139 * 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[140 * 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[141 * 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[142 * 6 + Int(form.rawValue)]!, stringValue) + } + 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[143 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[144 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[145 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedMessages(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[146 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/Resources/PresentationStrings.mapping index d5ec1f5bd8..d941da328b 100644 Binary files a/submodules/TelegramUI/Resources/PresentationStrings.mapping and b/submodules/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index a2a872e1d7..41e66add9f 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -289,6 +289,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G private var stickerSettingsDisposable: Disposable? private var applicationInForegroundDisposable: Disposable? + private var applicationInFocusDisposable: Disposable? private var checkedPeerChatServiceActions = false @@ -3071,6 +3072,17 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } }) + if case let .peer(peerId) = chatLocation, peerId.namespace == Namespaces.Peer.SecretChat { + self.applicationInFocusDisposable = (context.sharedContext.applicationBindings.applicationIsActive + |> distinctUntilChanged + |> deliverOn(Queue.mainQueue())).start(next: { [weak self] value in + guard let strongSelf = self, strongSelf.isNodeLoaded else { + return + } + strongSelf.chatDisplayNode.updateIsBlurred(!value) + }) + } + self.canReadHistoryDisposable = (combineLatest(context.sharedContext.applicationBindings.applicationInForeground, self.canReadHistory.get()) |> map { a, b in return a && b } |> deliverOnMainQueue).start(next: { [weak self] value in @@ -3139,6 +3151,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G self.presentationDataDisposable?.dispose() self.searchDisposable?.dispose() self.applicationInForegroundDisposable?.dispose() + self.applicationInFocusDisposable?.dispose() self.canReadHistoryDisposable?.dispose() self.networkStateDisposable?.dispose() self.chatAdditionalDataDisposable.dispose() @@ -8461,7 +8474,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G }, error: { _ in let presentationData = context.sharedContext.currentPresentationData.with { $0 } - present(textAlertController(context: context, title: nil, text: presentationData.strings.Login_UnknownError, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) + present(textAlertController(context: context, title: nil, text: presentationData.strings.Channel_DiscussionMessageUnavailable, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) }) cancelImpl = { [weak statusController] in diff --git a/submodules/TelegramUI/Sources/ChatControllerNode.swift b/submodules/TelegramUI/Sources/ChatControllerNode.swift index 5dc4883acd..949e67c95d 100644 --- a/submodules/TelegramUI/Sources/ChatControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatControllerNode.swift @@ -14,6 +14,7 @@ import TelegramNotices import ReactionSelectionNode import TelegramUniversalVideoContent import ChatInterfaceState +import FastBlur final class VideoNavigationControllerDropContentItem: NavigationControllerDropContentItem { let itemNode: OverlayMediaItemNode @@ -309,6 +310,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { let backgroundNode: WallpaperBackgroundNode let backgroundImageDisposable = MetaDisposable() let historyNode: ChatHistoryListNode + var blurredHistoryNode: ASImageNode? let reactionContainerNode: ReactionSelectionParentNode let historyNodeContainer: ASDisplayNode let loadingNode: ChatLoadingNode @@ -1220,6 +1222,9 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { transition.updateFrame(node: self.historyNodeContainer, frame: contentBounds) transition.updateBounds(node: self.historyNode, bounds: CGRect(origin: CGPoint(), size: contentBounds.size)) transition.updatePosition(node: self.historyNode, position: CGPoint(x: contentBounds.size.width / 2.0, y: contentBounds.size.height / 2.0)) + if let blurredHistoryNode = self.blurredHistoryNode { + transition.updateFrame(node: blurredHistoryNode, frame: contentBounds) + } transition.updateFrame(node: self.loadingNode, frame: contentBounds) @@ -2933,4 +2938,39 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { self.updateHasEmbeddedTitleContent?() } } + + func updateIsBlurred(_ isBlurred: Bool) { + if isBlurred { + if self.blurredHistoryNode == nil { + let unscaledSize = self.historyNode.frame.size + let image = generateImage(CGSize(width: floor(unscaledSize.width), height: floor(unscaledSize.height)), opaque: true, scale: 1.0, rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + + UIGraphicsPushContext(context) + + let backgroundFrame = self.backgroundNode.view.convert(self.backgroundNode.bounds, to: self.historyNode.supernode?.view) + self.backgroundNode.view.drawHierarchy(in: backgroundFrame, afterScreenUpdates: false) + + context.translateBy(x: size.width / 2.0, y: size.height / 2.0) + context.scaleBy(x: -1.0, y: -1.0) + context.translateBy(x: -size.width / 2.0, y: -size.height / 2.0) + + self.historyNode.view.drawHierarchy(in: CGRect(origin: CGPoint(), size: unscaledSize), afterScreenUpdates: false) + + UIGraphicsPopContext() + }).flatMap(applyScreenshotEffectToImage) + let blurredHistoryNode = ASImageNode() + blurredHistoryNode.image = image + blurredHistoryNode.frame = self.historyNode.frame + self.blurredHistoryNode = blurredHistoryNode + self.historyNode.supernode?.insertSubnode(blurredHistoryNode, aboveSubnode: self.historyNode) + } + } else { + if let blurredHistoryNode = self.blurredHistoryNode { + self.blurredHistoryNode = nil + blurredHistoryNode.removeFromSupernode() + } + } + self.historyNode.isHidden = isBlurred + } } diff --git a/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift b/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift index 289d664c53..04d74ba544 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift @@ -139,7 +139,7 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, if case let .replyThread(replyThreadMessage) = location, view.earlierId == nil, !view.holeEarlier, !view.isLoading { loop: for entry in view.additionalData { switch entry { - case let .message(id, messages) where id == replyThreadMessage.messageId: + case let .message(id, messages) where id == replyThreadMessage.effectiveTopId: if !messages.isEmpty { let selection: ChatHistoryMessageSelection = .none diff --git a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift index 34b1ffe06f..61122e1940 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift @@ -18,6 +18,12 @@ import ListMessageItem import AccountContext import ChatInterfaceState +extension ChatReplyThreadMessage { + var effectiveTopId: MessageId { + return self.channelMessageId ?? self.messageId + } +} + private class ChatHistoryListSelectionRecognizer: UIPanGestureRecognizer { private let selectionGestureActivationThreshold: CGFloat = 5.0 @@ -643,7 +649,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { additionalData.append(.peer(replyThreadMessage.messageId.peerId)) } - additionalData.append(.message(replyThreadMessage.messageId)) + additionalData.append(.message(replyThreadMessage.effectiveTopId)) } let currentViewVersion = Atomic(value: nil) @@ -1216,7 +1222,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { if hasUnconsumedMention && !hasUnconsumedContent { messageIdsWithUnseenPersonalMention.append(message.id) } - if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.messageId == message.id { + if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.effectiveTopId == message.id { isTopReplyThreadMessageShownValue = true } case let .MessageGroupEntry(_, messages, _): @@ -1246,7 +1252,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { if hasUnconsumedMention && !hasUnconsumedContent { messageIdsWithUnseenPersonalMention.append(message.id) } - if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.messageId == message.id { + if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.effectiveTopId == message.id { isTopReplyThreadMessageShownValue = true } } diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift index 3a5e6be5fb..3c505b404d 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift @@ -457,7 +457,7 @@ func contextMenuForChatPresentationIntefaceState(chatPresentationInterfaceState: var isReplyThreadHead = false if case let .replyThread(replyThreadMessage) = chatPresentationInterfaceState.chatLocation { - isReplyThreadHead = messages[0].id == replyThreadMessage.messageId + isReplyThreadHead = messages[0].id == replyThreadMessage.effectiveTopId } if !isReplyThreadHead, data.canReply { diff --git a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift index b6701149c9..2e9989b61e 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -55,7 +55,7 @@ class ChatMessageShareButton: HighlightableButtonNode { fatalError("init(coder:) has not been implemented") } - func update(presentationData: ChatPresentationData, message: Message, account: Account) -> CGSize { + func update(presentationData: ChatPresentationData, chatLocation: ChatLocation, message: Message, account: Account) -> CGSize { var isReplies = false var replyCount = 0 if let channel = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = channel.info { @@ -67,6 +67,10 @@ class ChatMessageShareButton: HighlightableButtonNode { } } } + if case let .replyThread(replyThreadMessage) = chatLocation, replyThreadMessage.effectiveTopId == message.id { + replyCount = 0 + isReplies = false + } if self.theme !== presentationData.theme.theme || self.isReplies != isReplies { self.theme = presentationData.theme.theme @@ -569,7 +573,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { isBroadcastChannel = true } - if replyThreadMessage.isChannelPost, replyThreadMessage.messageId == item.message.id { + if replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == item.message.id { isBroadcastChannel = true } @@ -925,7 +929,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { strongSelf.addSubnode(updatedShareButtonNode) updatedShareButtonNode.addTarget(strongSelf, action: #selector(strongSelf.shareButtonPressed), forControlEvents: .touchUpInside) } - let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, message: item.message, account: item.context.account) + let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, message: item.message, account: item.context.account) updatedShareButtonNode.frame = CGRect(origin: CGPoint(x: updatedImageFrame.maxX + 8.0, y: updatedImageFrame.maxY - buttonSize.height - 4.0), size: buttonSize) } else if let shareButtonNode = strongSelf.shareButtonNode { shareButtonNode.removeFromSupernode() @@ -1361,7 +1365,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { return } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { return } diff --git a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift index 81284841e8..d504d675e3 100644 --- a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift @@ -144,6 +144,9 @@ private func contentNodeMessagesAndClassesForItem(_ item: ChatMessageItem) -> [( if let channel = firstMessage.peers[firstMessage.id.peerId] as? TelegramChannel, case let .broadcast(info) = channel.info, info.flags.contains(.hasDiscussionGroup) { hasDiscussion = true } + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == firstMessage.id { + hasDiscussion = false + } if hasDiscussion { var canComment = false @@ -879,7 +882,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode allowFullWidth = true } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.messageId == firstMessage.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == firstMessage.id { isBroadcastChannel = true } @@ -906,7 +909,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode let isFailed = item.content.firstMessage.effectivelyFailed(timestamp: item.context.account.network.getApproximateRemoteTimestamp()) var needShareButton = false - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { needShareButton = false allowFullWidth = true } else if isFailed || Namespaces.Message.allScheduled.contains(item.message.id.namespace) { @@ -2955,7 +2958,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode default: break } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { canHaveSelection = false } diff --git a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift index 49b7868aa3..0c2df5028c 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift @@ -194,7 +194,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView { isBroadcastChannel = true } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == item.message.id { isBroadcastChannel = true } @@ -473,7 +473,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView { strongSelf.addSubnode(updatedShareButtonNode) updatedShareButtonNode.addTarget(strongSelf, action: #selector(strongSelf.shareButtonPressed), forControlEvents: .touchUpInside) } - let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, message: item.message, account: item.context.account) + let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, message: item.message, account: item.context.account) updatedShareButtonNode.frame = CGRect(origin: CGPoint(x: videoFrame.maxX - 7.0, y: videoFrame.maxY - 24.0 - buttonSize.height), size: buttonSize) } else if let shareButtonNode = strongSelf.shareButtonNode { shareButtonNode.removeFromSupernode() @@ -858,7 +858,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView { return } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { return } diff --git a/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift b/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift index 33f2ac521e..07fac2f234 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift @@ -277,7 +277,11 @@ final class ChatMessageInteractiveFileNode: ASDisplayNode { var consumableContentIcon: UIImage? for attribute in message.attributes { if let attribute = attribute as? ConsumableContentMessageAttribute { - if !attribute.consumed { + var isConsumed = attribute.consumed + if let channel = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = channel.info { + isConsumed = true + } + if !isConsumed { if incoming { consumableContentIcon = PresentationResourcesChat.chatBubbleConsumableContentIncomingIcon(presentationData.theme.theme) } else { diff --git a/submodules/TelegramUI/Sources/ChatMessageItem.swift b/submodules/TelegramUI/Sources/ChatMessageItem.swift index cda6679a83..05af4b17d5 100644 --- a/submodules/TelegramUI/Sources/ChatMessageItem.swift +++ b/submodules/TelegramUI/Sources/ChatMessageItem.swift @@ -327,7 +327,7 @@ public final class ChatMessageItem: ListViewItem, CustomStringConvertible { if let peer = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = peer.info { isBroadcastChannel = true } - } else if case let .replyThread(replyThreadMessage) = chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.messageId == message.id { + } else if case let .replyThread(replyThreadMessage) = chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == message.id { isBroadcastChannel = true } if !hasActionMedia && !isBroadcastChannel { diff --git a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift index 25b0a27f45..4daef162c5 100644 --- a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift @@ -257,7 +257,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { isBroadcastChannel = true } - if replyThreadMessage.isChannelPost, replyThreadMessage.messageId == item.message.id { + if replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == item.message.id { isBroadcastChannel = true } @@ -568,7 +568,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { strongSelf.addSubnode(updatedShareButtonNode) updatedShareButtonNode.addTarget(strongSelf, action: #selector(strongSelf.shareButtonPressed), forControlEvents: .touchUpInside) } - let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, message: item.message, account: item.context.account) + let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, message: item.message, account: item.context.account) let shareButtonFrame = CGRect(origin: CGPoint(x: baseShareButtonFrame.minX, y: baseShareButtonFrame.maxY - buttonSize.height), size: buttonSize) transition.updateFrame(node: updatedShareButtonNode, frame: shareButtonFrame) } else if let shareButtonNode = strongSelf.shareButtonNode { @@ -922,7 +922,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { return } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { return } diff --git a/submodules/TelegramUI/Sources/ChatTitleView.swift b/submodules/TelegramUI/Sources/ChatTitleView.swift index 3baf18915c..a3a0e99ec4 100644 --- a/submodules/TelegramUI/Sources/ChatTitleView.swift +++ b/submodules/TelegramUI/Sources/ChatTitleView.swift @@ -456,7 +456,12 @@ final class ChatTitleView: UIView, NavigationBarTitleView { var accessibilityText = "" for segment in self.titleNode.segments { - accessibilityText.append(segment.attributedText.string) + switch segment { + case let .number(_, string): + accessibilityText.append(string.string) + case let .text(_, string): + accessibilityText.append(string.string) + } } self.accessibilityLabel = accessibilityText diff --git a/submodules/TgVoipWebrtc/tgcalls b/submodules/TgVoipWebrtc/tgcalls index abf983bf49..64f96a1b4f 160000 --- a/submodules/TgVoipWebrtc/tgcalls +++ b/submodules/TgVoipWebrtc/tgcalls @@ -1 +1 @@ -Subproject commit abf983bf498ed0ddbdc3a4e2326b218f62a69d0c +Subproject commit 64f96a1b4fcfb8afdb0fb7749082cb42cdad7901 diff --git a/submodules/WalletUI/Resources/WalletStrings.mapping b/submodules/WalletUI/Resources/WalletStrings.mapping index 17cc3a5663..0f39866777 100644 Binary files a/submodules/WalletUI/Resources/WalletStrings.mapping and b/submodules/WalletUI/Resources/WalletStrings.mapping differ diff --git a/submodules/WalletUI/Sources/WalletStrings.swift b/submodules/WalletUI/Sources/WalletStrings.swift index ce409636d3..b5d79e61f2 100644 --- a/submodules/WalletUI/Sources/WalletStrings.swift +++ b/submodules/WalletUI/Sources/WalletStrings.swift @@ -449,12 +449,12 @@ public final class WalletStrings: Equatable { public var Wallet_Send_ConfirmationConfirm: String { return self._s[218]! } public var Wallet_Created_ExportErrorTitle: String { return self._s[219]! } public var Wallet_Info_TransactionPendingHeader: String { return self._s[220]! } - public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { + public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { + public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue)