Various improvements

This commit is contained in:
Ilya Laktyushin 2023-12-17 14:07:31 +04:00
parent 3afcd89a39
commit 8f51eec89b
44 changed files with 4381 additions and 383 deletions

View File

@ -10226,6 +10226,7 @@ Sorry for the inconvenience.";
"ChannelBoost.MoreBoosts.Title" = "More Boosts Needed";
"ChannelBoost.MoreBoosts.Text" = "To boost **%1$@** again, gift **Telegram Premium** to a friend and get **%2$@** additional boosts.";
"ChannelBoost.MoreBoosts.Gift" = "Gift Premium";
"BoostGift.Title" = "Boosts via Gifts";
"BoostGift.Description" = "Get more boosts for your channel by gifting\nPremium to your subscribers.";
@ -10658,9 +10659,6 @@ Sorry for the inconvenience.";
"Chat.Giveaway.Message.WinnersInfo.One" = "The winner received their gift link in a private message.";
"Chat.Giveaway.Message.WinnersInfo.Many" = "All winners received gift links in private messages.";
"ChannelBoost.Wallpaper" = "Set Wallpaper";
"ChannelBoost.WallpaperText" = "Your channel needs **Level %1$@** to set custom wallpaper.\n\nAsk your **Premium** subscribers to boost your channel with this link:";
"Settings.PremiumGift" = "Premium Gifting";
"Story.ViewList.ContextSortChannelInfo" = "Choose the order for the list of reactions.";
@ -10706,3 +10704,50 @@ Sorry for the inconvenience.";
"Premium.Gift.UsedLink.Text" = "This link was used to activate a **Telegram Premium** subscription.";
"Premium.WhatsIncluded" = "WHAT'S INCLUDED";
"ChannelBoost.Table.Level_1" = "Level %@";
"ChannelBoost.Table.Level_any" = "Level %@";
"ChannelBoost.Table.LevelUnlocks_1" = "Level %@ Unlocks:";
"ChannelBoost.Table.LevelUnlocks_any" = "Level %@ Unlocks:";
"ChannelBoost.Table.StoriesPerDay_1" = "%@ Story Per Day";
"ChannelBoost.Table.StoriesPerDay_any" = "%@ Stories Per Day";
"ChannelBoost.Table.CustomReactions_1" = "%@ Custom Reaction";
"ChannelBoost.Table.CustomReactions_any" = "%@ Custom Reactions";
"ChannelBoost.Table.NameColor_1" = "%@ Channel Name Color";
"ChannelBoost.Table.NameColor_any" = "%@ Channel Name Colors";
"ChannelBoost.Table.ProfileColor_1" = "%@ Color for Channel Cover";
"ChannelBoost.Table.ProfileColor_any" = "%@ Colors for Channel Cover";
"ChannelBoost.Table.ProfileLogo" = "Custom Logo for Channel Cover";
"ChannelBoost.Table.StyleForHeaders_1" = "%@ Style for Links and Quotes";
"ChannelBoost.Table.StyleForHeaders_any" = "%@ Styles for Links and Quotes";
"ChannelBoost.Table.HeadersLogo" = "Custom Logo for Links and Quotes";
"ChannelBoost.Table.EmojiStatus" = "1000+ Emoji Statuses";
"ChannelBoost.Table.Wallpaper_1" = "%@ Channel Background";
"ChannelBoost.Table.Wallpaper_any" = "%@ Channel Backgrounds";
"ChannelBoost.Table.CustomWallpaper" = "Custom Channel Background";
"ChannelBoost.AskToBoost" = "Ask your **Premium** subscribers to boost your channel with this link:";
"ChannelBoost.NameColor" = "Enable Colors";
"ChannelBoost.EnableNameColorLevelText" = "Your channel needs **Level %1$@** to change channel color.";
"ChannelBoost.NameIcon" = "Set Link Icon";
"ChannelBoost.EnableNameIconLevelText" = "Your channel needs **Level %1$@** to change link icon.";
"ChannelBoost.ProfileColor" = "Set Cover Color";
"ChannelBoost.EnableProfileColorLevelText" = "Your channel needs **Level %1$@** to change channel cover color.";
"ChannelBoost.ProfileIcon" = "Set Cover Icon";
"ChannelBoost.EnableProfileIconLevelText" = "Your channel needs **Level %1$@** to change channel cover icon.";
"ChannelBoost.EmojiStatus" = "Use Emoji Statuses";
"ChannelBoost.EnableEmojiStatusLevelText" = "Your channel needs **Level %1$@** to use emoji statuses.";
"ChannelBoost.Wallpaper" = "Set Channel Background";
"ChannelBoost.EnableWallpaperLevelText" = "Your channel needs **Level %1$@** to set channel background.";
"ChannelBoost.CustomWallpaper" = "Set Custom Channel Background";
"ChannelBoost.EnableCustomWallpaperLevelText" = "Your channel needs **Level %1$@** to set custom channel background.";

View File

@ -941,6 +941,7 @@ public protocol SharedAccountContext: AnyObject {
func makePremiumIntroController(context: AccountContext, source: PremiumIntroSource, forceDark: Bool, dismissed: (() -> Void)?) -> ViewController
func makePremiumDemoController(context: AccountContext, subject: PremiumDemoSubject, action: @escaping () -> Void) -> ViewController
func makePremiumLimitController(context: AccountContext, subject: PremiumLimitSubject, count: Int32, forceDark: Bool, cancel: @escaping () -> Void, action: @escaping () -> Bool) -> ViewController
func makePremiumGiftController(context: AccountContext) -> ViewController
func makeStickerPackScreen(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)?, mainStickerPack: StickerPackReference, stickerPacks: [StickerPackReference], loadedStickerPacks: [LoadedStickerPack], parentNavigationController: NavigationController?, sendSticker: ((FileMediaReference, UIView, CGRect) -> Bool)?) -> ViewController
@ -1102,7 +1103,22 @@ public protocol AccountContext: AnyObject {
public struct PremiumConfiguration {
public static var defaultValue: PremiumConfiguration {
return PremiumConfiguration(isPremiumDisabled: false, showPremiumGiftInAttachMenu: false, showPremiumGiftInTextField: false, giveawayGiftsPurchaseAvailable: false, boostsPerGiftCount: 3, minChannelNameColorLevel: 5, audioTransciptionTrialMaxDuration: 300, audioTransciptionTrialCount: 2, minChannelWallpaperLevel: 5)
return PremiumConfiguration(
isPremiumDisabled: false,
showPremiumGiftInAttachMenu: false,
showPremiumGiftInTextField: false,
giveawayGiftsPurchaseAvailable: false,
boostsPerGiftCount: 3,
audioTransciptionTrialMaxDuration: 300,
audioTransciptionTrialCount: 2,
minChannelNameColorLevel: 1,
minChannelNameIconLevel: 4,
minChannelProfileColorLevel: 5,
minChannelProfileIconLevel: 7,
minChannelEmojiStatusLevel: 8,
minChannelWallpaperLevel: 9,
minChannelCustomWallpaperLevel: 10
)
}
public let isPremiumDisabled: Bool
@ -1110,38 +1126,73 @@ public struct PremiumConfiguration {
public let showPremiumGiftInTextField: Bool
public let giveawayGiftsPurchaseAvailable: Bool
public let boostsPerGiftCount: Int32
public let minChannelNameColorLevel: Int32
public let audioTransciptionTrialMaxDuration: Int32
public let audioTransciptionTrialCount: Int32
public let minChannelNameColorLevel: Int32
public let minChannelNameIconLevel: Int32
public let minChannelProfileColorLevel: Int32
public let minChannelProfileIconLevel: Int32
public let minChannelEmojiStatusLevel: Int32
public let minChannelWallpaperLevel: Int32
public let minChannelCustomWallpaperLevel: Int32
fileprivate init(isPremiumDisabled: Bool, showPremiumGiftInAttachMenu: Bool, showPremiumGiftInTextField: Bool, giveawayGiftsPurchaseAvailable: Bool, boostsPerGiftCount: Int32, minChannelNameColorLevel: Int32, audioTransciptionTrialMaxDuration: Int32, audioTransciptionTrialCount: Int32, minChannelWallpaperLevel: Int32) {
fileprivate init(
isPremiumDisabled: Bool,
showPremiumGiftInAttachMenu: Bool,
showPremiumGiftInTextField: Bool,
giveawayGiftsPurchaseAvailable: Bool,
boostsPerGiftCount: Int32,
audioTransciptionTrialMaxDuration: Int32,
audioTransciptionTrialCount: Int32,
minChannelNameColorLevel: Int32,
minChannelNameIconLevel: Int32,
minChannelProfileColorLevel: Int32,
minChannelProfileIconLevel: Int32,
minChannelEmojiStatusLevel: Int32,
minChannelWallpaperLevel: Int32,
minChannelCustomWallpaperLevel: Int32
) {
self.isPremiumDisabled = isPremiumDisabled
self.showPremiumGiftInAttachMenu = showPremiumGiftInAttachMenu
self.showPremiumGiftInTextField = showPremiumGiftInTextField
self.giveawayGiftsPurchaseAvailable = giveawayGiftsPurchaseAvailable
self.boostsPerGiftCount = boostsPerGiftCount
self.minChannelNameColorLevel = minChannelNameColorLevel
self.audioTransciptionTrialMaxDuration = audioTransciptionTrialMaxDuration
self.audioTransciptionTrialCount = audioTransciptionTrialCount
self.minChannelNameColorLevel = minChannelNameColorLevel
self.minChannelNameIconLevel = minChannelNameIconLevel
self.minChannelProfileColorLevel = minChannelProfileColorLevel
self.minChannelProfileIconLevel = minChannelProfileIconLevel
self.minChannelEmojiStatusLevel = minChannelEmojiStatusLevel
self.minChannelWallpaperLevel = minChannelWallpaperLevel
self.minChannelCustomWallpaperLevel = minChannelCustomWallpaperLevel
}
public static func with(appConfiguration: AppConfiguration) -> PremiumConfiguration {
let defaultValue = self.defaultValue
if let data = appConfiguration.data {
func get(_ value: Any?) -> Int32? {
return (value as? Double).flatMap(Int32.init)
}
return PremiumConfiguration(
isPremiumDisabled: data["premium_purchase_blocked"] as? Bool ?? false,
showPremiumGiftInAttachMenu: data["premium_gift_attach_menu_icon"] as? Bool ?? false,
showPremiumGiftInTextField: data["premium_gift_text_field_icon"] as? Bool ?? false,
giveawayGiftsPurchaseAvailable: data["giveaway_gifts_purchase_available"] as? Bool ?? false,
boostsPerGiftCount: Int32(data["boosts_per_sent_gift"] as? Double ?? 3),
minChannelNameColorLevel: Int32(data["channel_color_level_min"] as? Double ?? 5),
audioTransciptionTrialMaxDuration: Int32(data["transcribe_audio_trial_duration_max"] as? Double ?? 300),
audioTransciptionTrialCount: Int32(data["transcribe_audio_trial_weekly_number"] as? Double ?? 2),
minChannelWallpaperLevel: Int32(data["channel_wallpaper_level_min"] as? Double ?? 5)
isPremiumDisabled: data["premium_purchase_blocked"] as? Bool ?? defaultValue.isPremiumDisabled,
showPremiumGiftInAttachMenu: data["premium_gift_attach_menu_icon"] as? Bool ?? defaultValue.showPremiumGiftInAttachMenu,
showPremiumGiftInTextField: data["premium_gift_text_field_icon"] as? Bool ?? defaultValue.showPremiumGiftInTextField,
giveawayGiftsPurchaseAvailable: data["giveaway_gifts_purchase_available"] as? Bool ?? defaultValue.giveawayGiftsPurchaseAvailable,
boostsPerGiftCount: get(data["boosts_per_sent_gift"]) ?? defaultValue.boostsPerGiftCount,
audioTransciptionTrialMaxDuration: get(data["transcribe_audio_trial_duration_max"]) ?? defaultValue.audioTransciptionTrialMaxDuration,
audioTransciptionTrialCount: get(data["transcribe_audio_trial_weekly_number"]) ?? defaultValue.audioTransciptionTrialCount,
minChannelNameColorLevel: get(data["channel_color_level_min"]) ?? defaultValue.minChannelNameColorLevel,
minChannelNameIconLevel: get(data["channel_bg_icon_level_min"]) ?? defaultValue.minChannelNameIconLevel,
minChannelProfileColorLevel: get(data["channel_profile_color_level_min"]) ?? defaultValue.minChannelProfileColorLevel,
minChannelProfileIconLevel: get(data["channel_profile_bg_icon_level_min"]) ?? defaultValue.minChannelProfileIconLevel,
minChannelEmojiStatusLevel: get(data["channel_emoji_status_level_min"]) ?? defaultValue.minChannelEmojiStatusLevel,
minChannelWallpaperLevel: get(data["channel_wallpaper_level_min"]) ?? defaultValue.minChannelWallpaperLevel,
minChannelCustomWallpaperLevel: get(data["channel_custom_wallpaper_level_min"]) ?? defaultValue.minChannelCustomWallpaperLevel
)
} else {
return .defaultValue
return defaultValue
}
}
}

View File

@ -773,8 +773,6 @@ public final class AvatarNode: ASDisplayNode {
}
@objc override public class func draw(_ bounds: CGRect, withParameters parameters: Any?, isCancelled: () -> Bool, isRasterizing: Bool) {
assertNotOnMainThread()
let context = UIGraphicsGetCurrentContext()!
if !isRasterizing {

View File

@ -51,8 +51,8 @@ public final class ChatMessageInteractiveMediaBadge: ASDisplayNode {
private var iconName: String?
private let backgroundNode: ASImageNode
private let durationNode: ASTextNode
private var sizeNode: ASTextNode?
public let durationNode: ASTextNode
public private(set) var sizeNode: ASTextNode?
private var measureNode: ASTextNode
private var iconNode: ASImageNode?
private var mediaDownloadStatusNode: RadialStatusNode?

View File

@ -1485,7 +1485,7 @@ open class TextNode: ASDisplayNode {
var blockQuotes: [TextNodeBlockQuote] = []
for i in 0 ..< calculatedSegments.count {
loop: for i in 0 ..< calculatedSegments.count {
let segment = calculatedSegments[i]
if i != 0 {
if segment.blockQuote != nil {
@ -1510,6 +1510,10 @@ open class TextNode: ASDisplayNode {
}
for line in segment.lines {
var isLastLine = false
if maximumNumberOfLines > 0 && lines.count == maximumNumberOfLines - 1 {
isLastLine = true
}
line.frame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: -insets.bottom + size.height + line.frame.size.height), size: line.frame.size)
line.frame.size.width += max(0.0, segment.additionalWidth - 2.0)
//line.frame.size.width = max(blockWidth, line.frame.size.width)
@ -1575,6 +1579,10 @@ open class TextNode: ASDisplayNode {
}
lines.append(line)
if isLastLine {
break loop
}
}
let blockMaxY = size.height - insets.bottom

View File

@ -1021,12 +1021,16 @@ final class DrawingStickerEntititySelectionView: DrawingEntitySelectionView {
actualInset = floorToScreenPixels((self.bounds.width - width) / 2.0)
var cornerRadius: CGFloat = 12.0 - self.scale
var count = 12
if case .message = entity.content {
cornerRadius *= 2.1
count = 20
} else if case .image = entity.content {
count = 20
}
let perimeter: CGFloat = 2.0 * (width + height - cornerRadius * (4.0 - .pi))
let count = 12
let dashLength = perimeter / CGFloat(count)
self.border.lineDashPattern = [dashLength * relativeDashLength, dashLength * relativeDashLength] as [NSNumber]
@ -1041,18 +1045,12 @@ final class DrawingStickerEntititySelectionView: DrawingEntitySelectionView {
self.border.path = UIBezierPath(ovalIn: CGRect(origin: CGPoint(x: inset, y: inset), size: CGSize(width: self.bounds.width - inset * 2.0, height: self.bounds.height - inset * 2.0))).cgPath
}
let handles = [
self.leftHandle,
self.rightHandle
]
for handle in handles {
for handle in [self.leftHandle, self.rightHandle] {
handle.path = handlePath
handle.bounds = bounds
handle.lineWidth = lineWidth
}
self.leftHandle.position = CGPoint(x: actualInset, y: self.bounds.midY)
self.rightHandle.position = CGPoint(x: self.bounds.maxX - actualInset, y: self.bounds.midY)
}

File diff suppressed because it is too large Load Diff

View File

@ -234,8 +234,14 @@ public func PremiumBoostScreen(
title: presentationData.strings.ChannelBoost_MoreBoosts_Title,
text: presentationData.strings.ChannelBoost_MoreBoosts_Text(peer.compactDisplayTitle, "\(premiumConfiguration.boostsPerGiftCount)").string,
actions: [
TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})
TextAlertAction(type: .defaultAction, title: presentationData.strings.ChannelBoost_MoreBoosts_Gift, action: {
dismissImpl?()
let controller = context.sharedContext.makePremiumGiftController(context: context)
pushController(controller)
}),
TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Close, action: {})
],
actionLayout: .vertical,
parseMarkdown: true
)
presentController(controller)

View File

@ -1195,9 +1195,6 @@ private final class LimitSheetContent: CombinedComponent {
case let .channelReactions(reactionCount):
titleText = strings.ChannelBoost_CustomReactions
string = strings.ChannelBoost_CustomReactionsText("\(reactionCount)", "\(reactionCount)").string
case .wallpaper:
titleText = strings.ChannelBoost_Wallpaper
string = strings.ChannelBoost_WallpaperText("\(premiumConfiguration.minChannelWallpaperLevel)").string
}
} else {
let storiesString = strings.ChannelBoost_StoriesPerDay(level)
@ -1783,7 +1780,6 @@ public class PremiumLimitScreen: ViewControllerComponentContainer {
case stories
case nameColors
case channelReactions(reactionCount: Int)
case wallpaper
}
case storiesChannelBoost(peer: EnginePeer, boostSubject: BoostSubject, isCurrent: Bool, level: Int32, currentLevelBoosts: Int32, nextLevelBoosts: Int32?, link: String?, myBoostCount: Int32, canBoostAgain: Bool)

View File

@ -595,7 +595,13 @@ public final class ChatMessageAttachedContentNode: ASDisplayNode {
}
}
let dateText = stringForMessageTimestampStatus(accountPeerId: context.account.peerId, message: message, dateTimeFormat: presentationData.dateTimeFormat, nameDisplayOrder: presentationData.nameDisplayOrder, strings: presentationData.strings, associatedData: associatedData)
let dateFormat: MessageTimestampStatusFormat
if presentationData.isPreview {
dateFormat = .full
} else {
dateFormat = .regular
}
let dateText = stringForMessageTimestampStatus(accountPeerId: context.account.peerId, message: message, dateTimeFormat: presentationData.dateTimeFormat, nameDisplayOrder: presentationData.nameDisplayOrder, strings: presentationData.strings, format: dateFormat, associatedData: associatedData)
let statusType: ChatMessageDateAndStatusType
if incoming {

View File

@ -83,7 +83,7 @@ public func stringForMessageTimestampStatus(accountPeerId: PeerId, message: Mess
}
var displayFullDate = false
if case .full = format {
if case .full = format, timestamp > 100000 {
displayFullDate = true
} else if let _ = message.forwardInfo, message.id.peerId == accountPeerId {
displayFullDate = true

View File

@ -597,7 +597,10 @@ public class ChatMessageGiveawayBubbleContentNode: ChatMessageBubbleContentNode,
let smallSpacing: CGFloat = 2.0
let largeSpacing: CGFloat = 14.0
var layoutSize = CGSize(width: boundingWidth, height: 49.0 + prizeTitleLayout.size.height + prizeTextLayout.size.height + participantsTextLayout.size.height + dateTextLayout.size.height + buttonSize.height + buttonSpacing + 106.0)
var layoutSize = CGSize(width: boundingWidth, height: 49.0 + prizeTitleLayout.size.height + prizeTextLayout.size.height + participantsTextLayout.size.height + dateTextLayout.size.height + 99.0)
if !item.presentationData.isPreview {
layoutSize.height += buttonSize.height + buttonSpacing + 7.0
}
if additionalPrizeTextLayout.size.height > 0.0 {
layoutSize.height += additionalPrizeSeparatorLayout.size.height + additionalPrizeTextLayout.size.height + 7.0
@ -655,6 +658,8 @@ public class ChatMessageGiveawayBubbleContentNode: ChatMessageBubbleContentNode,
let _ = dateTextApply()
let _ = channelButtonsApply()
let _ = buttonApply(animation)
strongSelf.buttonNode.isHidden = item.presentationData.isPreview
var originY: CGFloat = 0.0
@ -1051,7 +1056,7 @@ private final class PeerButtonNode: HighlightTrackingButtonNode {
return (CGSize(width: refinedWidth, height: 24.0), {
let _ = textApply()
targetNode.avatarNode.displaysAsynchronously = displayAsynchronously
targetNode.avatarNode.contentNode.displaysAsynchronously = displayAsynchronously
targetNode.textNode.displaysAsynchronously = displayAsynchronously
let backgroundFrame = CGRect(origin: .zero, size: CGSize(width: refinedWidth, height: 24.0))

View File

@ -1700,7 +1700,10 @@ public final class ChatMessageInteractiveFileNode: ASDisplayNode {
image = playerAlbumArt(postbox: context.account.postbox, engine: context.engine, fileReference: .message(message: MessageReference(message), media: file), albumArt: .init(thumbnailResource: ExternalMusicAlbumArtResource(file: .message(message: MessageReference(message), media: file), title: title ?? "", performer: performer ?? "", isThumbnail: true), fullSizeResource: ExternalMusicAlbumArtResource(file: .message(message: MessageReference(message), media: file), title: title ?? "", performer: performer ?? "", isThumbnail: false)), thumbnail: true, overlayColor: UIColor(white: 0.0, alpha: 0.3), drawPlaceholderWhenEmpty: false, attemptSynchronously: !animated)
}
}
let statusNode = SemanticStatusNode(backgroundNodeColor: backgroundNodeColor, foregroundNodeColor: foregroundNodeColor, image: image, overlayForegroundNodeColor: presentationData.theme.theme.chat.message.mediaOverlayControlColors.foregroundColor)
let statusNode = SemanticStatusNode(backgroundNodeColor: backgroundNodeColor, foregroundNodeColor: foregroundNodeColor, image: image, overlayForegroundNodeColor: presentationData.theme.theme.chat.message.mediaOverlayControlColors.foregroundColor)
if presentationData.isPreview {
statusNode.displaysAsynchronously = false
}
self.statusNode = statusNode
self.statusContainerNode.contentNode.insertSubnode(statusNode, at: 0)
@ -1787,7 +1790,7 @@ public final class ChatMessageInteractiveFileNode: ASDisplayNode {
cutoutFrame.origin.y += 6.0
}
if streamingState == .none && self.selectionNode == nil {
if (streamingState == .none && self.selectionNode == nil) || presentationData.isPreview {
self.statusNode?.setCutout(nil, animated: animated)
} else if let statusNode = self.statusNode, (self.iconNode?.isHidden ?? true) {
statusNode.setCutout(cutoutFrame, animated: true)

View File

@ -2122,6 +2122,10 @@ public final class ChatMessageInteractiveMediaNode: ASDisplayNode, GalleryItemTr
if let badgeContent = badgeContent {
if self.badgeNode == nil {
let badgeNode = ChatMessageInteractiveMediaBadge()
if isPreview {
badgeNode.durationNode.displaysAsynchronously = false
badgeNode.sizeNode?.displaysAsynchronously = false
}
var inset: CGFloat = 6.0
if let corners = self.currentImageArguments?.corners, case .Tail = corners.bottomLeft {

View File

@ -482,6 +482,7 @@ public final class ChatMessageAvatarHeaderNodeImpl: ListViewItemHeaderNode, Chat
self.containerNode = ContextControllerSourceNode()
self.avatarNode = AvatarNode(font: avatarFont)
self.avatarNode.contentNode.displaysAsynchronously = !presentationData.isPreview
super.init(layerBacked: false, dynamicBounce: true, isRotated: true, seeThrough: false)

View File

@ -510,11 +510,11 @@ public class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode {
let hideAllAdditionalInfo = item.presentationData.isPreview
let (textLayout, textApply) = textLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: hideAllAdditionalInfo ? 12 : 0, truncationType: .end, constrainedSize: textConstrainedSize, alignment: .natural, cutout: cutout, insets: textInsets, lineColor: messageTheme.accentControlColor))
let (textLayout, textApply) = textLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: hideAllAdditionalInfo ? 10 : 0, truncationType: .end, constrainedSize: textConstrainedSize, alignment: .natural, cutout: cutout, insets: textInsets, lineColor: messageTheme.accentControlColor))
let spoilerTextLayoutAndApply: (TextNodeLayout, (TextNodeWithEntities.Arguments?) -> TextNodeWithEntities)?
if !textLayout.spoilers.isEmpty {
spoilerTextLayoutAndApply = spoilerTextLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: hideAllAdditionalInfo ? 12 : 0, truncationType: .end, constrainedSize: textConstrainedSize, alignment: .natural, cutout: cutout, insets: textInsets, lineColor: messageTheme.accentControlColor, displaySpoilers: true, displayEmbeddedItemsUnderSpoilers: true))
spoilerTextLayoutAndApply = spoilerTextLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: hideAllAdditionalInfo ? 10 : 0, truncationType: .end, constrainedSize: textConstrainedSize, alignment: .natural, cutout: cutout, insets: textInsets, lineColor: messageTheme.accentControlColor, displaySpoilers: true, displayEmbeddedItemsUnderSpoilers: true))
} else {
spoilerTextLayoutAndApply = nil
}

View File

@ -11,64 +11,58 @@ import WallpaperBackgroundNode
public final class DrawingWallpaperRenderer {
private let context: AccountContext
private let presentationData: PresentationData
private let customWallpaper: TelegramWallpaper?
private let containerNode: ASDisplayNode
private let wallpaperBackgroundNode: WallpaperBackgroundNode
private let darkWallpaperBackgroundNode: WallpaperBackgroundNode
public init (context: AccountContext, customWallpaper: TelegramWallpaper?) {
self.context = context
self.presentationData = context.sharedContext.currentPresentationData.with { $0 }
self.customWallpaper = customWallpaper
self.containerNode = ASDisplayNode()
self.wallpaperBackgroundNode = createWallpaperBackgroundNode(context: context, forChatDisplay: true, useSharedAnimationPhase: false)
self.wallpaperBackgroundNode.displaysAsynchronously = false
self.containerNode.addSubnode(self.wallpaperBackgroundNode)
}
public func render(completion: @escaping (CGSize, UIImage?, UIImage?) -> Void) {
let wallpaper = self.customWallpaper ?? context.sharedContext.currentPresentationData.with { $0 }.chatWallpaper
self.wallpaperBackgroundNode.update(wallpaper: wallpaper, animated: false)
let size = CGSize(width: 360.0, height: 640.0)
self.updateLayout(size: size)
self.darkWallpaperBackgroundNode = createWallpaperBackgroundNode(context: context, forChatDisplay: true, useSharedAnimationPhase: false)
self.darkWallpaperBackgroundNode.displaysAsynchronously = false
Queue.mainQueue().after(0.03, {
let resultSize = CGSize(width: 1080, height: 1920)
self.generate { dayImage in
if self.customWallpaper != nil {
completion(resultSize, dayImage, nil)
} else {
let darkTheme = defaultDarkColorPresentationTheme
let wallpaper = darkTheme.chat.defaultWallpaper
self.wallpaperBackgroundNode.update(wallpaper: wallpaper, animated: false)
self.wallpaperBackgroundNode.updateLayout(size: size, displayMode: .aspectFill, transition: .immediate)
Queue.mainQueue().after(0.03, {
self.generate { nightImage in
completion(resultSize, dayImage, nightImage)
}
})
}
}
})
let darkTheme = defaultDarkColorPresentationTheme
let darkWallpaper = darkTheme.chat.defaultWallpaper
self.darkWallpaperBackgroundNode.update(wallpaper: darkWallpaper, animated: false)
}
private func generate(completion: @escaping (UIImage) -> Void) {
public func render(completion: @escaping (CGSize, UIImage?, UIImage?) -> Void) {
self.updateLayout(size: CGSize(width: 360.0, height: 640.0))
let resultSize = CGSize(width: 1080, height: 1920)
self.generate(view: self.wallpaperBackgroundNode.view) { dayImage in
if self.customWallpaper != nil {
completion(resultSize, dayImage, nil)
} else {
Queue.mainQueue().justDispatch {
self.generate(view: self.darkWallpaperBackgroundNode.view) { nightImage in
completion(resultSize, dayImage, nightImage)
}
}
}
}
}
private func generate(view: UIView, completion: @escaping (UIImage) -> Void) {
let size = CGSize(width: 360.0, height: 640.0)
UIGraphicsBeginImageContextWithOptions(size, false, 3.0)
self.containerNode.view.drawHierarchy(in: CGRect(origin: CGPoint(), size: size), afterScreenUpdates: true)
view.drawHierarchy(in: CGRect(origin: CGPoint(), size: size), afterScreenUpdates: true)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let finalImage = generateImage(CGSize(width: size.width * 3.0, height: size.height * 3.0), contextGenerator: { size, context in
context.clear(CGRect(origin: .zero, size: size))
if let cgImage = img?.cgImage {
context.draw(cgImage, in: CGRect(origin: .zero, size: size), byTiling: false)
}
}, opaque: false, scale: 1.0)
}, opaque: true, scale: 1.0)
if let finalImage {
completion(finalImage)
}
@ -77,7 +71,8 @@ public final class DrawingWallpaperRenderer {
private func updateLayout(size: CGSize) {
self.wallpaperBackgroundNode.updateLayout(size: size, displayMode: .aspectFill, transition: .immediate)
self.wallpaperBackgroundNode.frame = CGRect(origin: .zero, size: size)
self.containerNode.frame = CGRect(origin: .zero, size: size)
self.darkWallpaperBackgroundNode.updateLayout(size: size, displayMode: .aspectFill, transition: .immediate)
self.darkWallpaperBackgroundNode.frame = CGRect(origin: .zero, size: size)
}
}

View File

@ -2922,6 +2922,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
} else {
if case .message = self.subject, let layout = self.validLayout {
self.layer.animatePosition(from: CGPoint(x: 0.0, y: layout.size.height), to: .zero, duration: 0.4, timingFunction: kCAMediaTimingFunctionSpring, additive: true)
completion()
} else if let view = self.componentHost.view as? MediaEditorScreenComponent.View {
view.animateIn(from: .camera, completion: completion)
}

View File

@ -8639,172 +8639,114 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro
navigationController.setViewControllers(updatedControllers, animated: animated)
}
switch section {
case .avatar:
self.openAvatarForEditing()
case .edit:
self.headerNode.navigationButtonContainer.performAction?(.edit, nil, nil)
case .proxy:
self.controller?.push(proxySettingsController(context: self.context))
case .stories:
push(PeerInfoStoryGridScreen(context: self.context, peerId: self.context.account.peerId, scope: .saved))
case .savedMessages:
let _ = (self.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: self.context.account.peerId))
|> deliverOnMainQueue).startStandalone(next: { [weak self] peer in
guard let self, let peer = peer else {
return
}
if let controller = self.controller, let navigationController = controller.navigationController as? NavigationController {
self.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: self.context, chatLocation: .peer(peer)))
}
})
case .recentCalls:
push(CallListController(context: context, mode: .navigation))
case .devices:
let _ = (self.activeSessionsContextAndCount.get()
case .avatar:
self.openAvatarForEditing()
case .edit:
self.headerNode.navigationButtonContainer.performAction?(.edit, nil, nil)
case .proxy:
self.controller?.push(proxySettingsController(context: self.context))
case .stories:
push(PeerInfoStoryGridScreen(context: self.context, peerId: self.context.account.peerId, scope: .saved))
case .savedMessages:
let _ = (self.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: self.context.account.peerId))
|> deliverOnMainQueue).startStandalone(next: { [weak self] peer in
guard let self, let peer = peer else {
return
}
if let controller = self.controller, let navigationController = controller.navigationController as? NavigationController {
self.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: self.context, chatLocation: .peer(peer)))
}
})
case .recentCalls:
push(CallListController(context: context, mode: .navigation))
case .devices:
let _ = (self.activeSessionsContextAndCount.get()
|> take(1)
|> deliverOnMainQueue).startStandalone(next: { [weak self] activeSessionsContextAndCount in
if let strongSelf = self, let activeSessionsContextAndCount = activeSessionsContextAndCount {
let (activeSessionsContext, _, webSessionsContext) = activeSessionsContextAndCount
push(recentSessionsController(context: strongSelf.context, activeSessionsContext: activeSessionsContext, webSessionsContext: webSessionsContext, websitesOnly: false))
}
})
case .chatFolders:
push(chatListFilterPresetListController(context: self.context, mode: .default))
case .notificationsAndSounds:
if let settings = self.data?.globalSettings {
push(notificationsAndSoundsController(context: self.context, exceptionsList: settings.notificationExceptions))
}
case .privacyAndSecurity:
if let settings = self.data?.globalSettings {
let _ = (combineLatest(self.blockedPeers.get(), self.hasTwoStepAuth.get())
|> take(1)
|> deliverOnMainQueue).startStandalone(next: { [weak self] activeSessionsContextAndCount in
if let strongSelf = self, let activeSessionsContextAndCount = activeSessionsContextAndCount {
let (activeSessionsContext, _, webSessionsContext) = activeSessionsContextAndCount
push(recentSessionsController(context: strongSelf.context, activeSessionsContext: activeSessionsContext, webSessionsContext: webSessionsContext, websitesOnly: false))
|> deliverOnMainQueue).startStandalone(next: { [weak self] blockedPeersContext, hasTwoStepAuth in
if let strongSelf = self {
let loginEmailPattern = strongSelf.twoStepAuthData.get() |> map { data -> String? in
return data?.loginEmailPattern
}
push(privacyAndSecurityController(context: strongSelf.context, initialSettings: settings.privacySettings, updatedSettings: { [weak self] settings in
self?.privacySettings.set(.single(settings))
}, updatedBlockedPeers: { [weak self] blockedPeersContext in
self?.blockedPeers.set(.single(blockedPeersContext))
}, updatedHasTwoStepAuth: { [weak self] hasTwoStepAuthValue in
self?.hasTwoStepAuth.set(.single(hasTwoStepAuthValue))
}, focusOnItemTag: nil, activeSessionsContext: settings.activeSessionsContext, webSessionsContext: settings.webSessionsContext, blockedPeersContext: blockedPeersContext, hasTwoStepAuth: hasTwoStepAuth, loginEmailPattern: loginEmailPattern, updatedTwoStepAuthData: { [weak self] in
if let strongSelf = self {
strongSelf.twoStepAuthData.set(
strongSelf.context.engine.auth.twoStepAuthData()
|> map(Optional.init)
|> `catch` { _ -> Signal<TwoStepAuthData?, NoError> in
return .single(nil)
}
)
}
}, requestPublicPhotoSetup: { [weak self] completion in
if let strongSelf = self {
strongSelf.openAvatarForEditing(mode: .fallback, completion: completion)
}
}, requestPublicPhotoRemove: { [weak self] completion in
if let strongSelf = self {
strongSelf.openAvatarRemoval(mode: .fallback, completion: completion)
}
}))
}
})
case .chatFolders:
push(chatListFilterPresetListController(context: self.context, mode: .default))
case .notificationsAndSounds:
if let settings = self.data?.globalSettings {
push(notificationsAndSoundsController(context: self.context, exceptionsList: settings.notificationExceptions))
}
case .passwordSetup:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.6, execute: { [weak self] in
guard let self else {
return
}
case .privacyAndSecurity:
if let settings = self.data?.globalSettings {
let _ = (combineLatest(self.blockedPeers.get(), self.hasTwoStepAuth.get())
|> take(1)
|> deliverOnMainQueue).startStandalone(next: { [weak self] blockedPeersContext, hasTwoStepAuth in
if let strongSelf = self {
let loginEmailPattern = strongSelf.twoStepAuthData.get() |> map { data -> String? in
return data?.loginEmailPattern
}
push(privacyAndSecurityController(context: strongSelf.context, initialSettings: settings.privacySettings, updatedSettings: { [weak self] settings in
self?.privacySettings.set(.single(settings))
}, updatedBlockedPeers: { [weak self] blockedPeersContext in
self?.blockedPeers.set(.single(blockedPeersContext))
}, updatedHasTwoStepAuth: { [weak self] hasTwoStepAuthValue in
self?.hasTwoStepAuth.set(.single(hasTwoStepAuthValue))
}, focusOnItemTag: nil, activeSessionsContext: settings.activeSessionsContext, webSessionsContext: settings.webSessionsContext, blockedPeersContext: blockedPeersContext, hasTwoStepAuth: hasTwoStepAuth, loginEmailPattern: loginEmailPattern, updatedTwoStepAuthData: { [weak self] in
if let strongSelf = self {
strongSelf.twoStepAuthData.set(
strongSelf.context.engine.auth.twoStepAuthData()
|> map(Optional.init)
|> `catch` { _ -> Signal<TwoStepAuthData?, NoError> in
return .single(nil)
}
)
}
}, requestPublicPhotoSetup: { [weak self] completion in
if let strongSelf = self {
strongSelf.openAvatarForEditing(mode: .fallback, completion: completion)
}
}, requestPublicPhotoRemove: { [weak self] completion in
if let strongSelf = self {
strongSelf.openAvatarRemoval(mode: .fallback, completion: completion)
}
}))
}
})
}
case .passwordSetup:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.6, execute: { [weak self] in
guard let self else {
return
}
let _ = dismissServerProvidedSuggestion(account: self.context.account, suggestion: .setupPassword).startStandalone()
})
let controller = self.context.sharedContext.makeSetupTwoFactorAuthController(context: self.context)
push(controller)
case .dataAndStorage:
push(dataAndStorageController(context: self.context))
case .appearance:
push(themeSettingsController(context: self.context))
case .language:
push(LocalizationListController(context: self.context))
case .premium:
self.controller?.push(PremiumIntroScreen(context: self.context, modal: false, source: .settings))
case .premiumGift:
let options = Promise<[PremiumGiftCodeOption]>()
options.set(self.context.engine.payments.premiumGiftCodeOptions(peerId: nil))
var reachedLimitImpl: ((Int32) -> Void)?
let controller = self.context.sharedContext.makeContactMultiselectionController(ContactMultiselectionControllerParams(context: self.context, mode: .premiumGifting, options: [], isPeerEnabled: { peer in
if case let .user(user) = peer, user.botInfo == nil {
return true
} else {
return false
}
}, limit: 10, reachedLimit: { limit in
reachedLimitImpl?(limit)
}))
self.controller?.push(controller)
let _ = dismissServerProvidedSuggestion(account: self.context.account, suggestion: .setupPassword).startStandalone()
})
reachedLimitImpl = { [weak self, weak controller] limit in
guard let self, let controller else {
return
}
self.hapticFeedback.error()
controller.present(UndoOverlayController(presentationData: self.presentationData, content: .info(title: nil, text: self.presentationData.strings.Premium_Gift_ContactSelection_MaximumReached("\(limit)").string, timeout: nil, customUndoText: nil), elevatedLayout: true, position: .bottom, animateInAsReplacement: false, action: { _ in return false }), in: .current)
}
self.activeActionDisposable.set(combineLatest(queue: Queue.mainQueue(), controller.result, options.get())
.startStrict(next: { [weak self, weak controller] result, options in
guard let self, let controller else {
return
}
var peerIds: [PeerId] = []
if case let .result(peerIdsValue, _) = result {
peerIds = peerIdsValue.compactMap({ peerId in
if case let .peer(peerId) = peerId {
return peerId
} else {
return nil
}
})
}
let maxCount = 10
if peerIds.count > maxCount {
self.hapticFeedback.error()
controller.present(UndoOverlayController(presentationData: self.presentationData, content: .info(title: nil, text: self.presentationData.strings.Premium_Gift_ContactSelection_MaximumReached("\(maxCount)").string, timeout: nil, customUndoText: nil), elevatedLayout: true, position: .bottom, animateInAsReplacement: false, action: { _ in return false }), in: .current)
return
}
let mappedOptions = options.filter { $0.users == 1 }.map { CachedPremiumGiftOption(months: $0.months, currency: $0.currency, amount: $0.amount, botUrl: "", storeProductId: $0.storeProductId) }
let giftController = PremiumGiftScreen(context: self.context, peerIds: peerIds, options: mappedOptions, source: .settings, pushController: { [weak self] c in
self?.controller?.push(c)
}, completion: { [weak self] in
if let self, let navigationController = self.controller?.navigationController as? NavigationController {
var controllers = navigationController.viewControllers
controllers = controllers.filter { !($0 is ContactMultiselectionController) }
navigationController.setViewControllers(controllers, animated: true)
}
})
controller.push(giftController)
let controller = self.context.sharedContext.makeSetupTwoFactorAuthController(context: self.context)
push(controller)
case .dataAndStorage:
push(dataAndStorageController(context: self.context))
case .appearance:
push(themeSettingsController(context: self.context))
case .language:
push(LocalizationListController(context: self.context))
case .premium:
self.controller?.push(PremiumIntroScreen(context: self.context, modal: false, source: .settings))
case .premiumGift:
let controller = self.context.sharedContext.makePremiumGiftController(context: self.context)
self.controller?.push(controller)
case .stickers:
if let settings = self.data?.globalSettings {
push(installedStickerPacksController(context: self.context, mode: .general, archivedPacks: settings.archivedStickerPacks, updatedPacks: { [weak self] packs in
self?.archivedPacks.set(.single(packs))
}))
case .stickers:
if let settings = self.data?.globalSettings {
push(installedStickerPacksController(context: self.context, mode: .general, archivedPacks: settings.archivedStickerPacks, updatedPacks: { [weak self] packs in
self?.archivedPacks.set(.single(packs))
}))
}
case .passport:
self.controller?.push(SecureIdAuthController(context: self.context, mode: .list))
case .watch:
push(watchSettingsController(context: self.context))
case .support:
let supportPeer = Promise<PeerId?>()
supportPeer.set(context.engine.peers.supportPeerId())
self.controller?.present(textAlertController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, title: nil, text: self.presentationData.strings.Settings_FAQ_Intro, actions: [
}
case .passport:
self.controller?.push(SecureIdAuthController(context: self.context, mode: .list))
case .watch:
push(watchSettingsController(context: self.context))
case .support:
let supportPeer = Promise<PeerId?>()
supportPeer.set(context.engine.peers.supportPeerId())
self.controller?.present(textAlertController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, title: nil, text: self.presentationData.strings.Settings_FAQ_Intro, actions: [
TextAlertAction(type: .genericAction, title: presentationData.strings.Settings_FAQ_Button, action: { [weak self] in
self?.openFaq()
}), TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: { [weak self] in
@ -8817,81 +8759,81 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro
}
}))
})]), in: .window(.root))
case .faq:
self.openFaq()
case .tips:
self.openTips()
case .phoneNumber:
if let user = self.data?.peer as? TelegramUser, let phoneNumber = user.phone {
let introController = PrivacyIntroController(context: self.context, mode: .changePhoneNumber(phoneNumber), proceedAction: { [weak self] in
if let strongSelf = self, let navigationController = strongSelf.controller?.navigationController as? NavigationController {
navigationController.replaceTopController(ChangePhoneNumberController(context: strongSelf.context), animated: true)
}
})
push(introController)
}
case .username:
push(usernameSetupController(context: self.context))
case .addAccount:
let _ = (activeAccountsAndPeers(context: context)
|> take(1)
|> deliverOnMainQueue
).startStandalone(next: { [weak self] accountAndPeer, accountsAndPeers in
guard let strongSelf = self else {
return
}
var maximumAvailableAccounts: Int = 3
if accountAndPeer?.1.isPremium == true && !strongSelf.context.account.testingEnvironment {
maximumAvailableAccounts = 4
}
var count: Int = 1
for (accountContext, peer, _) in accountsAndPeers {
if !accountContext.account.testingEnvironment {
if peer.isPremium {
maximumAvailableAccounts = 4
}
count += 1
}
}
if count >= maximumAvailableAccounts {
var replaceImpl: ((ViewController) -> Void)?
let controller = PremiumLimitScreen(context: strongSelf.context, subject: .accounts, count: Int32(count), action: {
let controller = PremiumIntroScreen(context: strongSelf.context, source: .accounts)
replaceImpl?(controller)
return true
})
replaceImpl = { [weak controller] c in
controller?.replace(with: c)
}
if let navigationController = strongSelf.context.sharedContext.mainWindow?.viewController as? NavigationController {
navigationController.pushViewController(controller)
}
} else {
strongSelf.context.sharedContext.beginNewAuth(testingEnvironment: strongSelf.context.account.testingEnvironment)
case .faq:
self.openFaq()
case .tips:
self.openTips()
case .phoneNumber:
if let user = self.data?.peer as? TelegramUser, let phoneNumber = user.phone {
let introController = PrivacyIntroController(context: self.context, mode: .changePhoneNumber(phoneNumber), proceedAction: { [weak self] in
if let strongSelf = self, let navigationController = strongSelf.controller?.navigationController as? NavigationController {
navigationController.replaceTopController(ChangePhoneNumberController(context: strongSelf.context), animated: true)
}
})
case .logout:
if let user = self.data?.peer as? TelegramUser, let phoneNumber = user.phone {
if let controller = self.controller, let navigationController = controller.navigationController as? NavigationController {
self.controller?.push(logoutOptionsController(context: self.context, navigationController: navigationController, canAddAccounts: true, phoneNumber: phoneNumber))
push(introController)
}
case .username:
push(usernameSetupController(context: self.context))
case .addAccount:
let _ = (activeAccountsAndPeers(context: context)
|> take(1)
|> deliverOnMainQueue
).startStandalone(next: { [weak self] accountAndPeer, accountsAndPeers in
guard let strongSelf = self else {
return
}
var maximumAvailableAccounts: Int = 3
if accountAndPeer?.1.isPremium == true && !strongSelf.context.account.testingEnvironment {
maximumAvailableAccounts = 4
}
var count: Int = 1
for (accountContext, peer, _) in accountsAndPeers {
if !accountContext.account.testingEnvironment {
if peer.isPremium {
maximumAvailableAccounts = 4
}
count += 1
}
}
case .rememberPassword:
let context = self.context
let controller = TwoFactorDataInputScreen(sharedContext: self.context.sharedContext, engine: .authorized(self.context.engine), mode: .rememberPassword(doneText: self.presentationData.strings.TwoFactorSetup_Done_Action), stateUpdated: { _ in
}, presentation: .modalInLargeLayout)
controller.twoStepAuthSettingsController = { configuration in
return twoStepVerificationUnlockSettingsController(context: context, mode: .access(intro: false, data: .single(TwoStepVerificationUnlockSettingsControllerData.access(configuration: TwoStepVerificationAccessConfiguration(configuration: configuration, password: nil)))))
if count >= maximumAvailableAccounts {
var replaceImpl: ((ViewController) -> Void)?
let controller = PremiumLimitScreen(context: strongSelf.context, subject: .accounts, count: Int32(count), action: {
let controller = PremiumIntroScreen(context: strongSelf.context, source: .accounts)
replaceImpl?(controller)
return true
})
replaceImpl = { [weak controller] c in
controller?.replace(with: c)
}
if let navigationController = strongSelf.context.sharedContext.mainWindow?.viewController as? NavigationController {
navigationController.pushViewController(controller)
}
} else {
strongSelf.context.sharedContext.beginNewAuth(testingEnvironment: strongSelf.context.account.testingEnvironment)
}
controller.passwordRemembered = {
let _ = dismissServerProvidedSuggestion(account: context.account, suggestion: .validatePassword).startStandalone()
})
case .logout:
if let user = self.data?.peer as? TelegramUser, let phoneNumber = user.phone {
if let controller = self.controller, let navigationController = controller.navigationController as? NavigationController {
self.controller?.push(logoutOptionsController(context: self.context, navigationController: navigationController, canAddAccounts: true, phoneNumber: phoneNumber))
}
push(controller)
case .emojiStatus:
self.headerNode.invokeDisplayPremiumIntro()
case .powerSaving:
push(energySavingSettingsScreen(context: self.context))
}
case .rememberPassword:
let context = self.context
let controller = TwoFactorDataInputScreen(sharedContext: self.context.sharedContext, engine: .authorized(self.context.engine), mode: .rememberPassword(doneText: self.presentationData.strings.TwoFactorSetup_Done_Action), stateUpdated: { _ in
}, presentation: .modalInLargeLayout)
controller.twoStepAuthSettingsController = { configuration in
return twoStepVerificationUnlockSettingsController(context: context, mode: .access(intro: false, data: .single(TwoStepVerificationUnlockSettingsControllerData.access(configuration: TwoStepVerificationAccessConfiguration(configuration: configuration, password: nil)))))
}
controller.passwordRemembered = {
let _ = dismissServerProvidedSuggestion(account: context.account, suggestion: .validatePassword).startStandalone()
}
push(controller)
case .emojiStatus:
self.headerNode.invokeDisplayPremiumIntro()
case .powerSaving:
push(energySavingSettingsScreen(context: self.context))
}
}

View File

@ -337,12 +337,13 @@ final class ChannelAppearanceScreenComponent: Component {
private var updatedPeerProfileEmoji: Int64??
private var updatedPeerStatus: PeerEmojiStatus??
private var requiredLevel: Int?
private var requiredBoostSubject: BoostSubject?
private var currentTheme: PresentationThemeReference?
private var resolvedCurrentTheme: (reference: PresentationThemeReference, isDark: Bool, theme: PresentationTheme, wallpaper: TelegramWallpaper?)?
private var resolvingCurrentTheme: (reference: PresentationThemeReference, isDark: Bool, disposable: Disposable)?
private var premiumConfiguration: PremiumConfiguration?
private var boostLevel: Int?
private var boostStatus: ChannelBoostStatus?
private var boostStatusDisposable: Disposable?
@ -488,15 +489,16 @@ final class ChannelAppearanceScreenComponent: Component {
}
private func applySettings() {
guard let component = self.component, let resolvedState = self.resolveState(), let requiredLevel = self.requiredLevel else {
guard let component = self.component, let resolvedState = self.resolveState(), let premiumConfiguration = self.premiumConfiguration, let requiredBoostSubject = self.requiredBoostSubject else {
return
}
if self.isApplyingSettings {
return
}
let requiredLevel = requiredBoostSubject.requiredLevel(premiumConfiguration)
if let boostLevel = self.boostLevel, requiredLevel > boostLevel {
self.displayPremiumScreen(requiredLevel: requiredLevel)
self.displayBoostLevels(subject: requiredBoostSubject)
return
}
@ -545,7 +547,7 @@ final class ChannelAppearanceScreenComponent: Component {
})
}
private func displayPremiumScreen(requiredLevel: Int) {
private func displayBoostLevels(subject: BoostSubject) {
guard let component = self.component else {
return
}
@ -555,31 +557,25 @@ final class ChannelAppearanceScreenComponent: Component {
guard let self, let component = self.component, let peer, let status = self.boostStatus else {
return
}
let premiumConfiguration = PremiumConfiguration.with(appConfiguration: component.context.currentAppConfiguration.with { $0 })
let link = status.url
let controller = PremiumLimitScreen(context: component.context, subject: .storiesChannelBoost(peer: peer, boostSubject: .channelReactions(reactionCount: requiredLevel), isCurrent: true, level: Int32(status.level), currentLevelBoosts: Int32(status.currentLevelBoosts), nextLevelBoosts: status.nextLevelBoosts.flatMap(Int32.init), link: link, myBoostCount: 0, canBoostAgain: false), count: Int32(status.boosts), action: { [weak self] in
guard let self, let component = self.component else {
return true
let controller = PremiumBoostLevelsScreen(
context: component.context,
peer: peer,
subject: subject,
status: status,
openStats: { [weak self] in
guard let self else {
return
}
self.openBoostStats()
},
openGift: { [weak self] in
guard let self, let component = self.component else {
return
}
let controller = createGiveawayController(context: component.context, peerId: component.peerId, subject: .generic)
self.environment?.controller()?.push(controller)
}
UIPasteboard.general.string = link
let presentationData = component.context.sharedContext.currentPresentationData.with { $0 }
self.environment?.controller()?.present(UndoOverlayController(presentationData: presentationData, content: .linkCopied(text: presentationData.strings.ChannelBoost_BoostLinkCopied), elevatedLayout: false, position: .bottom, animateInAsReplacement: false, action: { _ in return false }), in: .current)
return true
}, openStats: { [weak self] in
guard let self else {
return
}
self.openBoostStats()
}, openGift: premiumConfiguration.giveawayGiftsPurchaseAvailable ? { [weak self] in
guard let self, let component = self.component else {
return
}
let controller = createGiveawayController(context: component.context, peerId: component.peerId, subject: .generic)
self.environment?.controller()?.push(controller)
} : nil)
)
self.environment?.controller()?.push(controller)
HapticFeedback().impact(.light)
@ -713,6 +709,14 @@ final class ChannelAppearanceScreenComponent: Component {
self.backgroundColor = environment.theme.list.blocksBackgroundColor
}
let premiumConfiguration: PremiumConfiguration
if let current = self.premiumConfiguration {
premiumConfiguration = current
} else {
premiumConfiguration = PremiumConfiguration.with(appConfiguration: component.context.currentAppConfiguration.with { $0 })
self.premiumConfiguration = premiumConfiguration
}
if self.contentsDataDisposable == nil {
self.contentsDataDisposable = (ContentsData.get(context: component.context, peerId: component.peerId)
|> deliverOnMainQueue).start(next: { [weak self] contentsData in
@ -747,7 +751,7 @@ final class ChannelAppearanceScreenComponent: Component {
return availableSize
}
var requiredLevel = 1
var requiredBoostSubject: BoostSubject = .nameColors
let replyIconLevel = 5
var profileIconLevel = 7
@ -762,23 +766,25 @@ final class ChannelAppearanceScreenComponent: Component {
emojiStatusLevel = Int(value)
}
}
let profileColor = resolvedState.profileColor
let replyFileId = resolvedState.replyFileId
if replyFileId != nil {
requiredLevel = max(requiredLevel, replyIconLevel)
requiredBoostSubject = .nameIcon
}
let profileColor = resolvedState.profileColor
if profileColor != nil {
requiredBoostSubject = .profileColors
}
let backgroundFileId = resolvedState.backgroundFileId
if profileColor != nil || backgroundFileId != nil {
requiredLevel = max(requiredLevel, profileIconLevel)
if backgroundFileId != nil {
requiredBoostSubject = .profileIcon
}
let emojiStatus = resolvedState.emojiStatus
if emojiStatus != nil {
requiredLevel = max(requiredLevel, emojiStatusLevel)
requiredBoostSubject = .emojiStatus
}
let statusFileId = emojiStatus?.fileId
@ -831,7 +837,7 @@ final class ChannelAppearanceScreenComponent: Component {
}
if self.currentTheme != nil && self.currentTheme != chatThemes.first {
requiredLevel = max(requiredLevel, themeLevel)
requiredBoostSubject = .wallpaper
}
if case let .user(user) = peer {
@ -852,7 +858,7 @@ final class ChannelAppearanceScreenComponent: Component {
)
}
self.requiredLevel = requiredLevel
self.requiredBoostSubject = requiredBoostSubject
let topInset: CGFloat = 24.0
let bottomContentInset: CGFloat = 24.0
@ -890,7 +896,7 @@ final class ChannelAppearanceScreenComponent: Component {
)),
maximumNumberOfLines: 0
))))
if replyFileId != nil, let boostLevel = self.boostLevel, boostLevel < replyIconLevel {
if replyFileId != nil, let boostLevel = self.boostLevel, boostLevel < premiumConfiguration.minChannelNameIconLevel {
replyLogoContents.append(AnyComponentWithIdentity(id: 1, component: AnyComponent(BoostLevelIconComponent(
strings: environment.strings,
level: replyIconLevel
@ -996,7 +1002,7 @@ final class ChannelAppearanceScreenComponent: Component {
)),
maximumNumberOfLines: 0
))))
if currentTheme != chatThemes[0], let boostLevel = self.boostLevel, boostLevel < themeLevel {
if currentTheme != chatThemes[0], let boostLevel = self.boostLevel, boostLevel < premiumConfiguration.minChannelCustomWallpaperLevel {
wallpaperLogoContents.append(AnyComponentWithIdentity(id: 1, component: AnyComponent(BoostLevelIconComponent(
strings: environment.strings,
level: themeLevel
@ -1077,7 +1083,7 @@ final class ChannelAppearanceScreenComponent: Component {
)),
maximumNumberOfLines: 0
))))
if backgroundFileId != nil, let boostLevel = self.boostLevel, boostLevel < profileIconLevel {
if backgroundFileId != nil, let boostLevel = self.boostLevel, boostLevel < premiumConfiguration.minChannelProfileIconLevel {
profileLogoContents.append(AnyComponentWithIdentity(id: 1, component: AnyComponent(BoostLevelIconComponent(
strings: environment.strings,
level: profileIconLevel
@ -1188,7 +1194,7 @@ final class ChannelAppearanceScreenComponent: Component {
)),
maximumNumberOfLines: 0
))))
if emojiStatus != nil, let boostLevel = self.boostLevel, boostLevel < emojiStatusLevel {
if emojiStatus != nil, let boostLevel = self.boostLevel, boostLevel < premiumConfiguration.minChannelEmojiStatusLevel {
emojiStatusContents.append(AnyComponentWithIdentity(id: 1, component: AnyComponent(BoostLevelIconComponent(
strings: environment.strings,
level: emojiStatusLevel
@ -1300,9 +1306,10 @@ final class ChannelAppearanceScreenComponent: Component {
Text(text: "Apply Changes", font: Font.semibold(17.0), color: environment.theme.list.itemCheckColors.foregroundColor)
)))
let requiredLevel = requiredBoostSubject.requiredLevel(premiumConfiguration)
if let boostLevel = self.boostLevel, requiredLevel > boostLevel {
buttonContents.append(AnyComponentWithIdentity(id: AnyHashable(1 as Int), component: AnyComponent(PremiumLockButtonSubtitleComponent(
count: requiredLevel,
count: Int(requiredLevel),
theme: environment.theme,
strings: environment.strings
))))

View File

@ -308,6 +308,7 @@ final class EditableTokenListNode: ASDisplayNode, UITextFieldDelegate {
self.placeholderNode = ASTextNode()
self.placeholderNode.isUserInteractionEnabled = false
self.placeholderNode.maximumNumberOfLines = 1
self.placeholderNode.displaysAsynchronously = false
self.placeholderNode.attributedText = NSAttributedString(string: placeholder, font: Font.regular(15.0), textColor: theme.placeholderTextColor)
self.textFieldScrollNode = ASScrollNode()

View File

@ -0,0 +1,9 @@
{
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"provides-namespace" : true
}
}

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "covercolor_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,298 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 4.334961 4.335022 cm
0.000000 0.478431 1.000000 scn
5.785331 19.957972 m
6.528978 19.999634 7.451835 20.000017 8.665000 20.000017 c
12.665000 20.000017 l
14.076105 20.000017 15.094439 19.999500 15.894838 19.934105 c
16.687475 19.869343 17.207642 19.744286 17.633049 19.527531 c
18.448732 19.111919 19.111902 18.448750 19.527514 17.633066 c
19.540468 17.607641 19.553097 17.581877 19.565403 17.555737 c
19.876143 17.857920 20.272636 17.995008 20.659822 17.995008 c
20.715282 17.995008 20.772083 17.992229 20.829720 17.986332 c
20.793468 18.071121 20.754486 18.154573 20.712553 18.236874 c
20.169430 19.302811 19.302795 20.169447 18.236856 20.712568 c
17.592707 21.040779 16.878029 21.188206 16.003143 21.259687 c
15.142270 21.330023 14.069739 21.330021 12.694985 21.330017 c
12.665000 21.330017 l
8.665000 21.330017 l
8.635015 21.330017 l
7.260260 21.330021 6.187730 21.330023 5.326858 21.259687 c
4.791599 21.215956 4.316306 21.143795 3.880442 21.019201 c
3.890508 20.977545 3.900183 20.939672 3.909794 20.904621 c
4.067824 20.860769 4.298860 20.812462 4.689383 20.734526 c
4.709473 20.730516 l
4.729430 20.725889 l
4.989579 20.665585 5.319242 20.527437 5.589351 20.228039 c
5.666474 20.142551 5.731493 20.051903 5.785331 19.957972 c
h
20.000000 12.665017 m
20.000000 12.493482 l
20.081505 12.334187 20.143467 12.137091 20.202589 11.886913 c
20.257551 11.654334 20.310059 11.375880 20.373531 11.039274 c
20.380175 11.004044 l
20.384460 10.981330 l
20.398952 10.904593 l
20.440691 10.758759 20.513735 10.665009 20.659822 10.665009 c
20.816343 10.665009 20.899822 10.758759 20.920691 10.904593 c
20.930399 10.957369 l
20.939493 11.006810 l
20.949696 11.062221 l
21.010153 11.390343 21.061460 11.662903 21.115931 11.891387 c
21.177372 12.149121 21.242840 12.350769 21.330002 12.512812 c
21.330002 12.665017 l
21.330002 12.694985 l
21.330002 12.695578 l
21.330002 13.540377 21.330002 14.271040 21.313671 14.908587 c
21.246031 15.055716 21.190304 15.232279 21.135550 15.448044 c
21.078949 15.671088 21.023384 15.936024 20.956772 16.253637 c
20.954065 16.266546 l
20.944857 16.310446 l
20.920691 16.425425 l
20.899822 16.571259 20.816343 16.665009 20.659822 16.665009 c
20.513735 16.665009 20.440691 16.571259 20.398952 16.425425 c
20.382780 16.348446 l
20.374823 16.310453 l
20.346594 16.175266 l
20.346577 16.175179 l
20.346514 16.174881 l
20.287724 15.893044 20.237925 15.654318 20.187643 15.450506 c
20.126453 15.202480 20.064547 15.006169 19.984858 14.846785 c
19.999807 14.239014 20.000000 13.524947 20.000000 12.665017 c
h
20.000000 8.665017 m
20.000000 9.476658 l
20.210934 9.380445 20.436922 9.335009 20.659822 9.335009 c
20.872946 9.335009 21.105841 9.376009 21.330002 9.477490 c
21.330002 8.665017 l
21.330002 8.635049 l
21.330006 7.260285 21.330008 6.187751 21.259672 5.326874 c
21.188190 4.451988 21.040764 3.737310 20.712553 3.093161 c
20.169430 2.027222 19.302795 1.160587 18.236856 0.617464 c
17.592707 0.289253 16.878029 0.141827 16.003143 0.070345 c
15.142266 0.000010 14.069732 0.000011 12.694968 0.000015 c
12.665000 0.000015 l
11.865768 0.000015 l
11.960117 0.227383 11.995039 0.458319 11.995039 0.665009 c
11.995039 0.867359 11.961351 1.099674 11.865652 1.330017 c
12.665000 1.330017 l
14.076104 1.330017 15.094439 1.330534 15.894838 1.395929 c
16.687475 1.460690 17.207642 1.585747 17.633049 1.802504 c
18.448732 2.218115 19.111902 2.881285 19.527514 3.696968 c
19.744270 4.122375 19.869328 4.642542 19.934088 5.435179 c
19.999483 6.235579 20.000000 7.253912 20.000000 8.665017 c
h
4.839176 1.463717 m
5.019685 1.436121 5.217113 1.413744 5.435162 1.395929 c
6.235561 1.330534 7.253895 1.330017 8.665000 1.330017 c
8.917085 1.330017 l
9.089041 1.282415 9.281227 1.236177 9.496844 1.188450 c
9.692974 1.145035 9.908489 1.100388 10.145796 1.052359 c
10.205174 1.040361 l
10.345039 1.012230 l
10.553735 0.970564 10.665039 0.873343 10.665039 0.665009 c
10.665039 0.456675 10.553735 0.359453 10.345039 0.303898 c
10.198030 0.275911 l
10.197282 0.275768 l
9.941029 0.226841 9.709103 0.181644 9.498774 0.137638 c
9.277951 0.091434 9.080934 0.046541 8.904569 0.000015 c
8.665000 0.000015 l
8.635032 0.000015 l
7.260268 0.000011 6.187734 0.000010 5.326858 0.070345 c
4.451973 0.141827 3.737294 0.289253 3.093144 0.617464 c
2.960023 0.685293 2.830011 0.758167 2.703350 0.835844 c
2.754484 0.931044 2.854025 0.984205 2.985039 1.012230 c
3.127856 1.040684 l
3.199264 1.054987 l
3.432428 1.101791 3.644342 1.145407 3.837319 1.187834 c
4.085014 1.242292 4.301511 1.294796 4.491705 1.349581 c
4.618789 1.386187 4.734118 1.423809 4.839176 1.463717 c
h
2.875670 2.346601 m
2.433620 2.718178 2.067664 3.176529 1.802487 3.696968 c
1.585731 4.122375 1.460673 4.642542 1.395913 5.435179 c
1.330517 6.235579 1.330000 7.253913 1.330000 8.665017 c
1.330000 12.665017 l
1.330000 13.877960 1.330382 14.800699 1.372022 15.544275 c
1.298869 15.586044 1.227320 15.634769 1.158346 15.691064 c
0.845746 15.946198 0.667074 16.291241 0.604262 16.638165 c
0.528978 17.029308 0.484173 17.260752 0.441731 17.424160 c
0.403060 17.434570 0.360459 17.445160 0.312742 17.456297 c
0.186964 17.018599 0.114287 16.541172 0.070330 16.003159 c
-0.000006 15.142287 -0.000004 14.069757 0.000000 12.695003 c
0.000000 12.665017 l
0.000000 8.665017 l
0.000000 8.635032 l
-0.000004 7.260277 -0.000006 6.187748 0.070330 5.326874 c
0.141811 4.451988 0.289237 3.737310 0.617448 3.093161 c
0.888394 2.561399 1.239850 2.079239 1.656398 1.662100 c
1.702632 1.724312 1.754487 1.784615 1.812361 1.842388 c
2.121504 2.150995 2.482045 2.264723 2.706828 2.312807 c
2.716328 2.314838 l
2.725856 2.316732 l
2.777156 2.326925 2.827075 2.336874 2.875670 2.346601 c
h
8.332518 4.500008 m
8.313696 4.589556 l
8.264160 4.874943 8.134342 5.234236 7.824867 5.533813 c
7.711397 5.643654 7.588928 5.730836 7.462107 5.798476 c
7.526080 5.818954 7.594269 5.830009 7.665039 5.830009 c
13.665039 5.830009 l
14.032309 5.830009 14.330039 5.532278 14.330039 5.165009 c
14.330039 4.797739 14.032309 4.500008 13.665039 4.500008 c
8.332518 4.500008 l
h
0.871893 18.684687 m
1.324676 19.403400 1.933466 20.011248 2.652964 20.462925 c
2.655908 20.453205 l
2.724026 20.229588 2.800882 20.070131 2.914969 19.948479 c
2.922706 19.940228 2.930614 19.932152 2.938702 19.924240 c
3.060279 19.805334 3.222550 19.723848 3.455697 19.651859 c
3.550516 19.622581 3.657057 19.594875 3.777352 19.566862 c
3.750158 19.554100 3.723372 19.540993 3.696951 19.527531 c
2.881269 19.111919 2.218098 18.448750 1.802487 17.633066 c
1.792514 17.613493 1.782735 17.593719 1.773147 17.573727 c
1.747679 17.687672 1.722332 17.789173 1.695314 17.880003 c
1.626394 18.111698 1.546598 18.273962 1.426172 18.396198 c
1.420495 18.401960 1.414726 18.407633 1.408866 18.413219 c
1.398906 18.422550 l
1.275799 18.535866 1.112183 18.613361 0.880678 18.682093 c
0.871893 18.684687 l
h
7.330039 12.165009 m
7.330039 14.006878 8.823170 15.500009 10.665039 15.500009 c
12.506908 15.500009 14.000039 14.006878 14.000039 12.165009 c
14.000039 10.323139 12.506908 8.830009 10.665039 8.830009 c
8.823170 8.830009 7.330039 10.323139 7.330039 12.165009 c
h
10.665039 16.830009 m
8.088631 16.830009 6.000039 14.741417 6.000039 12.165009 c
6.000039 9.588600 8.088631 7.500009 10.665039 7.500009 c
13.241447 7.500009 15.330039 9.588600 15.330039 12.165009 c
15.330039 14.741417 13.241447 16.830009 10.665039 16.830009 c
h
f*
n
Q
q
1.000000 0.000000 -0.000000 1.000000 4.000000 1.000000 cm
0.000000 0.478431 1.000000 scn
2.505619 20.000000 m
2.629215 20.000000 2.730338 20.067720 2.764045 20.214447 c
2.765165 20.220694 l
3.067419 21.907476 3.069506 21.919125 4.764046 22.234762 c
4.910113 22.268623 5.000000 22.358917 5.000000 22.494356 c
5.000000 22.641083 4.910113 22.731377 4.764046 22.765236 c
3.115385 23.094265 3.111211 23.114223 2.792694 24.637449 c
2.764045 24.774267 l
2.730338 24.920994 2.640450 25.000000 2.505619 25.000000 c
2.370788 25.000000 2.269665 24.909706 2.247193 24.774267 c
2.211266 24.607843 l
1.889418 23.113951 1.884714 23.092119 0.235956 22.765236 c
0.089889 22.731377 0.000000 22.629797 0.000000 22.494356 c
0.000000 22.370203 0.089889 22.268623 0.235956 22.234762 c
0.257272 22.230537 l
1.098396 22.063789 1.514779 21.981245 1.761133 21.731190 c
2.002639 21.486053 2.080742 21.079935 2.235412 20.275688 c
2.239290 20.255526 2.243215 20.235113 2.247193 20.214447 c
2.269665 20.079006 2.370788 20.000000 2.505619 20.000000 c
h
20.994783 14.000000 m
21.151304 14.000000 21.234783 14.093750 21.255651 14.239583 c
21.265360 14.292361 l
21.631285 16.282001 21.639460 16.326447 23.760000 16.729168 c
23.916521 16.770832 24.000000 16.843750 24.000000 17.000000 c
24.000000 17.156250 23.916521 17.229166 23.760000 17.260416 c
21.693047 17.675112 21.682287 17.726425 21.291733 19.588629 c
21.255651 19.760416 l
21.234783 19.906250 21.151304 20.000000 20.994783 20.000000 c
20.848696 20.000000 20.775652 19.906250 20.733913 19.760416 c
20.715693 19.673904 20.698399 19.591003 20.681820 19.511526 c
20.681557 19.510262 l
20.309143 17.724892 20.297527 17.669214 18.240000 17.260416 c
18.093912 17.229166 18.000000 17.156250 18.000000 17.000000 c
18.000000 16.843750 18.093912 16.770832 18.240000 16.729168 c
20.341238 16.321869 20.348595 16.282850 20.708492 14.374265 c
20.733913 14.239583 l
20.775652 14.093750 20.848696 14.000000 20.994783 14.000000 c
h
7.340869 0.319445 m
7.313043 0.125000 7.201739 0.000000 6.993044 0.000000 c
6.798261 0.000000 6.700870 0.125000 6.645218 0.319445 c
6.633644 0.380648 6.622359 0.440495 6.611322 0.499023 c
6.131461 3.043798 6.121650 3.095825 3.320000 3.638889 c
3.125217 3.694445 3.000000 3.791666 3.000000 4.000000 c
3.000000 4.208334 3.125217 4.305555 3.320000 4.347221 c
6.063370 4.892284 6.078856 4.966522 6.575408 7.347010 c
6.597620 7.453493 6.620794 7.564592 6.645218 7.680555 c
6.700870 7.875000 6.798261 8.000000 6.993044 8.000000 c
7.201739 8.000000 7.313043 7.875000 7.340869 7.680555 c
7.357415 7.601999 7.373423 7.525675 7.388978 7.451504 c
7.909715 4.968565 7.924064 4.900148 10.680000 4.347221 c
10.888696 4.305555 11.000000 4.208334 11.000000 4.000000 c
11.000000 3.791666 10.888696 3.694445 10.680000 3.638889 c
7.852612 3.101929 7.841713 3.042667 7.353813 0.389812 c
7.340869 0.319445 l
h
f*
n
Q
endstream
endobj
3 0 obj
10217
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000010307 00000 n
0000010331 00000 n
0000010504 00000 n
0000010578 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
10637
%%EOF

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "coverlogo_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,246 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 4.334961 2.674438 cm
0.000000 0.478431 1.000000 scn
8.635015 22.990601 m
8.665000 22.990601 l
12.665000 22.990601 l
12.694985 22.990601 l
14.069739 22.990604 15.142270 22.990606 16.003143 22.920271 c
16.878029 22.848789 17.592707 22.701363 18.236856 22.373152 c
19.302795 21.830030 20.169430 20.963394 20.712553 19.897457 c
21.040764 19.253307 21.188190 18.538628 21.259672 17.663742 c
21.330008 16.802868 21.330006 15.730331 21.330002 14.355569 c
21.330002 14.325601 l
21.330002 10.325601 l
21.330002 10.295632 l
21.330002 10.293933 l
21.330002 9.942374 21.330002 9.610583 21.328821 9.297045 c
21.262892 9.364636 21.195103 9.428216 21.126266 9.487875 c
20.797279 9.772998 20.412889 9.996371 19.999994 10.174931 c
20.000000 10.325601 l
20.000000 14.325601 l
20.000000 15.736705 19.999483 16.755039 19.934088 17.555439 c
19.869328 18.348076 19.744270 18.868240 19.527514 19.293650 c
19.111902 20.109333 18.448732 20.772503 17.633049 21.188114 c
17.207642 21.404869 16.687475 21.529926 15.894838 21.594688 c
15.094439 21.660084 14.076105 21.660601 12.665000 21.660601 c
8.665000 21.660601 l
7.253896 21.660601 6.235561 21.660084 5.435162 21.594688 c
4.642526 21.529926 4.122359 21.404869 3.696951 21.188114 c
2.881269 20.772503 2.218098 20.109333 1.802487 19.293650 c
1.585731 18.868240 1.460674 18.348076 1.395913 17.555439 c
1.330518 16.755039 1.330000 15.736706 1.330000 14.325601 c
1.330000 10.325601 l
1.330000 8.914496 1.330518 7.896162 1.395913 7.095762 c
1.460674 6.303125 1.585731 5.782959 1.802487 5.357552 c
2.218098 4.541868 2.881269 3.878698 3.696951 3.463087 c
4.122359 3.246330 4.642526 3.121273 5.435162 3.056513 c
6.235561 2.991117 7.253895 2.990601 8.665000 2.990601 c
11.191412 2.990601 l
11.134390 2.647013 11.166420 2.284071 11.302553 1.936174 c
11.340337 1.839617 11.384796 1.747652 11.435196 1.660599 c
8.665000 1.660599 l
8.635032 1.660599 l
7.260268 1.660595 6.187734 1.660593 5.326858 1.730928 c
4.451973 1.802410 3.737294 1.949837 3.093144 2.278048 c
2.027205 2.821171 1.160571 3.687805 0.617448 4.753744 c
0.289237 5.397894 0.141811 6.112572 0.070330 6.987457 c
-0.000006 7.848331 -0.000003 8.920860 0.000000 10.295615 c
0.000000 10.325601 l
0.000000 14.325601 l
0.000000 14.355586 l
-0.000003 15.730341 -0.000006 16.802872 0.070330 17.663742 c
0.141811 18.538628 0.289237 19.253307 0.617448 19.897457 c
1.160571 20.963394 2.027205 21.830030 3.093144 22.373152 c
3.737294 22.701363 4.451973 22.848789 5.326858 22.920271 c
6.187730 22.990606 7.260260 22.990604 8.635015 22.990601 c
h
7.665039 7.490592 m
12.464535 7.490592 l
12.354064 7.046155 12.303906 6.595884 12.295394 6.160591 c
7.665039 6.160591 l
7.297770 6.160591 7.000039 6.458323 7.000039 6.825592 c
7.000039 7.192862 7.297770 7.490592 7.665039 7.490592 c
h
10.665039 17.160591 m
8.823170 17.160591 7.330039 15.667461 7.330039 13.825592 c
7.330039 11.983723 8.823170 10.490592 10.665039 10.490592 c
12.506908 10.490592 14.000039 11.983723 14.000039 13.825592 c
14.000039 15.667461 12.506908 17.160591 10.665039 17.160591 c
h
6.000039 13.825592 m
6.000039 16.402000 8.088631 18.490593 10.665039 18.490593 c
13.241447 18.490593 15.330039 16.402000 15.330039 13.825592 c
15.330039 11.249184 13.241447 9.160592 10.665039 9.160592 c
8.088631 9.160592 6.000039 11.249184 6.000039 13.825592 c
h
18.076694 2.693638 m
18.076731 2.693611 18.075304 2.693218 18.072298 2.692541 c
18.076694 2.693638 l
h
18.314571 9.312943 m
16.560547 9.717718 15.229359 9.421805 14.419174 8.481991 c
13.649857 7.589583 13.526571 6.306986 13.694222 5.133429 c
13.760220 4.671452 13.874044 4.203140 14.026990 3.747423 c
13.780793 3.639557 13.564684 3.547737 13.390292 3.474932 c
13.242114 3.413071 13.124260 3.365025 13.043900 3.332621 c
13.003727 3.316420 12.972940 3.304136 12.952440 3.295998 c
12.929521 3.286926 l
12.924061 3.284779 l
12.922868 3.284309 l
12.922704 3.284246 l
12.922660 3.284229 l
12.580679 3.150377 12.411937 2.764647 12.545763 2.422647 c
12.679595 2.080631 13.065348 1.911865 13.407365 2.045696 c
13.165039 2.664974 l
13.407365 2.045696 13.407501 2.045750 13.407681 2.045820 c
13.408259 2.046047 l
13.410201 2.046810 l
13.417178 2.049555 l
13.443220 2.059860 l
13.465841 2.068840 13.498837 2.082008 13.541305 2.099133 c
13.626228 2.133379 13.749097 2.183477 13.902677 2.247593 c
14.080276 2.321735 14.299215 2.414738 14.548260 2.523756 c
14.691913 2.249905 14.849012 1.989143 15.017074 1.746874 c
15.651031 0.832989 16.574495 -0.000027 17.665039 -0.000027 c
18.450308 -0.000027 19.064745 0.122793 19.472816 0.472569 c
19.926409 0.861362 19.955040 1.377323 19.955040 1.664974 c
19.955040 1.759125 19.953171 1.815250 19.951641 1.861010 c
19.951641 1.861078 l
19.950190 1.904610 19.949051 1.938766 19.950130 1.987379 c
19.996878 1.994202 20.066002 1.999973 20.165039 1.999973 c
20.202976 1.999973 20.236422 1.999153 20.265808 1.997782 c
20.255564 1.968094 20.243641 1.935163 20.229881 1.898470 c
20.220390 1.873163 20.209251 1.844156 20.197189 1.812750 c
20.197121 1.812567 l
20.161291 1.719267 20.117346 1.604826 20.084358 1.503328 c
20.040909 1.369633 19.983757 1.166880 19.992804 0.949789 c
20.003326 0.697224 20.107481 0.402870 20.395264 0.203911 c
20.638384 0.035828 20.925451 -0.000027 21.165039 -0.000027 c
22.076580 -0.000027 22.721048 0.308167 23.142962 0.645695 c
23.349699 0.811085 23.497112 0.978571 23.595476 1.109722 c
23.644770 1.175447 23.682211 1.232664 23.709059 1.276884 c
23.722500 1.299023 23.733345 1.317999 23.741741 1.333267 c
23.752544 1.353363 l
23.756618 1.361227 l
23.758333 1.364594 l
23.759109 1.366135 l
23.759478 1.366867 l
23.759657 1.367224 23.759834 1.367577 23.165039 1.664974 c
23.759834 1.367577 l
23.924080 1.696072 23.790932 2.095520 23.462437 2.259768 c
23.137493 2.422237 22.743128 2.293713 22.575657 1.972963 c
22.572191 1.967125 l
22.565836 1.956657 22.552496 1.935749 22.531477 1.907722 c
22.489216 1.851376 22.417879 1.768860 22.312117 1.684250 c
22.143173 1.549095 21.868736 1.393639 21.442472 1.345188 c
21.452667 1.371820 21.463539 1.400387 21.475197 1.431477 c
21.523590 1.560520 21.584122 1.730461 21.617954 1.906981 c
21.651028 2.079536 21.673241 2.328693 21.576759 2.585970 c
21.345695 3.202147 20.701733 3.329973 20.165039 3.329973 c
19.590872 3.329973 19.026146 3.186672 18.757744 2.649870 c
18.647095 2.428570 18.626541 2.205524 18.621502 2.054316 c
18.618761 1.972124 18.621626 1.839178 18.623566 1.749092 c
18.623566 1.749023 l
18.624386 1.711035 18.625038 1.680676 18.625038 1.664974 c
18.625038 1.560623 18.617241 1.512627 18.610115 1.488873 c
18.609358 1.486341 l
18.608322 1.482874 18.608112 1.482170 18.608000 1.482183 c
18.607971 1.482187 18.607948 1.482237 18.607922 1.482300 c
18.607841 1.482479 18.607714 1.482767 18.607262 1.482380 c
18.577833 1.457153 18.379770 1.329973 17.665039 1.329973 c
17.255583 1.329973 16.679049 1.684458 16.109880 2.504948 c
15.986086 2.683403 15.868931 2.875460 15.760148 3.077400 c
16.623543 3.489267 17.604532 3.997330 18.459560 4.541439 c
18.993484 4.881208 19.497082 5.246778 19.896252 5.624077 c
20.280729 5.987486 20.640053 6.427725 20.769695 6.927771 c
20.838366 7.192643 20.843403 7.478890 20.748184 7.764547 c
20.653913 8.047359 20.476532 8.284380 20.251934 8.479030 c
19.820587 8.852865 19.161325 9.117538 18.314571 9.312943 c
h
17.745518 5.663507 m
16.968725 5.169186 16.063925 4.697718 15.244255 4.304955 c
15.138708 4.641562 15.059001 4.984503 15.010856 5.321518 c
14.866007 6.335461 15.023972 7.146614 15.426529 7.613581 c
15.788219 8.033141 16.519531 8.362228 18.015507 8.017003 c
18.793753 7.837408 19.196991 7.633331 19.380878 7.473964 c
19.463898 7.402012 19.482317 7.356318 19.486435 7.343964 c
19.489605 7.334455 19.495619 7.313085 19.482258 7.261551 c
19.447838 7.128784 19.311068 6.901054 18.982655 6.590637 c
18.668934 6.294106 18.242844 5.979988 17.745518 5.663507 c
h
19.864645 1.965506 m
19.864059 1.965872 19.867970 1.968330 19.878134 1.971779 c
19.870312 1.966864 19.865231 1.965137 19.864645 1.965506 c
h
20.452225 1.969948 m
20.454456 1.969154 20.455809 1.968904 20.456102 1.969086 c
20.456757 1.969490 20.452177 1.972034 20.440397 1.975502 c
20.445440 1.972702 20.449492 1.970919 20.452225 1.969948 c
h
20.316206 2.188324 m
20.316275 2.190765 l
20.316305 2.190790 20.316311 2.189999 20.316206 2.188324 c
h
f*
n
Q
endstream
endobj
3 0 obj
8281
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000008371 00000 n
0000008394 00000 n
0000008567 00000 n
0000008641 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
8700
%%EOF

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "backgroundphoto_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,261 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.748535 3.773193 cm
0.000000 0.478431 1.000000 scn
4.757206 18.226807 m
4.880801 18.226807 4.981925 18.294527 5.015633 18.441254 c
5.016752 18.447500 l
5.319006 20.134283 5.321093 20.145931 7.015633 20.461569 c
7.161700 20.495430 7.251587 20.585724 7.251587 20.721163 c
7.251587 20.867889 7.161700 20.958183 7.015633 20.992043 c
7.009992 20.993170 7.004371 20.994291 6.998768 20.995411 c
6.974089 21.000338 6.949782 21.005196 6.925841 21.009993 c
5.366710 21.322323 5.356907 21.369200 5.044281 22.864256 c
5.015633 23.001074 l
4.981925 23.147800 4.892037 23.226807 4.757206 23.226807 c
4.622375 23.226807 4.521252 23.136513 4.498779 23.001074 c
4.462852 22.834650 l
4.427909 22.672459 4.396705 22.527618 4.366728 22.397856 c
4.366711 22.397854 4.366693 22.397850 4.366676 22.397848 c
4.333385 22.253736 4.301609 22.128222 4.267910 22.018188 c
4.198979 21.793116 4.122003 21.632818 4.007557 21.510632 c
3.997129 21.499498 3.986389 21.488682 3.975317 21.478161 c
3.854285 21.363161 3.693424 21.283558 3.463661 21.213011 c
3.353117 21.179068 3.226623 21.147223 3.080942 21.114538 c
3.080941 21.114532 3.080940 21.114527 3.080939 21.114521 c
2.910971 21.076389 2.714886 21.037117 2.487543 20.992043 c
2.341476 20.958183 2.251587 20.856604 2.251587 20.721163 c
2.251587 20.597010 2.341476 20.495430 2.487543 20.461569 c
2.508859 20.457344 l
2.742526 20.411020 2.943414 20.371197 3.116983 20.332474 c
3.116984 20.332472 3.116984 20.332468 3.116984 20.332466 c
3.248639 20.303093 3.364575 20.274355 3.467176 20.243895 c
3.698681 20.175165 3.862297 20.097668 3.985404 19.984352 c
3.995363 19.975023 l
4.001225 19.969435 4.006993 19.963762 4.012670 19.958000 c
4.133096 19.835764 4.212892 19.673500 4.281812 19.441807 c
4.347450 19.221142 4.403223 18.937502 4.474832 18.565485 c
4.480278 18.537180 l
4.498730 18.441257 l
4.518395 18.322731 4.598297 18.247425 4.708312 18.230465 c
4.722797 18.228230 4.737804 18.227007 4.753265 18.226830 c
4.754576 18.226814 4.755889 18.226807 4.757206 18.226807 c
h
24.246370 12.226807 m
24.402891 12.226807 24.486370 12.320557 24.507238 12.466390 c
24.516947 12.519168 l
24.882872 14.508809 24.891047 14.553254 27.011587 14.955974 c
27.168108 14.997640 27.251587 15.070557 27.251587 15.226807 c
27.251587 15.383057 27.168108 15.455973 27.011587 15.487223 c
24.944633 15.901918 24.933874 15.953232 24.543320 17.815435 c
24.507238 17.987223 l
24.488979 18.114828 24.422783 18.202557 24.301662 18.222494 c
24.284359 18.225342 24.265936 18.226807 24.246370 18.226807 c
24.246353 18.226807 24.246338 18.226807 24.246321 18.226807 c
24.100233 18.226807 24.027189 18.133057 23.985451 17.987223 c
23.969278 17.910244 l
23.961321 17.872252 l
23.933092 17.737064 l
23.874269 17.455059 23.824446 17.216208 23.774141 17.012304 c
23.703089 16.724310 23.631075 16.506029 23.531374 16.334337 c
23.434690 16.167839 23.311968 16.045153 23.138842 15.945187 c
23.118267 15.933308 23.096983 15.921753 23.074944 15.910480 c
23.074944 15.910469 23.074938 15.910458 23.074938 15.910446 c
22.751860 15.745199 22.267017 15.641289 21.491587 15.487223 c
21.345499 15.455973 21.251587 15.383057 21.251587 15.226807 c
21.251587 15.070557 21.345499 14.997640 21.491587 14.955974 c
22.112539 14.835609 22.550634 14.747408 22.869003 14.633615 c
22.869003 14.633608 22.868999 14.633598 22.868999 14.633592 c
22.974224 14.595980 23.066374 14.555576 23.147720 14.510285 c
23.308416 14.420817 23.426970 14.312297 23.520954 14.168653 c
23.636623 13.991866 23.715080 13.761876 23.789087 13.448711 c
23.844049 13.216132 23.896557 12.937678 23.960030 12.601073 c
23.966673 12.565842 l
23.970533 12.545368 l
23.970539 12.545444 23.970545 12.545519 23.970551 12.545594 c
23.985500 12.466390 l
24.027239 12.320557 24.100283 12.226807 24.246370 12.226807 c
h
14.251544 19.561806 m
12.493417 19.561806 10.400085 19.873159 8.510571 20.249079 c
8.558092 20.402725 8.581537 20.562056 8.581537 20.721169 c
8.581537 21.033274 8.493270 21.363928 8.286821 21.652071 c
10.251558 21.242676 12.461045 20.891806 14.251544 20.891806 c
16.688210 20.891806 19.900843 21.541620 22.216579 22.104431 c
22.244366 22.111183 l
22.720421 22.226892 23.116310 22.323116 23.429131 22.373486 c
23.730738 22.422050 24.085314 22.453606 24.411896 22.324726 c
24.854853 22.149918 25.174654 21.830116 25.349463 21.387159 c
25.478342 21.060577 25.446789 20.706001 25.398224 20.404392 c
25.350077 20.105377 25.260033 19.730461 25.151121 19.282179 c
24.860535 19.481441 24.535259 19.556807 24.246321 19.556807 c
24.109430 19.556807 23.971371 19.539661 23.836353 19.504152 c
23.836788 19.505939 l
23.960970 20.016895 24.044144 20.361244 24.085136 20.615826 c
24.116716 20.811960 24.110395 20.888866 24.109098 20.904648 c
24.108902 20.907393 l
24.071024 20.999317 24.024054 21.046288 23.932131 21.084166 c
23.929386 21.084362 l
23.913607 21.085659 23.836702 21.091982 23.640562 21.060400 c
23.385981 21.019407 23.041632 20.936234 22.530676 20.812052 c
20.206852 20.247274 16.860207 19.561806 14.251544 19.561806 c
h
22.631655 12.467669 m
22.602537 12.041012 22.586542 11.625299 22.586542 11.226807 c
22.586542 8.618143 23.272011 5.271498 23.836788 2.947674 c
23.960970 2.436718 24.044144 2.092369 24.085136 1.837788 c
24.116716 1.641655 24.110395 1.564749 24.109098 1.548964 c
24.108902 1.546219 l
24.071024 1.454296 24.024054 1.407326 23.932131 1.369448 c
23.929386 1.369251 l
23.913601 1.367954 23.836695 1.361633 23.640562 1.393213 c
23.385983 1.434206 23.041632 1.517380 22.530676 1.641562 c
21.044149 2.002842 19.139084 2.413511 17.276388 2.662546 c
17.014088 2.219273 16.704496 1.807848 16.354368 1.435024 c
18.352102 1.218418 20.523932 0.760559 22.216579 0.349182 c
22.244303 0.342443 l
22.244366 0.342426 l
22.244583 0.342375 l
22.720547 0.226690 23.116360 0.130489 23.429131 0.080126 c
23.730738 0.031561 24.085314 0.000008 24.411896 0.128887 c
24.854853 0.303696 25.174654 0.623497 25.349463 1.066454 c
25.478342 1.393036 25.446789 1.747612 25.398224 2.049219 c
25.347860 2.361990 25.251659 2.757803 25.135975 3.233767 c
25.135923 3.233984 l
25.135906 3.234047 l
25.129168 3.261770 l
24.588932 5.484617 23.968536 8.533854 23.919634 10.929951 c
23.636820 10.988220 23.363411 11.124744 23.137119 11.350643 c
22.867224 11.620071 22.756607 11.926374 22.706791 12.100424 c
22.689970 12.159196 l
22.678612 12.219262 l
22.659204 12.321956 l
22.659182 12.322084 l
22.631655 12.467669 l
h
5.229526 16.966501 m
5.066857 16.917168 4.905797 16.896811 4.757156 16.896811 c
4.455744 16.896811 4.121994 16.979877 3.826485 17.190544 c
3.976629 16.469921 4.118893 15.716393 4.238856 14.962700 c
4.623399 15.231826 5.036524 15.463335 5.473050 15.652042 c
5.397152 16.096504 5.315010 16.536770 5.229526 16.966501 c
h
12.263523 13.442030 m
11.783911 13.557175 11.184472 13.561807 9.751537 13.561807 c
9.615499 13.561807 l
8.312892 13.561807 7.767750 13.557974 7.329850 13.462691 c
5.671649 13.101883 4.376461 11.806694 4.015652 10.148493 c
3.920388 9.710676 3.916537 9.160183 3.916537 7.845830 c
3.916538 7.806034 l
3.916559 7.307418 3.916570 7.007401 3.886761 6.717808 c
3.773773 5.620153 3.342675 4.579391 2.646411 3.723339 c
2.462717 3.497488 2.252196 3.286983 1.902508 2.937325 c
1.874773 2.909592 l
1.685575 2.720392 1.557790 2.592432 1.467287 2.494526 c
1.400132 2.421877 1.374395 2.387430 1.367698 2.378468 c
1.365830 2.376049 l
1.275192 2.194115 1.366466 1.973759 1.559202 1.909201 c
1.562236 1.908812 l
1.573308 1.907209 1.615863 1.901051 1.714722 1.897165 c
1.847948 1.891930 2.028787 1.891808 2.296353 1.891808 c
9.751537 1.891808 l
11.184472 1.891808 11.783911 1.896439 12.263523 2.011583 c
13.848611 2.392128 15.086215 3.629734 15.466761 5.214821 c
15.581905 5.694433 15.586536 6.293873 15.586536 7.726807 c
15.586536 9.159741 15.581905 9.759180 15.466761 10.238792 c
15.086215 11.823880 13.848611 13.061484 12.263523 13.442030 c
h
9.862087 14.891813 m
11.151264 14.891936 11.921191 14.892009 12.574005 14.735282 c
14.645407 14.237983 16.262714 12.620676 16.760014 10.549274 c
16.916740 9.896458 16.916668 9.126529 16.916546 7.837345 c
16.916538 7.726807 l
16.916546 7.616268 l
16.916668 6.327084 16.916740 5.557156 16.760014 4.904339 c
16.262714 2.832937 14.645407 1.215630 12.574005 0.718330 c
11.921206 0.561605 11.151302 0.561678 9.862179 0.561798 c
9.862162 0.561798 l
9.862096 0.561798 l
9.751537 0.561806 l
2.296353 0.561806 l
2.282249 0.561806 l
2.281802 0.561806 l
2.032090 0.561806 1.824975 0.561806 1.662498 0.568192 c
1.507339 0.574287 1.327234 0.587326 1.161439 0.640018 c
0.177813 0.952635 -0.287356 2.075651 0.187120 2.992233 c
0.267095 3.146727 0.385229 3.283298 0.490633 3.397324 c
0.601075 3.516802 0.747639 3.663364 0.924361 3.840084 c
0.934321 3.850042 l
1.319947 4.235668 1.479205 4.396076 1.614605 4.562550 c
2.147404 5.217625 2.477290 6.014040 2.563752 6.853992 c
2.585719 7.067402 2.586537 7.295616 2.586537 7.845830 c
2.586531 7.947674 l
2.586429 9.129831 2.586368 9.835228 2.716062 10.431272 c
3.187567 12.598217 4.880127 14.290776 7.047072 14.762282 c
7.643106 14.891973 8.342933 14.891913 9.514974 14.891812 c
9.514991 14.891812 l
9.615499 14.891807 l
9.751537 14.891807 l
9.862087 14.891813 l
h
f*
n
Q
endstream
endobj
3 0 obj
9148
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000009238 00000 n
0000009261 00000 n
0000009434 00000 n
0000009508 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
9567
%%EOF

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "status_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,132 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
0.707107 0.707107 -0.707107 0.707107 21.364439 -3.965147 cm
0.000000 0.478431 1.000000 scn
8.477501 26.956255 m
7.981826 26.956255 7.580001 26.554430 7.580001 26.058754 c
7.580001 24.808754 l
7.580001 20.121254 l
7.580001 18.246254 l
7.580001 17.878986 7.282270 17.581255 6.915001 17.581255 c
6.547732 17.581255 6.250001 17.878986 6.250001 18.246254 c
6.250001 20.121254 l
6.250001 24.808754 l
6.250001 25.304430 5.848176 25.706255 5.352501 25.706255 c
4.856825 25.706255 4.455001 25.304430 4.455001 24.808754 c
4.455001 22.308754 l
4.455001 18.871254 l
4.455001 17.621254 l
4.455001 17.253986 4.157270 16.956255 3.790001 16.956255 c
3.422732 16.956255 3.125001 17.253986 3.125001 17.621254 c
3.125001 18.871254 l
3.125001 22.308754 l
3.125001 22.804430 2.723176 23.206255 2.227501 23.206255 c
1.731825 23.206255 1.330001 22.804430 1.330001 22.308754 c
1.330001 15.746254 l
1.330001 15.155370 1.330360 14.892024 1.344635 14.674225 c
1.568969 11.251553 4.295299 8.525223 7.717971 8.300888 c
7.935771 8.286613 8.199116 8.286255 8.790001 8.286255 c
11.187643 8.286255 13.360397 9.698269 14.334173 11.889265 c
17.002613 17.893257 l
17.168566 18.266649 17.011471 18.704527 16.645998 18.887264 c
16.268457 19.076035 15.809368 18.923004 15.620598 18.545464 c
13.759795 14.823858 l
13.621869 14.548006 13.312377 14.403186 13.012215 14.474044 c
12.712053 14.544903 12.500001 14.812843 12.500001 15.121255 c
12.500001 24.808754 l
12.500001 25.304430 12.098177 25.706255 11.602501 25.706255 c
11.106825 25.706255 10.705001 25.304430 10.705001 24.808754 c
10.705001 18.871254 l
10.705001 18.246254 l
10.705001 17.878986 10.407270 17.581255 10.040001 17.581255 c
9.672731 17.581255 9.375001 17.878986 9.375001 18.246254 c
9.375001 18.871254 l
9.375001 24.808754 l
9.375001 26.058754 l
9.375001 26.554430 8.973177 26.956255 8.477501 26.956255 c
h
10.582383 26.789459 m
10.279950 27.660770 9.451770 28.286255 8.477501 28.286255 c
7.503232 28.286255 6.675053 27.660770 6.372619 26.789459 c
6.066981 26.947191 5.720144 27.036255 5.352501 27.036255 c
4.122287 27.036255 3.125001 26.038969 3.125001 24.808754 c
3.125001 24.348055 l
2.850438 24.469067 2.546816 24.536255 2.227501 24.536255 c
0.997287 24.536255 0.000000 23.538969 0.000000 22.308754 c
0.000000 15.746254 l
0.000000 15.713201 l
0.000000 15.713175 l
-0.000006 15.164083 -0.000010 14.854123 0.017483 14.587238 c
0.285469 10.498560 3.542306 7.241722 7.630985 6.973736 c
7.897878 6.956242 8.207848 6.956245 8.756974 6.956253 c
8.790001 6.956253 l
11.713245 6.956253 14.362301 8.677807 15.549542 11.349100 c
18.217983 17.353092 l
18.672722 18.376255 18.242252 19.576122 17.240791 20.076851 c
16.206259 20.594118 14.948276 20.174789 14.431009 19.140257 c
13.830001 17.938240 l
13.830001 24.808754 l
13.830001 26.038969 12.832715 27.036255 11.602501 27.036255 c
11.234859 27.036255 10.888021 26.947191 10.582383 26.789459 c
h
f*
n
Q
endstream
endobj
3 0 obj
2901
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002991 00000 n
0000003014 00000 n
0000003187 00000 n
0000003261 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
3320
%%EOF

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "linkcolor_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,219 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 4.284912 3.292084 cm
0.000000 0.478431 1.000000 scn
18.746542 19.734386 m
16.935171 21.545755 13.998362 21.545755 12.186993 19.734386 c
9.686993 17.234386 l
9.427294 16.974688 9.006239 16.974688 8.746540 17.234386 c
8.486842 17.494083 8.486842 17.915138 8.746540 18.174839 c
11.246540 20.674837 l
13.577307 23.005604 17.356226 23.005604 19.686995 20.674837 c
20.179169 20.182663 20.567411 19.625917 20.851727 19.031868 c
20.803699 19.035963 20.756313 19.037916 20.709869 19.037916 c
20.316519 19.037916 19.913555 18.896423 19.600668 18.584080 c
19.592823 18.576187 l
19.378183 18.993382 19.096090 19.384838 18.746542 19.734386 c
h
20.260195 12.897485 m
20.920572 13.785061 21.302557 14.814440 21.406155 15.866064 c
21.318581 16.029062 21.251387 16.231705 21.185596 16.490952 c
21.128996 16.713997 21.073431 16.978931 21.006819 17.296545 c
21.004112 17.309454 l
20.994904 17.353354 l
20.970737 17.468332 l
20.949869 17.614166 20.866390 17.707916 20.709869 17.707916 c
20.563782 17.707916 20.490738 17.614166 20.448999 17.468332 c
20.432827 17.391354 l
20.424870 17.353361 l
20.396641 17.218174 l
20.396624 17.218086 l
20.396561 17.217789 l
20.337770 16.935951 20.287971 16.697226 20.237690 16.493414 c
20.189157 16.296696 20.140177 16.132504 20.082228 15.993470 c
20.015707 15.323755 19.803888 14.665747 19.446770 14.070580 c
19.506126 14.045732 19.560778 14.019506 19.611269 13.991395 c
19.771965 13.901926 19.890518 13.793406 19.984503 13.649761 c
20.100172 13.472975 20.178629 13.242985 20.252636 12.929821 c
20.260195 12.897485 l
h
18.807087 12.887949 m
18.729610 12.911728 18.639875 12.935325 18.532253 12.960550 c
16.246542 10.674838 l
14.435172 8.863469 11.498362 8.863469 9.686993 10.674838 c
9.446299 10.915532 9.238028 11.175499 9.061817 11.449507 c
8.863164 11.758413 8.451705 11.847792 8.142797 11.649138 c
7.833890 11.450484 7.744512 11.039025 7.943166 10.730118 c
8.170393 10.376781 8.438306 10.042621 8.746540 9.734386 c
11.077307 7.403620 14.856226 7.403620 17.186995 9.734386 c
19.143881 11.691273 l
19.142160 11.700371 l
19.122753 11.803064 l
19.122730 11.803185 l
19.031767 12.284682 18.978355 12.567389 18.919037 12.776890 c
18.909550 12.810394 18.901060 12.837479 18.893795 12.859035 c
18.871344 12.867266 18.842791 12.876991 18.807087 12.887949 c
h
2.986220 3.401642 m
2.884041 3.487600 2.784698 3.578667 2.688527 3.674837 c
0.877158 5.486206 0.877158 8.423016 2.688527 10.234385 c
5.188527 12.734385 l
6.999896 14.545753 9.936707 14.545753 11.748075 12.734385 c
11.988770 12.493690 12.197041 12.233724 12.373251 11.959716 c
12.571904 11.650809 12.983363 11.561431 13.292271 11.760084 c
13.601177 11.958738 13.690556 12.370197 13.491901 12.679105 c
13.264675 13.032442 12.996762 13.366602 12.688528 13.674836 c
10.357761 16.005604 6.578842 16.005604 4.248075 13.674836 c
1.748075 11.174836 l
-0.579096 8.847667 -0.582686 5.076809 1.737303 2.745184 c
1.775440 2.793240 1.817077 2.840044 1.862407 2.885296 c
2.171551 3.193903 2.532092 3.307631 2.756874 3.355715 c
2.766374 3.357746 l
2.775903 3.359640 l
2.848739 3.374111 2.918794 3.388094 2.986220 3.401642 c
h
4.785145 2.468969 m
4.709134 2.442739 4.628162 2.417379 4.541751 2.392488 c
4.351557 2.337704 4.135060 2.285200 3.887365 2.230742 c
3.694388 2.188314 3.482475 2.144699 3.249310 2.097895 c
3.177902 2.083591 l
3.035085 2.055138 l
2.919933 2.030506 2.829098 1.986454 2.774070 1.911509 c
4.867711 0.582691 7.608359 0.685259 9.602119 2.219210 c
9.583541 2.223270 9.565132 2.227320 9.546891 2.231358 c
9.296606 2.286758 9.077891 2.340153 8.885743 2.396004 c
8.504775 2.506737 8.228245 2.627125 8.017174 2.791960 c
7.008180 2.295216 5.856144 2.187553 4.785145 2.468969 c
h
10.783853 3.329710 m
12.688528 5.234385 l
12.948226 5.494083 12.948226 5.915138 12.688528 6.174837 c
12.428829 6.434536 12.007774 6.434536 11.748075 6.174837 c
9.248740 3.675501 l
9.560926 3.583939 9.993661 3.492182 10.656712 3.359152 c
10.695142 3.351458 10.737858 3.341881 10.783853 3.329710 c
h
f*
n
Q
q
1.000000 0.000000 -0.000000 1.000000 4.000000 1.000000 cm
0.000000 0.478431 1.000000 scn
2.505619 20.000000 m
2.629215 20.000000 2.730338 20.067720 2.764045 20.214447 c
2.765165 20.220694 l
3.067419 21.907476 3.069506 21.919125 4.764046 22.234762 c
4.910113 22.268623 5.000000 22.358917 5.000000 22.494356 c
5.000000 22.641083 4.910113 22.731377 4.764046 22.765236 c
3.115385 23.094265 3.111211 23.114223 2.792694 24.637449 c
2.764045 24.774267 l
2.730338 24.920994 2.640450 25.000000 2.505619 25.000000 c
2.370788 25.000000 2.269665 24.909706 2.247193 24.774267 c
2.211266 24.607843 l
1.889418 23.113951 1.884714 23.092119 0.235956 22.765236 c
0.089889 22.731377 0.000000 22.629797 0.000000 22.494356 c
0.000000 22.370203 0.089889 22.268623 0.235956 22.234762 c
0.257272 22.230537 l
1.098396 22.063789 1.514779 21.981245 1.761133 21.731190 c
2.002639 21.486053 2.080742 21.079935 2.235412 20.275688 c
2.239290 20.255526 2.243215 20.235113 2.247193 20.214447 c
2.269665 20.079006 2.370788 20.000000 2.505619 20.000000 c
h
20.994783 14.000000 m
21.151304 14.000000 21.234783 14.093750 21.255651 14.239583 c
21.265360 14.292361 l
21.631285 16.282001 21.639460 16.326447 23.760000 16.729168 c
23.916521 16.770832 24.000000 16.843750 24.000000 17.000000 c
24.000000 17.156250 23.916521 17.229166 23.760000 17.260416 c
21.693047 17.675112 21.682287 17.726425 21.291733 19.588629 c
21.255651 19.760416 l
21.234783 19.906250 21.151304 20.000000 20.994783 20.000000 c
20.848696 20.000000 20.775652 19.906250 20.733913 19.760416 c
20.715693 19.673904 20.698399 19.591003 20.681820 19.511526 c
20.681557 19.510262 l
20.309143 17.724892 20.297527 17.669214 18.240000 17.260416 c
18.093912 17.229166 18.000000 17.156250 18.000000 17.000000 c
18.000000 16.843750 18.093912 16.770832 18.240000 16.729168 c
20.341238 16.321869 20.348595 16.282850 20.708492 14.374265 c
20.733913 14.239583 l
20.775652 14.093750 20.848696 14.000000 20.994783 14.000000 c
h
7.340869 0.319445 m
7.313043 0.125000 7.201739 0.000000 6.993044 0.000000 c
6.798261 0.000000 6.700870 0.125000 6.645218 0.319445 c
6.633644 0.380648 6.622359 0.440495 6.611322 0.499023 c
6.131461 3.043798 6.121650 3.095825 3.320000 3.638889 c
3.125217 3.694445 3.000000 3.791666 3.000000 4.000000 c
3.000000 4.208334 3.125217 4.305555 3.320000 4.347221 c
6.063370 4.892284 6.078856 4.966522 6.575408 7.347010 c
6.597620 7.453493 6.620794 7.564592 6.645218 7.680555 c
6.700870 7.875000 6.798261 8.000000 6.993044 8.000000 c
7.201739 8.000000 7.313043 7.875000 7.340869 7.680555 c
7.357415 7.601999 7.373423 7.525675 7.388978 7.451504 c
7.909715 4.968565 7.924064 4.900148 10.680000 4.347221 c
10.888696 4.305555 11.000000 4.208334 11.000000 4.000000 c
11.000000 3.791666 10.888696 3.694445 10.680000 3.638889 c
7.852612 3.101929 7.841713 3.042667 7.353813 0.389812 c
7.340869 0.319445 l
h
f*
n
Q
endstream
endobj
3 0 obj
6857
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000006947 00000 n
0000006970 00000 n
0000007143 00000 n
0000007217 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
7276
%%EOF

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "linkicon_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,218 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 4.284912 3.113007 cm
0.000000 0.478431 1.000000 scn
12.186993 19.913464 m
13.998362 21.724833 16.935169 21.724833 18.746540 19.913464 c
20.557909 18.102093 20.557909 15.165284 18.746540 13.353915 c
17.585676 12.193052 l
17.612038 12.187213 17.638416 12.181248 17.664806 12.175158 c
18.127182 12.068456 18.589745 11.932618 19.021931 11.748403 c
19.686993 12.413464 l
22.017757 14.744230 22.017757 18.523148 19.686993 20.853914 c
17.356224 23.184681 13.577307 23.184681 11.246540 20.853914 c
8.746540 18.353916 l
8.486841 18.094215 8.486841 17.673161 8.746540 17.413464 c
9.006239 17.153765 9.427294 17.153765 9.686993 17.413464 c
12.186993 19.913464 l
h
9.686993 10.853915 m
10.269916 10.270992 10.969393 9.875662 11.710407 9.667924 c
11.544407 9.245638 11.443607 8.808676 11.390870 8.376139 c
10.422292 8.640283 9.507279 9.152724 8.746540 9.913464 c
8.438305 10.221698 8.170393 10.555858 7.943166 10.909195 c
7.744512 11.218102 7.833890 11.629561 8.142797 11.828216 c
8.451704 12.026869 8.863163 11.937490 9.061817 11.628584 c
9.238028 11.354576 9.446299 11.094609 9.686993 10.853915 c
h
11.480906 6.086744 m
11.491286 6.097126 l
11.492414 6.091276 l
11.490078 6.090351 l
11.486289 6.088860 l
11.486141 6.088802 l
11.485865 6.088694 l
11.480906 6.086744 l
h
9.248075 3.853914 m
10.354701 4.960541 l
10.175631 4.507072 10.160928 3.987410 10.352602 3.497576 c
10.391468 3.398251 10.437399 3.303785 10.489594 3.214527 c
10.188528 2.913462 l
7.857761 0.582695 4.078842 0.582695 1.748075 2.913462 c
-0.582692 5.244228 -0.582692 9.023148 1.748075 11.353913 c
4.248075 13.853913 l
6.578842 16.184681 10.357761 16.184681 12.688528 13.853913 c
12.996761 13.545679 13.264675 13.211519 13.491901 12.858182 c
13.690556 12.549274 13.601177 12.137815 13.292271 11.939161 c
12.983362 11.740508 12.571903 11.829886 12.373251 12.138793 c
12.197041 12.412801 11.988770 12.672768 11.748075 12.913462 c
9.936707 14.724831 6.999896 14.724831 5.188527 12.913462 c
2.688527 10.413462 l
0.877158 8.602093 0.877158 5.665283 2.688527 3.853914 c
4.499897 2.042545 7.436706 2.042545 9.248075 3.853914 c
h
17.364620 10.874345 m
15.610595 11.279119 14.279408 10.983207 13.469223 10.043392 c
12.699905 9.150985 12.576620 7.868387 12.744271 6.694830 c
12.810268 6.232853 12.924093 5.764542 13.077039 5.308825 c
12.830842 5.200958 12.614733 5.109138 12.440341 5.036333 c
12.292163 4.974472 12.174309 4.926426 12.093949 4.894022 c
12.053776 4.877821 12.022989 4.865538 12.002489 4.857399 c
11.979569 4.848328 l
11.974110 4.846180 l
11.972917 4.845711 l
11.972753 4.845648 l
11.972709 4.845631 l
11.630728 4.711779 11.461986 4.326048 11.595812 3.984049 c
11.729644 3.642033 12.115396 3.473267 12.457414 3.607098 c
12.215088 4.226376 l
12.457414 3.607098 12.457550 3.607151 12.457729 3.607222 c
12.458308 3.607449 l
12.460250 3.608212 l
12.467227 3.610956 l
12.493269 3.621262 l
12.515890 3.630241 12.548885 3.643410 12.591353 3.660534 c
12.676277 3.694780 12.799146 3.744879 12.952725 3.808994 c
13.130324 3.883137 13.349264 3.976139 13.598309 4.085157 c
13.741961 3.811306 13.899061 3.550545 14.067122 3.308275 c
14.701079 2.394390 15.624545 1.561375 16.715088 1.561375 c
17.500357 1.561375 18.114794 1.684195 18.522865 2.033970 c
18.976458 2.422764 19.005089 2.938725 19.005089 3.226376 c
19.005089 3.320526 19.003220 3.376652 19.001690 3.422411 c
19.001690 3.422480 l
19.000238 3.466011 18.999100 3.500168 19.000179 3.548780 c
19.046926 3.555603 19.116051 3.561375 19.215088 3.561375 c
19.253025 3.561375 19.286470 3.560555 19.315857 3.559183 c
19.305613 3.529495 19.293690 3.496565 19.279930 3.459871 c
19.270439 3.434565 19.259300 3.405558 19.247238 3.374151 c
19.247169 3.373968 l
19.211340 3.280668 19.167395 3.166227 19.134407 3.064730 c
19.090958 2.931034 19.033806 2.728281 19.042852 2.511190 c
19.053375 2.258625 19.157530 1.964272 19.445312 1.765312 c
19.688433 1.597229 19.975500 1.561375 20.215088 1.561375 c
21.126629 1.561375 21.771097 1.869568 22.193010 2.207096 c
22.399748 2.372486 22.547161 2.539972 22.645525 2.671124 c
22.694818 2.736849 22.732260 2.794065 22.759108 2.838285 c
22.772549 2.860424 22.783394 2.879400 22.791790 2.894669 c
22.802593 2.914764 l
22.806667 2.922628 l
22.808382 2.925995 l
22.809158 2.927536 l
22.809526 2.928268 l
22.809706 2.928625 22.809883 2.928978 22.215088 3.226376 c
22.809883 2.928978 l
22.974129 3.257473 22.840981 3.656921 22.512486 3.821169 c
22.187542 3.983639 21.793177 3.855114 21.625706 3.534365 c
21.622240 3.528526 l
21.615885 3.518059 21.602545 3.497150 21.581526 3.469124 c
21.539265 3.412777 21.467928 3.330261 21.362165 3.245651 c
21.193222 3.110497 20.918785 2.955040 20.492521 2.906590 c
20.502716 2.933222 20.513588 2.961788 20.525246 2.992878 c
20.573639 3.121922 20.634171 3.291862 20.668003 3.468382 c
20.701077 3.640938 20.723289 3.890095 20.626808 4.147371 c
20.395744 4.763548 19.751781 4.891375 19.215088 4.891375 c
18.640921 4.891375 18.076195 4.748074 17.807793 4.211271 c
17.697144 3.989971 17.676590 3.766926 17.671551 3.615717 c
17.668810 3.533525 17.671675 3.400579 17.673615 3.310493 c
17.673615 3.310425 l
17.674435 3.272436 17.675087 3.242077 17.675087 3.226376 c
17.675087 3.122025 17.667290 3.074028 17.660164 3.050274 c
17.658463 3.044598 17.658184 3.043568 17.658049 3.043585 c
17.657978 3.043594 17.657946 3.043888 17.657768 3.043959 c
17.657671 3.043999 17.657528 3.043968 17.657310 3.043781 c
17.627882 3.018555 17.429819 2.891375 16.715088 2.891375 c
16.305632 2.891375 15.729096 3.245859 15.159928 4.066349 c
15.036135 4.244804 14.918980 4.436861 14.810197 4.638802 c
15.673593 5.050669 16.654581 5.558731 17.509609 6.102840 c
18.043533 6.442610 18.547131 6.808180 18.946301 7.185477 c
19.330778 7.548887 19.690102 7.989126 19.819744 8.489172 c
19.888414 8.754045 19.893452 9.040292 19.798233 9.325949 c
19.703962 9.608761 19.526581 9.845781 19.301983 10.040431 c
18.870636 10.414267 18.211374 10.678940 17.364620 10.874345 c
h
16.795567 7.224910 m
16.018774 6.730587 15.113974 6.259119 14.294304 5.866356 c
14.188757 6.202963 14.109050 6.545904 14.060905 6.882919 c
13.916056 7.896862 14.074020 8.708015 14.476578 9.174982 c
14.838268 9.594543 15.569581 9.923630 17.065556 9.578404 c
17.843801 9.398809 18.247040 9.194733 18.430927 9.035365 c
18.513947 8.963413 18.532366 8.917719 18.536484 8.905365 c
18.539654 8.895856 18.545668 8.874486 18.532307 8.822952 c
18.497887 8.690186 18.361116 8.462456 18.032703 8.152038 c
17.718983 7.855507 17.292892 7.541389 16.795567 7.224910 c
h
18.914694 3.526907 m
18.914108 3.527273 18.918018 3.529732 18.928183 3.533180 c
18.920361 3.528265 18.915279 3.526539 18.914694 3.526907 c
h
19.506151 3.530487 m
19.505497 3.530083 19.499607 3.531816 19.490446 3.536903 c
19.502226 3.533436 19.506805 3.530891 19.506151 3.530487 c
h
19.366323 3.752167 m
19.366255 3.749725 l
19.366301 3.750448 19.366325 3.751007 19.366337 3.751406 c
19.366350 3.751930 19.366341 3.752180 19.366323 3.752167 c
h
f*
n
Q
endstream
endobj
3 0 obj
6963
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000007053 00000 n
0000007076 00000 n
0000007249 00000 n
0000007323 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
7382
%%EOF

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "namecolor_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,290 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 4.334961 4.334991 cm
0.000000 0.478431 1.000000 scn
5.785331 19.957972 m
6.528978 19.999634 7.451835 20.000017 8.665000 20.000017 c
12.665000 20.000017 l
14.076105 20.000017 15.094439 19.999500 15.894838 19.934105 c
16.687475 19.869343 17.207642 19.744286 17.633049 19.527531 c
18.448732 19.111919 19.111902 18.448750 19.527514 17.633066 c
19.540468 17.607641 19.553097 17.581877 19.565403 17.555737 c
19.876143 17.857920 20.272636 17.995008 20.659822 17.995008 c
20.715282 17.995008 20.772083 17.992229 20.829720 17.986332 c
20.793468 18.071121 20.754486 18.154573 20.712553 18.236874 c
20.169430 19.302811 19.302795 20.169447 18.236856 20.712568 c
17.592707 21.040779 16.878029 21.188206 16.003143 21.259687 c
15.142270 21.330023 14.069739 21.330021 12.694985 21.330017 c
12.665000 21.330017 l
8.665000 21.330017 l
8.635015 21.330017 l
7.260260 21.330021 6.187730 21.330023 5.326858 21.259687 c
4.791599 21.215956 4.316306 21.143795 3.880442 21.019201 c
3.890508 20.977545 3.900183 20.939672 3.909794 20.904621 c
4.067824 20.860769 4.298860 20.812462 4.689383 20.734526 c
4.709473 20.730516 l
4.729430 20.725889 l
4.989579 20.665585 5.319242 20.527437 5.589351 20.228039 c
5.666474 20.142551 5.731493 20.051903 5.785331 19.957972 c
h
20.000000 12.665017 m
20.000000 12.493482 l
20.081505 12.334187 20.143467 12.137091 20.202589 11.886913 c
20.257551 11.654334 20.310059 11.375880 20.373531 11.039274 c
20.380175 11.004044 l
20.384460 10.981330 l
20.398952 10.904593 l
20.440691 10.758759 20.513735 10.665009 20.659822 10.665009 c
20.816343 10.665009 20.899822 10.758759 20.920691 10.904593 c
20.930399 10.957369 l
20.939493 11.006810 l
20.949696 11.062221 l
21.010153 11.390343 21.061460 11.662903 21.115931 11.891387 c
21.177372 12.149121 21.242840 12.350769 21.330002 12.512812 c
21.330002 12.665017 l
21.330002 12.694985 l
21.330002 12.695578 l
21.330002 13.540377 21.330002 14.271040 21.313671 14.908587 c
21.246031 15.055716 21.190304 15.232279 21.135550 15.448044 c
21.078949 15.671088 21.023384 15.936024 20.956772 16.253637 c
20.954065 16.266546 l
20.944857 16.310446 l
20.920691 16.425425 l
20.899822 16.571259 20.816343 16.665009 20.659822 16.665009 c
20.513735 16.665009 20.440691 16.571259 20.398952 16.425425 c
20.382780 16.348446 l
20.374823 16.310453 l
20.346594 16.175266 l
20.346577 16.175179 l
20.346514 16.174881 l
20.287724 15.893044 20.237925 15.654318 20.187643 15.450506 c
20.126453 15.202480 20.064547 15.006169 19.984858 14.846785 c
19.999807 14.239014 20.000000 13.524947 20.000000 12.665017 c
h
20.000000 8.665017 m
20.000000 9.476658 l
20.210934 9.380445 20.436922 9.335009 20.659822 9.335009 c
20.872946 9.335009 21.105841 9.376009 21.330002 9.477490 c
21.330002 8.665017 l
21.330002 8.635049 l
21.330006 7.260285 21.330008 6.187751 21.259672 5.326874 c
21.188190 4.451988 21.040764 3.737310 20.712553 3.093161 c
20.169430 2.027222 19.302795 1.160587 18.236856 0.617464 c
17.592707 0.289253 16.878029 0.141827 16.003143 0.070345 c
15.142266 0.000010 14.069732 0.000011 12.694968 0.000015 c
12.665000 0.000015 l
11.865768 0.000015 l
11.960117 0.227383 11.995039 0.458319 11.995039 0.665009 c
11.995039 0.867359 11.961351 1.099674 11.865652 1.330017 c
12.665000 1.330017 l
14.076104 1.330017 15.094439 1.330534 15.894838 1.395929 c
16.687475 1.460690 17.207642 1.585747 17.633049 1.802504 c
18.448732 2.218115 19.111902 2.881285 19.527514 3.696968 c
19.744270 4.122375 19.869328 4.642542 19.934088 5.435179 c
19.999483 6.235579 20.000000 7.253912 20.000000 8.665017 c
h
4.839176 1.463717 m
5.019685 1.436121 5.217113 1.413744 5.435162 1.395929 c
6.235561 1.330534 7.253895 1.330017 8.665000 1.330017 c
8.917085 1.330017 l
9.089041 1.282415 9.281227 1.236177 9.496844 1.188450 c
9.692974 1.145035 9.908489 1.100388 10.145796 1.052359 c
10.205174 1.040361 l
10.345039 1.012230 l
10.553735 0.970564 10.665039 0.873343 10.665039 0.665009 c
10.665039 0.456675 10.553735 0.359453 10.345039 0.303898 c
10.198030 0.275911 l
10.197282 0.275768 l
9.941029 0.226841 9.709103 0.181644 9.498774 0.137638 c
9.277951 0.091434 9.080934 0.046541 8.904569 0.000015 c
8.665000 0.000015 l
8.635032 0.000015 l
7.260268 0.000011 6.187734 0.000010 5.326858 0.070345 c
4.451973 0.141827 3.737294 0.289253 3.093144 0.617464 c
2.960023 0.685293 2.830011 0.758167 2.703350 0.835844 c
2.754484 0.931044 2.854025 0.984205 2.985039 1.012230 c
3.127856 1.040684 l
3.199264 1.054987 l
3.432428 1.101791 3.644342 1.145407 3.837319 1.187834 c
4.085014 1.242292 4.301511 1.294796 4.491705 1.349581 c
4.618789 1.386187 4.734118 1.423809 4.839176 1.463717 c
h
2.875670 2.346601 m
2.433620 2.718178 2.067664 3.176529 1.802487 3.696968 c
1.585731 4.122375 1.460673 4.642542 1.395913 5.435179 c
1.330517 6.235579 1.330000 7.253913 1.330000 8.665017 c
1.330000 12.665017 l
1.330000 13.877960 1.330382 14.800699 1.372022 15.544275 c
1.298869 15.586044 1.227320 15.634769 1.158346 15.691064 c
0.845746 15.946198 0.667074 16.291241 0.604262 16.638165 c
0.528978 17.029308 0.484173 17.260752 0.441731 17.424160 c
0.403060 17.434570 0.360459 17.445160 0.312742 17.456297 c
0.186964 17.018599 0.114287 16.541172 0.070330 16.003159 c
-0.000006 15.142287 -0.000004 14.069757 0.000000 12.695003 c
0.000000 12.665017 l
0.000000 8.665017 l
0.000000 8.635032 l
-0.000004 7.260277 -0.000006 6.187748 0.070330 5.326874 c
0.141811 4.451988 0.289237 3.737310 0.617448 3.093161 c
0.888394 2.561399 1.239850 2.079239 1.656398 1.662100 c
1.702632 1.724312 1.754487 1.784615 1.812361 1.842388 c
2.121504 2.150995 2.482045 2.264723 2.706828 2.312807 c
2.716328 2.314838 l
2.725856 2.316732 l
2.777156 2.326925 2.827075 2.336874 2.875670 2.346601 c
h
0.871893 18.684687 m
1.324676 19.403400 1.933466 20.011248 2.652964 20.462925 c
2.655908 20.453205 l
2.724026 20.229588 2.800882 20.070131 2.914969 19.948479 c
2.922706 19.940228 2.930614 19.932152 2.938702 19.924240 c
3.060279 19.805334 3.222550 19.723848 3.455697 19.651859 c
3.550516 19.622581 3.657057 19.594875 3.777352 19.566862 c
3.750158 19.554100 3.723372 19.540993 3.696951 19.527531 c
2.881269 19.111919 2.218098 18.448750 1.802487 17.633066 c
1.792514 17.613493 1.782735 17.593719 1.773147 17.573727 c
1.747679 17.687672 1.722332 17.789173 1.695314 17.880003 c
1.626394 18.111698 1.546598 18.273962 1.426172 18.396198 c
1.420495 18.401960 1.414726 18.407633 1.408866 18.413219 c
1.398906 18.422550 l
1.275799 18.535866 1.112183 18.613361 0.880678 18.682093 c
0.871893 18.684687 l
h
7.164961 15.329995 m
6.797691 15.329995 6.499961 15.032265 6.499961 14.664995 c
6.499961 14.297726 6.797691 13.999995 7.164961 13.999995 c
9.999961 13.999995 l
9.999961 6.664995 l
9.999961 6.297726 10.297691 5.999995 10.664961 5.999995 c
11.032230 5.999995 11.329961 6.297726 11.329961 6.664995 c
11.329961 13.999995 l
14.164961 13.999995 l
14.532230 13.999995 14.829961 14.297726 14.829961 14.664995 c
14.829961 15.032265 14.532230 15.329995 14.164961 15.329995 c
10.664961 15.329995 l
7.164961 15.329995 l
h
f*
n
Q
q
1.000000 0.000000 -0.000000 1.000000 4.000000 1.000000 cm
0.000000 0.478431 1.000000 scn
2.505619 20.000000 m
2.629215 20.000000 2.730338 20.067720 2.764045 20.214447 c
2.765165 20.220694 l
3.067419 21.907478 3.069506 21.919125 4.764046 22.234762 c
4.910113 22.268623 5.000000 22.358917 5.000000 22.494356 c
5.000000 22.641083 4.910113 22.731377 4.764046 22.765236 c
3.115385 23.094265 3.111211 23.114223 2.792694 24.637449 c
2.764045 24.774267 l
2.730338 24.920994 2.640450 25.000000 2.505619 25.000000 c
2.370788 25.000000 2.269665 24.909706 2.247193 24.774267 c
2.211266 24.607843 l
1.889418 23.113951 1.884714 23.092119 0.235956 22.765236 c
0.089889 22.731377 0.000000 22.629797 0.000000 22.494356 c
0.000000 22.370203 0.089889 22.268623 0.235956 22.234762 c
0.257272 22.230537 l
1.098396 22.063789 1.514779 21.981245 1.761133 21.731190 c
2.002639 21.486053 2.080742 21.079935 2.235412 20.275688 c
2.239290 20.255526 2.243215 20.235113 2.247193 20.214447 c
2.269665 20.079006 2.370788 20.000000 2.505619 20.000000 c
h
20.994783 14.000000 m
21.151304 14.000000 21.234783 14.093750 21.255651 14.239583 c
21.265360 14.292361 l
21.631285 16.282001 21.639460 16.326447 23.760000 16.729168 c
23.916521 16.770832 24.000000 16.843750 24.000000 17.000000 c
24.000000 17.156250 23.916521 17.229166 23.760000 17.260416 c
21.693047 17.675112 21.682287 17.726425 21.291733 19.588629 c
21.255651 19.760416 l
21.234783 19.906250 21.151304 20.000000 20.994783 20.000000 c
20.848696 20.000000 20.775652 19.906250 20.733913 19.760416 c
20.715693 19.673904 20.698399 19.591003 20.681820 19.511526 c
20.681557 19.510262 l
20.309143 17.724892 20.297527 17.669214 18.240000 17.260416 c
18.093912 17.229166 18.000000 17.156250 18.000000 17.000000 c
18.000000 16.843750 18.093912 16.770832 18.240000 16.729168 c
20.341238 16.321869 20.348595 16.282850 20.708492 14.374265 c
20.733913 14.239583 l
20.775652 14.093750 20.848696 14.000000 20.994783 14.000000 c
h
7.340869 0.319445 m
7.313043 0.125000 7.201739 0.000000 6.993044 0.000000 c
6.798261 0.000000 6.700870 0.125000 6.645218 0.319445 c
6.633644 0.380648 6.622359 0.440495 6.611322 0.499023 c
6.131461 3.043798 6.121650 3.095825 3.320000 3.638889 c
3.125217 3.694445 3.000000 3.791666 3.000000 4.000000 c
3.000000 4.208334 3.125217 4.305555 3.320000 4.347221 c
6.063370 4.892284 6.078856 4.966522 6.575408 7.347010 c
6.597620 7.453493 6.620794 7.564592 6.645218 7.680555 c
6.700870 7.875000 6.798261 8.000000 6.993044 8.000000 c
7.201739 8.000000 7.313043 7.875000 7.340869 7.680555 c
7.357415 7.601999 7.373423 7.525675 7.388978 7.451504 c
7.909715 4.968565 7.924064 4.900148 10.680000 4.347221 c
10.888696 4.305555 11.000000 4.208334 11.000000 4.000000 c
11.000000 3.791666 10.888696 3.694445 10.680000 3.638889 c
7.852612 3.101929 7.841713 3.042667 7.353813 0.389812 c
7.340869 0.319445 l
h
f*
n
Q
endstream
endobj
3 0 obj
9833
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000009923 00000 n
0000009946 00000 n
0000010119 00000 n
0000010193 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
10252
%%EOF

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "reaction_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,95 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 3.709961 4.027466 cm
0.000000 0.478431 1.000000 scn
6.692846 21.012543 m
2.932139 21.012543 0.000000 17.982958 0.000000 13.793707 c
0.000000 8.925182 4.040345 4.312546 9.951600 0.505657 c
9.964154 0.497768 l
10.140424 0.389732 10.347890 0.272778 10.557463 0.180889 c
10.750595 0.096207 11.017006 -0.000004 11.290000 -0.000004 c
11.565557 -0.000004 11.832716 0.094200 12.030427 0.180889 c
12.242528 0.273884 12.449573 0.392376 12.624151 0.502941 c
12.624162 0.502926 l
12.628400 0.505657 l
18.539654 4.312546 22.580002 8.925182 22.580002 13.793707 c
22.580002 17.981396 19.659847 21.012543 15.897674 21.012543 c
13.917096 21.012543 12.359436 20.090942 11.292705 18.683296 c
10.234852 20.086395 8.670308 21.012543 6.692846 21.012543 c
h
1.330000 13.793707 m
1.330000 17.325989 3.741920 19.682543 6.692846 19.682543 c
8.498928 19.682543 9.872611 18.689632 10.704028 17.140173 c
10.819477 16.925020 11.043550 16.790440 11.287719 16.789600 c
11.531888 16.788765 11.756879 16.921804 11.873800 17.136160 c
12.726985 18.700333 14.091994 19.682543 15.897674 19.682543 c
18.847134 19.682543 21.250000 17.327551 21.250000 13.793707 c
21.250000 9.657809 17.759064 5.392298 11.910530 1.625286 c
11.770142 1.536472 11.625534 1.455585 11.496355 1.398945 c
11.364441 1.341106 11.299468 1.331387 11.290930 1.330151 c
11.287782 1.330845 l
11.273407 1.333771 11.211363 1.346405 11.091535 1.398945 c
10.961029 1.456169 10.813124 1.537617 10.665328 1.627953 c
4.819291 5.394312 1.330000 9.658786 1.330000 13.793707 c
h
f*
n
Q
endstream
endobj
3 0 obj
1572
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000001662 00000 n
0000001685 00000 n
0000001858 00000 n
0000001932 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
1991
%%EOF

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "storiescircle_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,149 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 3.834961 3.834961 cm
0.000000 0.478431 1.000000 scn
11.165000 22.330017 m
10.420193 22.330017 9.691781 22.256994 8.986743 22.117517 c
8.626456 22.046242 8.392166 21.696390 8.463442 21.336103 c
8.534718 20.975817 8.884568 20.741528 9.244855 20.812803 c
9.865344 20.935555 10.507315 21.000017 11.165000 21.000017 c
11.822685 21.000017 12.464656 20.935555 13.085145 20.812803 c
13.445432 20.741528 13.795282 20.975817 13.866557 21.336103 c
13.937833 21.696390 13.703543 22.046242 13.343256 22.117517 c
12.638218 22.256994 11.909807 22.330017 11.165000 22.330017 c
h
17.368916 20.449049 m
17.063728 20.653368 16.650688 20.571596 16.446369 20.266407 c
16.242050 19.961218 16.323822 19.548180 16.629011 19.343861 c
17.701820 18.625633 18.625614 17.701838 19.343842 16.629030 c
19.548161 16.323841 19.961201 16.242069 20.266388 16.446388 c
20.571579 16.650707 20.653351 17.063745 20.449032 17.368935 c
19.634087 18.586206 18.586189 19.634106 17.368916 20.449049 c
h
5.700987 19.343861 m
6.006176 19.548180 6.087948 19.961216 5.883629 20.266407 c
5.679309 20.571596 5.266272 20.653366 4.961082 20.449047 c
3.743810 19.634104 2.695912 18.586206 1.880969 17.368935 c
1.676650 17.063744 1.758421 16.650707 2.063610 16.446388 c
2.368799 16.242067 2.781838 16.323839 2.986157 16.629028 c
3.704383 17.701836 4.628180 18.625633 5.700987 19.343861 c
h
22.117500 13.343274 m
22.046223 13.703561 21.696373 13.937851 21.336086 13.866575 c
20.975800 13.795300 20.741508 13.445449 20.812786 13.085162 c
20.935535 12.464673 21.000000 11.822702 21.000000 11.165017 c
21.000000 10.507332 20.935535 9.865361 20.812786 9.244872 c
20.741508 8.884585 20.975800 8.534735 21.336086 8.463460 c
21.696373 8.392184 22.046223 8.626474 22.117500 8.986761 c
22.256977 9.691799 22.330002 10.420210 22.330002 11.165017 c
22.330002 11.909824 22.256977 12.638236 22.117500 13.343274 c
h
1.517214 13.085162 m
1.588490 13.445449 1.354200 13.795300 0.993913 13.866575 c
0.633626 13.937850 0.283776 13.703560 0.212500 13.343273 c
0.073023 12.638235 0.000000 11.909824 0.000000 11.165017 c
0.000000 10.420210 0.073023 9.691798 0.212501 8.986760 c
0.283776 8.626473 0.633627 8.392183 0.993913 8.463459 c
1.354200 8.534735 1.588490 8.884585 1.517215 9.244872 c
1.394463 9.865361 1.330000 10.507332 1.330000 11.165017 c
1.330000 11.822702 1.394463 12.464673 1.517214 13.085162 c
h
20.449032 4.961102 m
20.653351 5.266289 20.571579 5.679329 20.266388 5.883648 c
19.961201 6.087967 19.548161 6.006195 19.343842 5.701006 c
18.625618 4.628197 17.701820 3.704403 16.629013 2.986176 c
16.323822 2.781857 16.242052 2.368816 16.446371 2.063629 c
16.650690 1.758438 17.063728 1.676666 17.368919 1.880985 c
18.586189 2.695930 19.634087 3.743828 20.449032 4.961102 c
h
2.986157 5.701004 m
2.781838 6.006195 2.368800 6.087965 2.063611 5.883646 c
1.758422 5.679327 1.676650 5.266289 1.880970 4.961098 c
2.695913 3.743828 3.743811 2.695930 4.961083 1.880985 c
5.266273 1.676666 5.679311 1.758438 5.883630 2.063629 c
6.087949 2.368816 6.006178 2.781857 5.700988 2.986176 c
4.628181 3.704399 3.704384 4.628197 2.986157 5.701004 c
h
9.244855 1.517231 m
8.884568 1.588509 8.534718 1.354218 8.463442 0.993931 c
8.392167 0.633644 8.626457 0.283794 8.986744 0.212517 c
9.691782 0.073040 10.420193 0.000015 11.165000 0.000015 c
11.909807 0.000015 12.638219 0.073040 13.343257 0.212517 c
13.703544 0.283794 13.937834 0.633644 13.866558 0.993931 c
13.795282 1.354218 13.445432 1.588509 13.085145 1.517231 c
12.464656 1.394482 11.822685 1.330017 11.165000 1.330017 c
10.507315 1.330017 9.865344 1.394482 9.244855 1.517231 c
h
4.830000 11.165017 m
4.830000 14.663741 7.666276 17.500017 11.165000 17.500017 c
14.663724 17.500017 17.500000 14.663741 17.500000 11.165017 c
17.500000 7.666293 14.663724 4.830017 11.165000 4.830017 c
7.666276 4.830017 4.830000 7.666293 4.830000 11.165017 c
h
11.165000 18.830017 m
6.931737 18.830017 3.500000 15.398279 3.500000 11.165017 c
3.500000 6.931754 6.931737 3.500017 11.165000 3.500017 c
15.398263 3.500017 18.830000 6.931754 18.830000 11.165017 c
18.830000 15.398279 15.398263 18.830017 11.165000 18.830017 c
h
f*
n
Q
endstream
endobj
3 0 obj
4150
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000004240 00000 n
0000004263 00000 n
0000004436 00000 n
0000004510 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
4569
%%EOF

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "background_30.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,239 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.748535 3.334717 cm
0.000000 0.478431 1.000000 scn
5.757206 17.665283 m
5.880801 17.665283 5.981925 17.733004 6.015633 17.879730 c
6.016752 17.885977 l
6.319006 19.572760 6.321093 19.584408 8.015633 19.900045 c
8.161700 19.933907 8.251587 20.024200 8.251587 20.159639 c
8.251587 20.306366 8.161700 20.396660 8.015633 20.430519 c
6.366971 20.759548 6.362798 20.779507 6.044281 22.302732 c
6.015633 22.439550 l
5.981925 22.586277 5.892037 22.665283 5.757206 22.665283 c
5.622375 22.665283 5.521252 22.574989 5.498779 22.439550 c
5.462852 22.273127 l
5.141005 20.779234 5.136301 20.757402 3.487543 20.430519 c
3.341476 20.396660 3.251587 20.295080 3.251587 20.159639 c
3.251587 20.035486 3.341476 19.933907 3.487543 19.900045 c
3.508859 19.895821 l
3.914725 19.815361 4.221698 19.754505 4.458393 19.684975 c
4.458390 19.684971 4.458387 19.684967 4.458384 19.684961 c
4.467170 19.682367 l
4.698675 19.613636 4.862291 19.536140 4.985398 19.422825 c
4.995357 19.413494 l
5.001218 19.407907 5.006986 19.402235 5.012663 19.396473 c
5.133090 19.274237 5.212885 19.111973 5.281805 18.880278 c
5.308824 18.789448 5.334171 18.687946 5.359639 18.574001 c
5.359651 18.574028 5.359664 18.574055 5.359677 18.574081 c
5.399532 18.395777 5.439682 18.187004 5.486998 17.940971 c
5.490876 17.920811 5.494802 17.900396 5.498779 17.879730 c
5.521252 17.744289 5.622375 17.665283 5.757206 17.665283 c
h
24.326115 11.674725 m
24.431749 11.701917 24.490248 11.786128 24.507238 11.904866 c
24.516947 11.957644 l
24.882872 13.947286 24.891047 13.991731 27.011587 14.394450 c
27.168108 14.436116 27.251587 14.509033 27.251587 14.665283 c
27.251587 14.821533 27.168108 14.894449 27.011587 14.925699 c
24.944633 15.340395 24.933874 15.391708 24.543320 17.253912 c
24.507238 17.425699 l
24.488979 17.553305 24.422783 17.641033 24.301662 17.660971 c
24.284359 17.663818 24.265936 17.665283 24.246370 17.665283 c
24.246351 17.665283 24.246332 17.665283 24.246313 17.665283 c
24.100225 17.665283 24.027182 17.571533 23.985443 17.425699 c
23.969271 17.348721 l
23.961313 17.310728 l
23.933084 17.175541 l
23.933067 17.175453 l
23.933004 17.175156 l
23.874214 16.893318 23.824415 16.654593 23.774134 16.450781 c
23.712944 16.202755 23.651037 16.006443 23.571348 15.847059 c
23.571348 15.847021 23.571352 15.846979 23.571352 15.846940 c
23.301785 15.307896 22.828709 15.191364 21.491587 14.925699 c
21.345499 14.894449 21.251587 14.821533 21.251587 14.665283 c
21.251587 14.509033 21.345499 14.436116 21.491587 14.394450 c
22.823523 14.136271 23.314125 14.026070 23.586491 13.493872 c
23.586491 13.493756 l
23.667995 13.334461 23.729958 13.137365 23.789080 12.887188 c
23.844042 12.654609 23.896549 12.376155 23.960022 12.039549 c
23.966665 12.004318 l
23.970951 11.981605 l
23.985443 11.904867 l
24.027182 11.759033 24.100225 11.665283 24.246313 11.665283 c
24.246321 11.665283 24.246336 11.665283 24.246344 11.665283 c
24.326115 11.674725 m
24.302010 11.668520 24.275450 11.665283 24.246370 11.665283 c
h
12.251492 21.000292 m
11.038326 21.000292 10.115470 20.999908 9.371822 20.958246 c
9.317985 21.052177 9.252966 21.142826 9.175842 21.228312 c
8.905733 21.527712 8.576070 21.665859 8.315921 21.726164 c
8.295964 21.730789 l
8.275874 21.734800 l
7.885352 21.812737 7.654315 21.861044 7.496285 21.904896 c
7.486675 21.939947 7.476999 21.977819 7.466934 22.019476 c
7.902797 22.144070 8.378090 22.216230 8.913349 22.259962 c
9.774221 22.330297 10.846751 22.330296 12.221506 22.330292 c
12.251492 22.330292 l
16.251492 22.330292 l
16.281477 22.330292 l
17.656231 22.330296 18.728762 22.330297 19.589634 22.259962 c
20.464520 22.188480 21.179197 22.041054 21.823347 21.712843 c
22.889286 21.169722 23.755920 20.303085 24.299044 19.237148 c
24.340977 19.154848 24.379959 19.071396 24.416210 18.986607 c
24.358574 18.992504 24.301773 18.995283 24.246313 18.995283 c
23.859127 18.995283 23.462633 18.858194 23.151894 18.556011 c
23.139587 18.582151 23.126959 18.607914 23.114004 18.633341 c
22.698393 19.449024 22.035223 20.112194 21.219540 20.527805 c
20.794132 20.744560 20.273966 20.869617 19.481329 20.934380 c
18.680929 20.999775 17.662596 21.000292 16.251492 21.000292 c
12.251492 21.000292 l
h
23.586491 10.476933 m
23.586491 9.665292 l
23.586491 8.254187 23.585974 7.235853 23.520578 6.435453 c
23.455818 5.642817 23.330761 5.122650 23.114004 4.697243 c
22.698393 3.881559 22.035223 3.218390 21.219540 2.802778 c
20.794132 2.586021 20.273966 2.460964 19.481329 2.396204 c
18.918163 2.350191 18.247105 2.336298 17.407255 2.332104 c
17.146738 1.851034 16.831821 1.404419 16.470541 1.000296 c
17.755117 1.000437 18.768629 1.003542 19.589634 1.070620 c
20.464520 1.142101 21.179197 1.289528 21.823347 1.617739 c
22.889286 2.160862 23.755920 3.027496 24.299044 4.093435 c
24.627254 4.737585 24.774681 5.452263 24.846163 6.327148 c
24.916498 7.188025 24.916496 8.260560 24.916492 9.635324 c
24.916492 9.665292 l
24.916492 10.477765 l
24.692331 10.376284 24.459436 10.335283 24.246313 10.335283 c
24.023413 10.335283 23.797424 10.380719 23.586491 10.476933 c
h
4.028222 18.424435 m
3.989551 18.434845 3.946950 18.445435 3.899234 18.456572 c
3.773456 18.018873 3.700778 17.541447 3.656821 17.003433 c
3.589741 16.182411 3.586638 15.168874 3.586498 13.884255 c
3.990639 14.245567 4.437260 14.560516 4.918303 14.821041 c
4.921660 15.493275 4.931233 16.057365 4.958515 16.544550 c
4.885362 16.586319 4.813812 16.635044 4.744837 16.691338 c
4.432238 16.946472 4.253565 17.291515 4.190753 17.638439 c
4.115469 18.029583 4.070664 18.261026 4.028222 18.424435 c
h
12.263523 12.880507 m
11.783911 12.995651 11.184472 13.000283 9.751537 13.000283 c
9.615499 13.000283 l
8.312892 13.000283 7.767750 12.996450 7.329850 12.901168 c
5.671649 12.540359 4.376461 11.245171 4.015652 9.586969 c
3.920388 9.149153 3.916537 8.598660 3.916537 7.284307 c
3.916538 7.244511 l
3.916559 6.745894 3.916570 6.445877 3.886761 6.156284 c
3.773773 5.058630 3.342675 4.017868 2.646411 3.161816 c
2.462717 2.935965 2.252196 2.725460 1.902508 2.375801 c
1.874773 2.348068 l
1.685575 2.158869 1.557790 2.030909 1.467287 1.933002 c
1.400132 1.860353 1.374395 1.825907 1.367698 1.816944 c
1.365830 1.814526 l
1.275192 1.632591 1.366466 1.412235 1.559202 1.347677 c
1.562236 1.347288 l
1.573308 1.345686 1.615863 1.339527 1.714722 1.335642 c
1.847948 1.330406 2.028787 1.330284 2.296353 1.330284 c
9.751537 1.330284 l
11.184472 1.330284 11.783911 1.334915 12.263523 1.450060 c
13.848611 1.830605 15.086215 3.068211 15.466761 4.653297 c
15.581905 5.132910 15.586536 5.732349 15.586536 7.165283 c
15.586536 8.598218 15.581905 9.197657 15.466761 9.677269 c
15.086215 11.262357 13.848611 12.499961 12.263523 12.880507 c
h
9.862087 14.330290 m
11.151264 14.330413 11.921191 14.330485 12.574005 14.173759 c
14.645407 13.676459 16.262714 12.059153 16.760014 9.987751 c
16.916740 9.334934 16.916668 8.565005 16.916546 7.275822 c
16.916538 7.165283 l
16.916546 7.054745 l
16.916668 5.765560 16.916740 4.995632 16.760014 4.342815 c
16.262714 2.271414 14.645407 0.654106 12.574005 0.156807 c
11.921206 0.000082 11.151302 0.000154 9.862179 0.000275 c
9.862162 0.000275 l
9.862096 0.000275 l
9.751537 0.000282 l
2.296353 0.000282 l
2.282249 0.000282 l
2.281802 0.000282 l
2.032090 0.000282 1.824975 0.000282 1.662498 0.006668 c
1.507339 0.012764 1.327234 0.025803 1.161439 0.078495 c
0.177813 0.391111 -0.287356 1.514128 0.187120 2.430710 c
0.267095 2.585203 0.385229 2.721775 0.490633 2.835800 c
0.601075 2.955278 0.747639 3.101841 0.924361 3.278561 c
0.934321 3.288519 l
1.319947 3.674145 1.479205 3.834553 1.614605 4.001026 c
2.147404 4.656101 2.477290 5.452517 2.563752 6.292469 c
2.585719 6.505878 2.586537 6.734093 2.586537 7.284307 c
2.586531 7.386150 l
2.586429 8.568308 2.586368 9.273705 2.716062 9.869748 c
3.187567 12.036694 4.880127 13.729253 7.047072 14.200759 c
7.643106 14.330450 8.342933 14.330390 9.514974 14.330289 c
9.514991 14.330289 l
9.615499 14.330283 l
9.751537 14.330283 l
9.862087 14.330290 l
h
f*
n
Q
endstream
endobj
3 0 obj
8007
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000008097 00000 n
0000008120 00000 n
0000008293 00000 n
0000008367 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
8426
%%EOF

View File

@ -18800,50 +18800,21 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
initialMediaAreas: initialMediaAreas,
initialVideoPosition: nil,
transitionIn: nil,
transitionOut: { finished, isNew in
if finished {
if let transitionOut = externalState.transitionOut?(externalState.storyTarget, externalState.isPeerArchived), let destinationView = transitionOut.destinationView {
return MediaEditorScreen.TransitionOut(
destinationView: destinationView,
destinationRect: transitionOut.destinationRect,
destinationCornerRadius: transitionOut.destinationCornerRadius
)
} else {
return nil
}
} else {
return nil
}
transitionOut: { _, _ in
return nil
},
completion: { result, commit in
let target: Stories.PendingTarget
let targetPeerId: EnginePeer.Id
if let sendAsPeerId = result.options.sendAsPeerId {
target = .peer(sendAsPeerId)
targetPeerId = sendAsPeerId
} else {
target = .myStories
targetPeerId = context.account.peerId
}
externalState.storyTarget = target
let _ = (context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: targetPeerId))
|> deliverOnMainQueue).startStandalone(next: { peer in
guard let peer else {
return
}
if case let .user(user) = peer {
externalState.isPeerArchived = user.storiesHidden ?? false
} else if case let .channel(channel) = peer {
externalState.isPeerArchived = channel.storiesHidden ?? false
}
if let rootController = context.sharedContext.mainWindow?.viewController as? TelegramRootControllerInterface {
rootController.proceedWithStoryUpload(target: target, result: result, existingMedia: nil, forwardInfo: nil, externalState: externalState, commit: commit)
}
})
if let rootController = context.sharedContext.mainWindow?.viewController as? TelegramRootControllerInterface {
rootController.proceedWithStoryUpload(target: target, result: result, existingMedia: nil, forwardInfo: nil, externalState: externalState, commit: commit)
}
}
)
self.push(controller)

View File

@ -49,6 +49,7 @@ import ChatMessageItemImpl
import ChatRecentActionsController
import PeerInfoScreen
import ChatQrCodeScreen
import UndoUI
private final class AccountUserInterfaceInUseContext {
let subscribers = Bag<(Bool) -> Void>()
@ -1948,6 +1949,72 @@ public final class SharedAccountContextImpl: SharedAccountContext {
return PremiumLimitScreen(context: context, subject: mappedSubject, count: count, forceDark: forceDark, cancel: cancel, action: action)
}
public func makePremiumGiftController(context: AccountContext) -> ViewController {
let options = Promise<[PremiumGiftCodeOption]>()
options.set(context.engine.payments.premiumGiftCodeOptions(peerId: nil))
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
let limit: Int32 = 10
var reachedLimitImpl: ((Int32) -> Void)?
let controller = context.sharedContext.makeContactMultiselectionController(ContactMultiselectionControllerParams(context: context, mode: .premiumGifting, options: [], isPeerEnabled: { peer in
if case let .user(user) = peer, user.botInfo == nil {
return true
} else {
return false
}
}, limit: limit, reachedLimit: { limit in
reachedLimitImpl?(limit)
}))
reachedLimitImpl = { [weak controller] limit in
guard let controller else {
return
}
HapticFeedback().error()
controller.present(UndoOverlayController(presentationData: presentationData, content: .info(title: nil, text: presentationData.strings.Premium_Gift_ContactSelection_MaximumReached("\(limit)").string, timeout: nil, customUndoText: nil), elevatedLayout: true, position: .bottom, animateInAsReplacement: false, action: { _ in return false }), in: .current)
}
let _ = combineLatest(queue: Queue.mainQueue(), controller.result, options.get())
.startStandalone(next: { [weak controller] result, options in
guard let controller else {
return
}
var peerIds: [PeerId] = []
if case let .result(peerIdsValue, _) = result {
peerIds = peerIdsValue.compactMap({ peerId in
if case let .peer(peerId) = peerId {
return peerId
} else {
return nil
}
})
}
let mappedOptions = options.filter { $0.users == 1 }.map { CachedPremiumGiftOption(months: $0.months, currency: $0.currency, amount: $0.amount, botUrl: "", storeProductId: $0.storeProductId) }
var pushImpl: ((ViewController) -> Void)?
var filterImpl: (() -> Void)?
let giftController = PremiumGiftScreen(context: context, peerIds: peerIds, options: mappedOptions, source: .settings, pushController: { c in
pushImpl?(c)
}, completion: {
filterImpl?()
})
pushImpl = { [weak giftController] c in
giftController?.push(c)
}
filterImpl = { [weak giftController] in
if let navigationController = giftController?.navigationController as? NavigationController {
var controllers = navigationController.viewControllers
controllers = controllers.filter { !($0 is ContactMultiselectionController) }
navigationController.setViewControllers(controllers, animated: true)
}
}
controller.push(giftController)
})
return controller
}
public func makeStickerPackScreen(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)?, mainStickerPack: StickerPackReference, stickerPacks: [StickerPackReference], loadedStickerPacks: [LoadedStickerPack], parentNavigationController: NavigationController?, sendSticker: ((FileMediaReference, UIView, CGRect) -> Bool)?) -> ViewController {
return StickerPackScreen(context: context, updatedPresentationData: updatedPresentationData, mainStickerPack: mainStickerPack, stickerPacks: stickerPacks, loadedStickerPacks: loadedStickerPacks, parentNavigationController: parentNavigationController, sendSticker: sendSticker)
}